我们使用 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();
最佳答案
此问题可能是由动态淡入的动画图形引起的。
ABCpdf 将在页面加载完成后立即 try catch 页面。因此,如果图表的初始状态为空白,这就是它在渲染的 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 变为“true”或“undefined”,然后再渲染任何 HTML。如果超过 HtmlOptions.Timeout,ABCpdf 将停止观看。
window.ABCpdf_go 属性是 ABCpdf 最近添加的,因此请检查您使用的是最新版本。
关于asp.net - 使用 abcpdf 从带有 highcharts 的页面生成 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6596850/