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は、HTMLをレンダリングする前にwindow.ABCpdf_goが「true」または「undefined」になるのを待ちます。HtmlOptions.Timeoutを超えると、ABCpdfは監視を停止します。

window.ABCpdf_goプロパティはABCpdfに最近追加されたものなので、最新バージョンで作業していることを確認してください。

于 2011-11-01T10:33:19.567 に答える