我有一个使用基于表单的身份验证的应用程序。我正在尝试复制应用程序中的页面并使用 wkhtmltopdf 将其保存为 PDF。
wkhtmltopdf 已安装并且工作正常。我可以在应用程序中成功调用它以生成另一个网站的 PDF,无需身份验证(即 bbc.co.uk)。
我无法将用户名/密码传递给应用程序以生成所需页面的副本。相反,我得到了登录屏幕的 PDF。
客户端和服务器都是 Windows(分别是 7 和 2008)。我正在使用命令:
wkhtmltopdf.exe --post userid=xxx --post pwd=yyy --ignore-load-errors http://url.com/blah/blah/测试.pdf
其中 xxx 是我的用户名,yyy 是我的密码。我已经浏览了登录页面的源代码,并且表单字段的 id 是 userid 和 pwd,所以我相信我在命令行中的 post 参数是正确的。
彻底谷歌搜索后,我可以看到提到 --cookie-jar 参数,但还没有设法计算出它的用法,或者即使它会有所帮助。
谢谢
邓肯
最佳答案
如果您使用 ASP.NET 表单例份验证,您可以通过一系列 --cookie
将当前用户的身份验证 cookie 转发到 wkhtmltopdf。参数。这是假设经过身份验证的使用(您可以从中获取身份验证 cookie)触发 PDF 打印输出。
注意:这不是从 .NET 应用程序启动 wkhtmltopdf.exe 的完整工作代码,而只是如何将 cookie 传递给 wkhtmltopdf 的示例。
有关从 .NET 启动 wkhtmltopdf.exe 的示例,请参阅:how to pass html as a string using wkhtmltopdf?
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "wkhtmltopdf.exe";
string cookieArgs = "";
var cookies = HttpContext.Current.Request.Cookies;
if (cookies != null)
{
var sb = new System.Text.StringBuilder();
// you probably only need the ".ASPXFORMSAUTH"
// and "ASP.NET_SessionId" cookies
// but I pass everything just in case
foreach (string key in cookies.AllKeys)
{
string value = cookies[key].Value;
sb.AppendFormat("--cookie {0} {1} ", key, value);
}
cookieArgs = sb.ToString();
}
psi.Arguments = urlToPrint + " -q " + cookieArgs + " -";
Process.Start(psi);
关于pdf-generation - wkhtmltopdf 和基于表单的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7019603/