2

我们使用 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();
4

1 回答 1

2

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

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

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

于 2011-11-01T10:33:19.567 回答