使用abcpdf从包含高图的页面生成PDF

时间:2011-07-06 13:06:16

标签: asp.net highcharts abcpdf

我们使用ABCPDF将HTMl页面转换为PDF。一切正常,除了使用highcharts生成的图表.ascesscript标签设置为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();

1 个答案:

答案 0 :(得分: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之前变为“true”或“undefined”。如果超过HtmlOptions.Timeout,ABCpdf将停止观看。

window.ABCpdf_go属性是ABCpdf的最新成员,因此请检查您是否使用了最新版本。