我正在使用NReco.PdfConverter
和wkhtml
在C#中编写Web服务,将Web页面转换为PDF文件。
网页(在SharePoint上)需要授权,并且还包含用户需要填写的表单,因此Web服务不能简单地访问该页面的URL并下载它。
JavaScript和CSS文件对于正确呈现表单也很重要,包括来自SharePoint的许多JS文件和样式表。
到目前为止,我最好的想法是:
当用户点击“生成PDF”时,JavaScript会将整个当前页面转换为单个字符串(内联附加CSS文件和JS文件);
POST
使用$.ajax()
将该字符串添加到网络服务。
使用NReco.PdfConverter
,将该字符串转换为PDF并将其保存到文件中是微不足道的:
var converter = new HtmlToPdfConverter
{
Margins = new PageMargins
{
Top = 0,
Bottom = 0,
Left = 0,
Right = 0
},
CustomWkHtmlArgs = "--print-media-type"
};
converter.GeneratePdf(htmlContent);
如何在浏览器中实现生成单页HTML(包括复选框的状态,表单内的文本等)的想法?
这是非常复杂的吗?有人知道另一种解决方案吗?
答案 0 :(得分:1)
您可以使用适当的wkhtmltopdf选项传递授权cookie(或标头),例如(如果使用WebForms身份验证):
var pdfGen = new HtmlToPdfConverter();
pdfGen.CustomWkHtmlArgs = String.Format(" --cookie {0} {1} ",
FormsAuthentication.FormsCookieName,
Request.Cookies[FormsAuthentication.FormsCookieName] );
pdfGen.GeneratePdfFromFile("your_sharepoint_web_page_url", null, "output.pdf");
---更新---
用于HTTP Basic身份验证:
pdfGen.CustomWkHtmlArgs = String.Format(" --username {0} --password {1}", username, pwd );