我正在尝试创建一个我在模型窗口中的
JavaScript图表的PDF(我的图表是一个.aspx视图中的javascript和css的组合).在渲染的PDF文件中唯一的事情是窗口中的静态内容,实际的JavaScript图表并不存在.
我打电话来创建PDF如下:
public byte[] WKHtmlToPdf(string url) { var fileName = " - "; var wkhtmlDir = "C:\\Temp\\wkhtml"; var wkhtml = "C:\\Temp\\wkhtml\\wkhtmltopdf.exe"; var p = new Process(); p.StartInfo.CreateNoWindow = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = true; p.StartInfo.RedirectStandardInput = true; p.StartInfo.UseShellExecute = false; p.StartInfo.FileName = wkhtml; p.StartInfo.WorkingDirectory = wkhtmlDir; string switches = ""; switches += "--print-media-type "; switches += "--margin-top 0mm --margin-bottom 0mm --margin-right 0mm --margin-left 0mm "; switches += "--page-size Letter "; p.StartInfo.Arguments = switches + " " + url + " " + fileName; p.Start(); //read output byte[] buffer = new byte[32768]; byte[] file; using (var ms = new MemoryStream()) { while (true) { int read = p.StandardOutput.BaseStream.Read(buffer,buffer.Length); if (read <= 0) { break; } ms.Write(buffer,read); } file = ms.ToArray(); } // wait or exit p.WaitForExit(60000); // read the exit code,close process int returnCode = p.ExitCode; p.Close(); return returnCode == 0 ? file : null; }
关于我如何抓住JavaScript图表的任何想法?也许.Net版本更合适,或者我必须将生成的页面保存到文件中,并将其传递到工具中.
谢谢.
解决方法
在我们的项目中,我们做了一些模拟,成功的事情.我们现在使用wkhtmltopdf 0.9.9与
Highcharts结合使用.通过jQuery flot,我们在经过一点调整后也取得了成功.在我们的项目中,我们首先将视图呈现为一个字符串,并将其传递给使用它的stdin的wkhtml.然后我们抓住wkhtml的stdout并将其传回浏览器.
你的wkhtml设置似乎是正确的,除了我们使用stdin和stdout.不知道是否可以是一个问题.
如果您使用这些图表之一,我想我可以帮助您.你使用什么图表?
最后一个注意事项:当使用不同于端口80的端口号时,Wkhtmltopdf 0.10rc2似乎在从localhost加载外部资源(js / css)时出现问题.