У меня есть реализация ABCPdf 13.3.0, с помощью которой я пытаюсь визуализировать html-содержимое на сервере. Для этого я использую движок Webkit, поскольку он поддерживает импорт пользовательских шрифтов, а также потому, что Gecko не так хорошо отображает отчет.
Все работало отлично, пока мне не понадобилось добавьте Highcharts в микс. Я нашел способ создать разметку highcharts, использующую JavaScript. Когда я загружаю необработанную разметку в браузер, диаграмма отображается так, как ожидалось. Однако когда я отправляю ту же самую разметку через ABCPDF, отображается все, кроме диаграммы.
Вот пример необработанного HTML-кода для области с диаграммой, с разметка, сгенерированная высокими диаграммами, включала:
if (document.addEventListener) {document.addEventListener("DOMContentLoaded", function() {createChartf471be1cb2024da284178920e0794b6d();});} else if (document.attachEvent) {document.attachEvent("onreadystatechange", function(){if (document.readyState === "complete"){document.detachEvent("onreadystatechange", arguments.callee);createChartf471be1cb2024da284178920e0794b6d();}});}function createChartf471be1cb2024da284178920e0794b6d() {var ChartOptions = {"exporting":{"enabled":false},"title":{"text":""},"yAxis":[{"title":{"text":""},"min":0.0}],"xAxis":[{"categories":["62","63","64","65","66","67","68","69","70"]}],"credits":{"enabled":false},"legend":{"enabled":false},"chart":{"marginTop":0.0,"renderTo":"f471be1cb2024da284178920e0794b6d","marginRight":0.0,"height":"170","marginBottom":0.0,"marginLeft":0.0},"series":[{"color":"rgb(217,217,216)","type":"column","data":[{"y":2344.0,"x":62.0},{"y":2597.0,"x":63.0},{"y":2881.0,"x":64.0},{"y":3246.0,"x":65.0},{"y":3635.0,"x":66.0},{"y":4051.0,"x":67.0},{"y":4550.0,"x":68.0},{"y":5082.0,"x":69.0},{"y":5650.0,"x":70.0}],"dataLabels":{"inside":true,"format":"${text}","enabled":true}}],"plotOptions":{"column":{"stacking":"normal","animation":{"duration":0},"dataLabels":{"enabled":false}}}};Highcharts.chart("f471be1cb2024da284178920e0794b6d",ChartOptions);}
Test
Я пробовал различные способы задержки рендеринга, в том числе пытался использовать JavaScript (работает для Gecko, но не для Webkit), а также пробовал использовать некоторые настройки из найденного сообщения:
document.SetInfo(0, "RenderDelay", "500")
document.SetInfo(0, "OneStageRender", 0)
А вот основная логика моего рендерера (.net 9.0)
public async Task RenderMarkupToPdfAsync(PdfOptions options,
CancellationToken cancellationToken = default)
{
if (!XSettings.LicenseValid)
{
//license key installation omitted for brevity
}
using var document = new Doc();
document.HtmlOptions.Engine = EngineType.WebKit;
document.HtmlOptions.UseScript = options.EnableJavascript;
document.HtmlOptions.Media = MediaType.Screen;
document.HtmlOptions.ForWebKit.UseScript = true;
document.HtmlOptions.ForWebKit.OnLoadScript = $"window.ABCpdf_go = false; (function(){{ setTimeout(function(){{ window.ABCpdf_go = true; }}, 2000); }})();";
if (options.EnableJavascript && options.JavascriptWaitDuration.TotalMilliseconds > 0)
{
document.HtmlOptions.OnLoadScript = $"(function(){{ window.ABCpdf_go = false; setTimeout(function(){{ window.ABCpdf_go = true; }}, {options.JavascriptWaitDuration.TotalMilliseconds}); }})();";
}
foreach (var fontUri in options.FontUris)
{
document.AddImageUrl(fontUri.AbsoluteUri);
}
if (options.HorizontalMargin > 0 || options.VerticalMargin > 0)
{
document.Rect.Inset(options.HorizontalMargin, options.VerticalMargin);
}
var imageId = document.AddImageHtml(options.Html, true, 680, true);
while (document.Chainable(imageId))
{
document.Page = document.AddPage();
imageId = document.AddImageToChain(imageId);
}
//remove blank pages
for (var i = document.PageCount; i > 0; i--)
{
document.PageNumber = i;
//get the pdf content
var textContent = document.GetText("Text");
//delete the page if it is blank
if (string.IsNullOrEmpty(textContent))
{
document.Delete(document.Page);
}
}
//add page numbers to all pages after the cover page
if (options.IncludePageNumbers)
{
for (var i = 2; i k).Select(k => k.ToString()).ToList()
}
],
YAxis =
[
new YAxis
{
Min = 0,
Title = new YAxisTitle()
{
Text = ""
}
}
],
Series =
[
new ColumnSeries()
{
Data = data.Select(d => new ColumnSeriesData()
{
X = d.Key,
Y = d.Value
}).ToList(),
Color = "rgb(217,217,216)",
DataLabels = new ColumnSeriesDataLabels()
{
Enabled = true,
Inside = true,
Format = "${text}"
}
}
],
PlotOptions = new PlotOptions()
{
Column = new PlotOptionsColumn()
{
Stacking = PlotOptionsColumnStacking.Normal,
//AnimationBool = false,
Animation = new Animation()
{
Duration = 0
},
DataLabels = new PlotOptionsColumnDataLabels()
{
Enabled = false
}
}
},
Exporting = new Exporting()
{
Enabled = false
},
Credits = new Credits()
{
Enabled = false
},
Legend = new Legend()
{
Enabled = false
}
};
return chart;
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... -highcarts
Серверный PDF с ABCPdf.Webkit не отображает Highcarts ⇐ C#
Место общения программистов C#
-
Anonymous
1737026903
Anonymous
У меня есть реализация ABCPdf 13.3.0, с помощью которой я пытаюсь визуализировать html-содержимое на сервере. Для этого я использую движок Webkit, поскольку он поддерживает импорт пользовательских шрифтов, а также потому, что Gecko не так хорошо отображает отчет.
Все работало отлично, пока мне не понадобилось добавьте Highcharts в микс. Я нашел способ создать разметку highcharts, использующую JavaScript. Когда я загружаю необработанную разметку в браузер, диаграмма отображается так, как ожидалось. Однако когда я отправляю ту же самую разметку через ABCPDF, отображается все, кроме диаграммы.
Вот пример необработанного HTML-кода для области с диаграммой, с разметка, сгенерированная высокими диаграммами, включала:
if (document.addEventListener) {document.addEventListener("DOMContentLoaded", function() {createChartf471be1cb2024da284178920e0794b6d();});} else if (document.attachEvent) {document.attachEvent("onreadystatechange", function(){if (document.readyState === "complete"){document.detachEvent("onreadystatechange", arguments.callee);createChartf471be1cb2024da284178920e0794b6d();}});}function createChartf471be1cb2024da284178920e0794b6d() {var ChartOptions = {"exporting":{"enabled":false},"title":{"text":""},"yAxis":[{"title":{"text":""},"min":0.0}],"xAxis":[{"categories":["62","63","64","65","66","67","68","69","70"]}],"credits":{"enabled":false},"legend":{"enabled":false},"chart":{"marginTop":0.0,"renderTo":"f471be1cb2024da284178920e0794b6d","marginRight":0.0,"height":"170","marginBottom":0.0,"marginLeft":0.0},"series":[{"color":"rgb(217,217,216)","type":"column","data":[{"y":2344.0,"x":62.0},{"y":2597.0,"x":63.0},{"y":2881.0,"x":64.0},{"y":3246.0,"x":65.0},{"y":3635.0,"x":66.0},{"y":4051.0,"x":67.0},{"y":4550.0,"x":68.0},{"y":5082.0,"x":69.0},{"y":5650.0,"x":70.0}],"dataLabels":{"inside":true,"format":"${text}","enabled":true}}],"plotOptions":{"column":{"stacking":"normal","animation":{"duration":0},"dataLabels":{"enabled":false}}}};Highcharts.chart("f471be1cb2024da284178920e0794b6d",ChartOptions);}
[b]Test[/b]
Я пробовал различные способы задержки рендеринга, в том числе пытался использовать JavaScript (работает для Gecko, но не для Webkit), а также пробовал использовать некоторые настройки из найденного сообщения:
document.SetInfo(0, "RenderDelay", "500")
document.SetInfo(0, "OneStageRender", 0)
А вот основная логика моего рендерера (.net 9.0)
public async Task RenderMarkupToPdfAsync(PdfOptions options,
CancellationToken cancellationToken = default)
{
if (!XSettings.LicenseValid)
{
//license key installation omitted for brevity
}
using var document = new Doc();
document.HtmlOptions.Engine = EngineType.WebKit;
document.HtmlOptions.UseScript = options.EnableJavascript;
document.HtmlOptions.Media = MediaType.Screen;
document.HtmlOptions.ForWebKit.UseScript = true;
document.HtmlOptions.ForWebKit.OnLoadScript = $"window.ABCpdf_go = false; (function(){{ setTimeout(function(){{ window.ABCpdf_go = true; }}, 2000); }})();";
if (options.EnableJavascript && options.JavascriptWaitDuration.TotalMilliseconds > 0)
{
document.HtmlOptions.OnLoadScript = $"(function(){{ window.ABCpdf_go = false; setTimeout(function(){{ window.ABCpdf_go = true; }}, {options.JavascriptWaitDuration.TotalMilliseconds}); }})();";
}
foreach (var fontUri in options.FontUris)
{
document.AddImageUrl(fontUri.AbsoluteUri);
}
if (options.HorizontalMargin > 0 || options.VerticalMargin > 0)
{
document.Rect.Inset(options.HorizontalMargin, options.VerticalMargin);
}
var imageId = document.AddImageHtml(options.Html, true, 680, true);
while (document.Chainable(imageId))
{
document.Page = document.AddPage();
imageId = document.AddImageToChain(imageId);
}
//remove blank pages
for (var i = document.PageCount; i > 0; i--)
{
document.PageNumber = i;
//get the pdf content
var textContent = document.GetText("Text");
//delete the page if it is blank
if (string.IsNullOrEmpty(textContent))
{
document.Delete(document.Page);
}
}
//add page numbers to all pages after the cover page
if (options.IncludePageNumbers)
{
for (var i = 2; i k).Select(k => k.ToString()).ToList()
}
],
YAxis =
[
new YAxis
{
Min = 0,
Title = new YAxisTitle()
{
Text = ""
}
}
],
Series =
[
new ColumnSeries()
{
Data = data.Select(d => new ColumnSeriesData()
{
X = d.Key,
Y = d.Value
}).ToList(),
Color = "rgb(217,217,216)",
DataLabels = new ColumnSeriesDataLabels()
{
Enabled = true,
Inside = true,
Format = "${text}"
}
}
],
PlotOptions = new PlotOptions()
{
Column = new PlotOptionsColumn()
{
Stacking = PlotOptionsColumnStacking.Normal,
//AnimationBool = false,
Animation = new Animation()
{
Duration = 0
},
DataLabels = new PlotOptionsColumnDataLabels()
{
Enabled = false
}
}
},
Exporting = new Exporting()
{
Enabled = false
},
Credits = new Credits()
{
Enabled = false
},
Legend = new Legend()
{
Enabled = false
}
};
return chart;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79359555/server-side-pdf-with-abcpdf-webkit-is-not-rendering-highcarts[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия