获取页面的整个HTML + CSS + JS,并将其发送到Web服务

时间:2016-11-08 02:10:56

标签: javascript c# html wkhtmltopdf nreco

我正在使用NReco.PdfConverterwkhtml在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(包括复选框的状态,表单内的文本等)的想法?

这是非常复杂的吗?有人知道另一种解决方案吗?

1 个答案:

答案 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 );