Проблема ABCPDF6: "HTML-рендер пуст", но вывод веб-страницы в порядке
Как видно из названия, мы используем ABCPdf6 для рендеринга PDF-файлов из XSLT. Все работало нормально, но теперь мы получаем сообщение об ошибке "HTML render пуст". Используя браузер (протестировано в IE/Firefox/Chrome), я могу просматривать сгенерированный HTML (отформатированный XSL), и он отлично отображается в браузере. ABCPDF6 не может конвертировать файл. Я пытался передать управление странице, которая выводит XSL, но я все еще получаю эту ошибку.
Кто-нибудь имеет опыт работы с ABCPdf и сталкивался с этим раньше? Код работал раньше без проблем, и другая страница, которая использует точно такой же генерирующий код (даже указывающий на ту же самую страницу-заполнитель, которая выплевывает HTML!), Работает нормально.
4 ответа
Теперь я знаю, в чем проблема в моем случае. Когда я запустил обновление Windows на моем сервере 2008, Internet Explorer 9 был установлен. IE 9 имеет другой способ рендеринга HTML, который тормозит abcPDF. Обновление до последней версии (8) решило все мои проблемы. В этой версии вы также можете попробовать другой движок HTML под названием Gecko.
Даже если вы решили свою проблему, если кто-то еще получит эту ошибку, я бы посоветовал вам установить пробную версию и попробовать ее с последней версией.
У меня была такая же ошибка на Windows 7 машина с AbcPdf4.0. Во время обновлений MS IE8 был обновлен до IE10. Проблема была исправлена удалением IE10.
Примечание: Abcpdf4.0 не работает с IE9 и выше. Либо обновите Abcpdf, либо удалите последнюю версию IE.
У меня была похожая проблема сегодня утром с AbcPdf9. Я добавил код для проверки типов движков, и GECKO работал, затем я переключил его обратно на MSHTML, и он все еще работал. Так что это была временная проблема.
Вот как вы указываете тип двигателя:
using (var document = new Doc())
{
document.HtmlOptions.Engine = EngineType.Gecko;
...
...
}
Этот код вызывает метод, который преобразует HTML в PDF, но при необходимости вызывает его дважды, так как он потерпит неудачу только один раз:
try
{
return GeneratePdfFromHtml(html, width, EngineType.MSHtml);
}
catch (Exception ex)
{
/* detect this known issue, swapping the rendering engine once seems to fix it */
if (ex.Message.ToUpper().Contains("BLANK"))
{
return GeneratePdfFromHtml(html, width, EngineType.Gecko);
}
throw;
}
Затем вы можете добавить параметр в метод, который выполняет преобразование:
public byte[] GeneratePdfFromHtml(string html, int width, EngineType engineType)
{
if (string.IsNullOrWhiteSpace(html)) throw new ArgumentNullException("html");
if (width < 100) throw new ArgumentOutOfRangeException("width");
try
{
using (var document = new Doc())
{
document.HtmlOptions.Engine = engineType;
...
...
Если у вас есть предложение или другое решение, пожалуйста, оставьте комментарий.
В regedit используйте следующие шаги
1) HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node
2) Создать ключ DWORD 32 Bit
3) Переименуйте его в "w3wp.exe"
4) Установить значение даты = 1