4

我有一个使用基于表单的身份验证的应用程序。我正在尝试复制应用程序中的页面并使用 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/test.pdf

其中 xxx 是我的用户名,yyy 是我的密码。我已经浏览了登录页面的来源,表单字段的 id 是 userid 和 pwd,所以我相信我在命令行中的 post 参数是正确的。

在彻底谷歌搜索后,我可以看到对 --cookie-jar 参数的提及,但还没有设法弄清楚它的用法,或者即使它会有所帮助。

谢谢

邓肯

4

2 回答 2

3

如果您使用的是 ASP.NET 表单身份验证,则可以通过一系列参数将当前用户的身份验证 cookie 转发到 wkhtmltopdf --cookie。这是假设经过身份验证的用户(您可以从中获取身份验证 cookie)正在触发 PDF 打印输出。

注意:这不是从 .NET 应用程序启动 wkhtmltopdf.exe 的完整工作代码,而只是如何将 cookie 传递给 wkhtmltopdf 的示例。

有关从 .NET 启动 wkhtmltopdf.exe 的示例,请参阅:如何使用 wkhtmltopdf 将 html 作为字符串传递?

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);
于 2013-10-30T17:52:07.253 回答
1

此问题现已解决。我使用的是 0.9.9 版,但无法正常工作。一旦我移到 0.10.0 rc2 版本,它就可以正常工作了。

如果其他人正在尝试同样的事情,我使用的代码行如上,我不需要 --cookie-jar 参数。

于 2011-08-11T21:16:15.500 回答