创建pdf与wkhtmltopdf和渲染javascript

Create pdf with wkhtmltopdf and rendering javascript

本文关键字:javascript wkhtmltopdf pdf 创建      更新时间:2023-09-26

我试图创建一个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得到这个想法的