wkhtmltopdf和基于表单的身份验证

时间:2011-08-11 00:40:16

标签: pdf-generation wkhtmltopdf

我有一个使用基于表单的身份验证的应用程序。我正在尝试在应用程序中获取页面的副本,并使用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参数的提及,但是没有设法解决它的用法,或者即使它有用。

感谢

邓肯

2 个答案:

答案 0 :(得分:3)

如果您正在使用ASP.NET Forms身份验证,则可以通过一系列--cookie args将当前用户的身份验证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);

答案 1 :(得分:1)

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

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