加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

用wkhtmltopdf创建pdf并渲染javascript

发布时间:2020-12-14 19:35:43 所属栏目:资源 来源:网络整理
导读:我正在尝试创建一个我在模型窗口中的 JavaScript图表的PDF(我的图表是一个.aspx视图中的javascript和css的组合).在渲染的PDF文件中唯一的事情是窗口中的静态内容,实际的JavaScript图表并不存在. 我打电话来创建PDF如下: public byte[] WKHtmlToPdf(string u
我正在尝试创建一个我在模型窗口中的 JavaScript图表的PDF(我的图表是一个.aspx视图中的javascript和css的组合).在渲染的PDF文件中唯一的事情是窗口中的静态内容,实际的JavaScript图表并不存在.

我打电话来创建PDF如下:

public byte[] WKHtmlToPdf(string url)
    {
        var fileName = " - ";
        var wkhtmlDir = "C:Tempwkhtml";
        var wkhtml = "C:Tempwkhtmlwkhtmltopdf.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)时出现问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读