Проблема ABCPDF6: рендеринг HTML пуст, но вывод веб-страницы в порядке

Как следует из названия, мы используем ABCPdf6 для рендеринга PDF-файлов из XSLT. Все работало нормально, но теперь мы получаем сообщение об ошибке «Визуализация HTML пуста». Используя браузер (проверено в IE/Firefox/Chrome), я могу перейти к сгенерированному HTML (отформатированному XSL), и он отлично отображается в браузере. ABCPDF6 не может преобразовать файл. Я попытался передать управление странице, которая выводит XSL, но я все еще получаю эту ошибку.

Кто-нибудь имеет опыт работы с ABCPdf и сталкивался с этим раньше? Раньше код работал нормально, без проблем, и другая страница, использующая точно такой же генерирующий код (даже указывающая на такую ​​же страницу-заполнитель, которая выдает HTML!) работает нормально.


person Wayne Molina    schedule 04.10.2011    source источник
comment
У меня точно такая же проблема, вы смогли ее решить? Я почти уверен, что эта проблема возникла после того, как мы запустили обновление Windows на нашем сервере 2008 года.   -  person Andreas    schedule 17.10.2011
comment
Как оказалось, проблема была совершенно не связана с ABCPDF. Я понятия не имею, почему возникла эта проблема. Извините, я не могу быть более полезным для вас.   -  person Wayne Molina    schedule 17.10.2011
comment
stackoverflow.com/questions/5300720/ это устранило ту же проблему для меня.   -  person Anicho    schedule 26.11.2013


Ответы (4)


Теперь я знаю, в чем проблема была в моем случае. Когда я запускал обновление Windows на своем сервере 2008 года, был установлен Internet Explorer 9. IE 9 имеет другой способ рендеринга HTML, который тормозит abcPDF. Обновление до последней версии (8) решило все мои проблемы. В этой версии вы также можете попробовать другой HTML-движок под названием Gecko.

Даже если вы решили свою проблему, если кто-то еще получит эту ошибку, я бы посоветовал вам установить пробную версию и попробовать это с последней версией.

person Andreas    schedule 20.10.2011
comment
Я предполагаю, что вы имеете в виду abcPDF версии 8, а не IE версии 8. Кроме того, забавные мелочи: Gecko — это средство визуализации Mozilla, поэтому он должен быть похож на Firefox. :) - person djdanlib; 20.10.2011
comment
есть ли способ решить проблему без движка рендеринга Gecko? У нас ABCPdf встроен как сторонний компонент в какой-то софт, и меня эта проблема просто бесит, так как я не могу там ничего напрямую изменить. ABCPdf отстой. - person Oleksandr; 01.04.2014

У меня была такая же ошибка на машине с Windows 7 с AbcPdf4.0. Во время обновлений MS IE8 был обновлен до IE10. Проблема устранена путем удаления IE10.

Примечание. Abcpdf4.0 не работает с IE9 и выше. Либо обновите Abcpdf, либо удалите последнюю версию IE.

person user2160054    schedule 30.08.2013

Сегодня утром у меня была аналогичная проблема с 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;
                ...
                ...

Если у вас есть предложение или другое решение, пожалуйста, оставьте комментарий.

person Martin Lottering    schedule 19.09.2014

В regedit используйте следующие шаги

1) HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node

2) Создайте ключ DWORD 32 Bit

3) Переименуйте его в "w3wp.exe"

4) Установить дату валютирования = 1

person Arjun Prakash    schedule 28.09.2015