我在我的服务器上使用wkhtmltopdf.exe将一些基于.aspx页面的报告转换为pdf,然后将其下载到客户端计算机。经过广泛的研究后,我发现这个blog post有一个例子似乎可以达到我想要完成的目标。我试图让它适应我自己的用途,但我不能让它工作。页面的响应是.pdf文件,但长度为0个字节。我一直在研究将渲染的aspx页面转换为.pdf的解决方案近一天半现在没有运气 - 这个解决方案是我最接近的,我想我只是错过了一些简单的东西,它会起作用。
请参阅下面的代码 - 如果您能提供任何指导,我将不胜感激!
public partial class PDFOut : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string args = string.Format("\"{0}\" - ", Request.Form["url"]);//'http://www.google.com' is what I'm passing for testing
var startInfo = new ProcessStartInfo(Server.MapPath("\\tools\\wkhtmltopdf.exe"), args)
{
UseShellExecute = false,
RedirectStandardOutput = true
};
var proc = new Process { StartInfo = startInfo };
proc.Start();
string output = proc.StandardOutput.ReadToEnd();
byte[] buffer = proc.StandardOutput.CurrentEncoding.GetBytes(output);
proc.WaitForExit();
proc.Close();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment; filename=test.pdf");
Response.BinaryWrite(buffer);
Response.End();
}
}
答案 0 :(得分:1)
这样的事情对你有用吗?将PDF写入临时目录,然后读取PDF并最终删除临时文件?
protected void Page_Load(object sender, EventArgs e)
{
string outputFile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName(), ".pdf");
string args = string.Format("\"{0}\" \"{1}\"", Request.Form["url"], outputFile );
var startInfo = new ProcessStartInfo(Server.MapPath("\\tools\\wkhtmltopdf.exe"), args)
{
UseShellExecute = false,
RedirectStandardOutput = true
};
var proc = new Process { StartInfo = startInfo };
proc.Start();
proc.WaitForExit();
proc.Close();
var buffer= File.ReadAllBytes(outputFile);
File.Delete(outputFile);
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment; filename=test.pdf");
Response.BinaryWrite(buffer);
Response.End();
}