如何使用wkhtmltopdf将受保护的HTML(ASP.NET MVC 3)页面转换为PDF?

3
我想将一个HTML+CSS页面转换为PDF文件。 我尝试过wkhtmltopdf,但是我遇到了一个问题,因为我想访问的页面需要在网站上进行身份验证。 我想转换为PDF的页面的URL如下:http://[WEBSITE]/PDFReport/33 如果我未经身份验证就尝试访问它,我会被重定向到登录页面。 所以当我使用wkhtmltopdf时,它会将我的登录页面转换为PDF... 我在我的ASP.NET MVC应用程序上使用的身份验证方法是SimpleMembership。
[Authorize]
public ActionResult PDFReport(string id)
{
}

我正在使用System.Diagnostics.Process执行wkhtmltopdf.exe:

FileInfo tempFile = new FileInfo(Request.PhysicalApplicationPath + "\\bin\\test.pdf");

StringBuilder argument = new StringBuilder();
argument.Append(" --disable-smart-shrinking");
argument.Append(" --no-pdf-compression");
argument.Append(" " + "http://[WEBSITE]/PDFReport/33");
argument.Append(" " + tempFile.FullName);

// to call the exe to convert
using (Process p = new System.Diagnostics.Process())
{
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.CreateNoWindow = true;
    p.StartInfo.FileName = Request.PhysicalApplicationPath + "\\bin\\wkhtmltopdf.exe";
    p.StartInfo.Arguments = argument.ToString();
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.RedirectStandardError = true;

    p.Start();
    p.WaitForExit();
}

您知道如何在不禁用此页面安全性的情况下生成PDF吗?

1个回答

1

最近我遇到了一些麻烦。简而言之,WKHTMLTOPDF是Webkit的一个版本(我相信他们称之为QT),因此当您请求受密码保护的页面时,浏览器需要像通常一样登录并存储/引用cookie。

原始调用看起来应该像这样:

`/path/wkhtmltopdf --cookie-jar my.jar --username myusername --password mypassword URL

其中:

  • my.jar 是一个jar文件,用于创建和保存cookie值
  • username 是用户名表单字段的name,而myusername是提交的值
  • password 是密码表单字段的name,而mypassword是提交的值
  • URL 是登录页面的URL

请确保包含任何其他所需的登录后字段,您可能需要监视HTTP标头,而不仅仅是查看表单。使用您的常规参数再次调用WKHTMLTOPDF,包括--cookie-jar my.jar以维护会话。就这样!

然而,在我的端上我仍然遇到了问题,但这是一个相当强大的登录(多个Cookie,安全,许多参数等)。我正在使用PHP工作,并且使用CURL更加顺利 - 我不确定它如何转换为ASP.NET(也许是这个?http://support.microsoft.com/kb/303436),但如果有帮助,这是我的逻辑:

  • 通过CURL登录
  • 获取HTML页面并存储在本地临时文件中
  • 将所有相对引用替换为绝对引用(或插入base标签)
  • 在临时文件上运行普通的WKHTMLTOPDF
  • 删除临时文件
总的来说,用这种方式做起来要容易得多,而且我感觉更好,因为我知道我是在依靠经过验证的代码,而不是 WKHTMLTOPDF 0.10 版本中的参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接