Создать PDF со страницы с высокими графиками на нем с abcpdf - PullRequest
2 голосов
/ 06 июля 2011

Мы используем ABCPDF для преобразования страницы HTMl в PDF.Все работает нормально, кроме диаграмм, сгенерированных с помощью highcharts. Для тега usecript установлено значение 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 Ответ

2 голосов
/ 01 ноября 2011

Эта проблема может быть вызвана анимированной графикой, которая динамически исчезает.

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, которое будет запускаться на стороне клиента, устанавливая свойство 'window.ABCpdf_go' в значение 'true' через 1 секунду.

ABCpdf будет ждать, пока window.ABCpdf_go станет 'true' или 'undefined', перед рендерингом любого HTML. ABCpdf перестанет наблюдать, если превышено значение HtmlOptions.Timeout.

Свойство window.ABCpdf_go является недавним дополнением к ABCpdf, поэтому проверьте, работаете ли вы с последней версией.

...