asp.net - 使用 abcpdf 从带有 highcharts 的页面生成 PDF

标签 asp.net highcharts abcpdf

我们使用 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/

相关文章:

c# - 在 ASP.Net 中创建 razor 动态 html 表

c# - 将非属性绑定(bind)到数据网格列 DataField?

javascript - 如何在 HighCharts 回调中访问 'this' 的不同上下文(Angular/Typescript)

c# - abcPDF 在将其添加到 pdf 后使我的图像变形

asp.net - OutputCache.VaryByHeader 未在响应中生成 Vary header

c# - 如何在 asp 中的搜索表单中防止 SQL 注入(inject)

javascript - 对齐 Highcharts 的 x 轴

javascript - 在图形中间添加点

c# - ABCpdf - 为每个页面添加边距顶部并将页脚保持在一个 block 中

html - 使用 abcPDF 打印横向 html->pdf