创建pdf与wkhtmltopdf和渲染javascript
Create pdf with wkhtmltopdf and rendering javascript
我试图创建一个PDF的javascript图表,我有一个模型窗口(我的图表是javascript和css在一个。aspx视图的组合)。呈现的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, 0, buffer.Length);
if (read <= 0)
{
break;
}
ms.Write(buffer, 0, 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并将其传递回浏览器。
你的html设置似乎是正确的,除了我们使用标准输入和标准输出。我不知道这会不会是个问题。
如果你用这些图表,我想我可以帮助你。你用的是什么图表?最后一个注意事项:Wkhtmltopdf 0.10rc2似乎有一些问题,从本地主机加载外部资源(js/css)时,使用的端口号不同于端口80
看起来您正在尝试获得图表的输出,根据标签判断来自Extjs 4脚本。
ext脚本可能会使用一些图表的动画,并且肯定会等待javascript事件执行并渲染图表。因此,在默认时间(200毫秒)完成之前,可能还没有完成。
一个快速的解决方案是在命令行中添加javascript-delay page选项: wkhtmltopdf http://dev.sencha.com/deploy/ext-4.0.2a/examples/charts/Mixed.html --javascript-delay=2000 test.pdf
当然可以在*nix上工作,类似的事情应该在windows上工作。
我使用wkhtmltopdf 0.9.9和pdfkit ruby gem,并有类似的问题。
我通过更改所有标签来使用绝对url来修复它。似乎wkhtmltopdf不知道通过哪个url访问页面,所以没有加载相关资源。我不知道这是否是pdfkit或wkhtmltopdf的限制。
我是从https://github.com/mileszs/wicked_pdf得到这个想法的
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- 模糊事件的Javascript测试
- Javascript更改图标
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何使用WCF服务和javascript表单post上传.doc文件
- javascript结合了数组和字典
- 这是什么 ==- javascript 运算符
- 从javascript创建一个列表
- 无法在通过jQuery的ajax加载的页面中执行javascript
- Javascript:selenium Web驱动程序isDisplayed()不工作
- 如何通过ajax刷新JSF填充的javascript变量
- 如何在Javascript中将JSon对象转换为数组
- Javascript生成的表单未提交
- 使用javascript将动态表从一个html页面打印到另一个html页
- 通过javascript重定向html传递php变量