【问题标题】:Generate PDF from a page with highcharts on it with abcpdf使用 abcpdf 从带有 highcharts 的页面生成 PDF
【发布时间】:2011-11-01 18:33:19
【问题描述】:

我们使用 ABCPDF 将 HTMl 页面转换为 PDF。一切正常,除了使用 highcharts 生成的图表。usescript 标记设置为 true,但呈现字符的区域保持空白。在 IE9 中,图表被呈现。有人知道解决办法吗?

        Doc theDoc = new Doc();
        theDoc.HtmlOptions.UseScript = true;
        theDoc.HtmlOptions.ImageQuality = 100;          

        theDoc.AddImageUrl("/factsheet.html", false, 984, true);

        byte[] theData = theDoc.GetData();
        Response.Clear();
        Response.ContentType = "application/pdf";
        Response.AddHeader("content-disposition", "inline; filename=MyPDF.PDF");
        Response.AddHeader("content-length", theData.Length.ToString());
        Response.BinaryWrite(theData);
        Response.End();

【问题讨论】:

    标签: asp.net highcharts abcpdf


    【解决方案1】:

    这个问题可能是由动态淡入的动画图形引起的。

    ABCpdf 将在加载完成后立即尝试捕获页面。因此,如果图表的初始状态为空白,这就是它在呈现的 PDF 文档中的显示方式。

    要让 Highchart 图形正确显示,您可能需要稍微延迟渲染。您可以通过将 Gecko 指定为 HTML 呈现引擎并通过 HtmlOptions.OnloadScript 属性设置延迟来实现此目的,例如:

    Doc doc = new Doc();
    doc.HtmlOptions.Engine = HTMLEngineType.Gecko;
    doc.HtmlOptions.UseScript = true;
    doc.HtmlOptions.OnLoadScript = "(function(){window.ABCpdf_go = false; setTimeout(function(){window.ABCpdf_go = true;}, 1000);})();";
    doc.AddImageUrl("http://example.com/");
    doc.Save("example.pdf");
    

    在上面的示例中,将 JavaScript 分配给 HtmlOptions.OnLoadScript 属性,该属性将在客户端运行,1 秒后将“window.ABCpdf_go”属性设置为“true”。

    ABCpdf 在呈现任何 HTML 之前将等待 window.ABCpdf_go 变为“真”或“未定义”。如果超过 HtmlOptions.Timeout,ABCpdf 将停止观看。

    window.ABCpdf_go 属性是最近添加到 ABCpdf 的,因此请检查您使用的是最新版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多