2015-05-19 6 views
3

Я не могу понять это сообщение об ошибке при обновлении до последней версии ABCPDF, 10.0.1.0. Означает ли сообщение об ошибке какие-либо подсказки? Это происходит в spurts, и перезапуск пула приложений - единственный способ исправить это сразу.Ошибка abcpdf и ошибки XULRunner или файла журнала профиля temp

WebSupergoo.ABCpdf10.Internal.PDFException: Failed to add HTML: Gecko engine failed to initialize. Possible causes: XULRunner folder not found or failure to create temporary browser profile directory. 
    at WebSupergoo.ABCpdf9.Doc.AddUrlHtml(String urlOrHtml, Boolean isHtml, Boolean paged, Int32 width, Boolean disableCache) 
    at WebSupergoo.ABCpdf9.Doc.AddImageUrl(String url, Boolean paged, Int32 width, Boolean disableCache) 
    at WebSupergoo.ABCpdf9.Doc.AddImageUrl(String url) 

В моем журнале процессов указан этот тип ввода.

"1:46:21.9863465 PM","ABCGeckoWP.exe","4052","CreateFile","C:\Windows\Temp\ABCpdf\ABCGecko\wq3tvwof.2uc","NAME NOT FOUND","Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a" 
"1:46:21.9865561 PM","ABCGeckoWP.exe","4052","CreateFile","C:\Windows\Temp\ABCpdf\ABCGecko\wq3tvwof.2uc","NAME NOT FOUND","Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a" 
+2

У меня есть такая же проблема, при которой нет решения. –

+0

У нас была такая же проблема. В итоге нам пришлось откатиться к v9, что разочаровывает. Мы пошли на v10 в надежде решить другие проблемы. А именно, наши PDF-документы были искусственно усечены. Мы использовали ABCpdf в течение многих лет, но эти проблемы, вероятно, заставят нас найти другое решение. – campbelt

ответ

2

Похоже, что исправление tempPdf.HtmlOptions.EndTasks(WebSupergoo.ABCpdf10.TaskState.AllWhenBecomeIdle); на самом деле не является исправлением и даже вызывает некоторый удар производительности. Я пошел вперед и удалил try/catch с ним и вернулся к старой версии ABC PDF, пока это не будет разрешено. Вероятно, эта версия не должна была быть выпущена, и они знали об этой проблеме еще до ее выпуска.

+0

У нас также была эта проблема, и она должна была сделать то же самое. – campbelt

0

Я была такая же проблема и с использованием ниже конфигураций помогла мне , чтобы решить эту проблему.

Сначала я загрузил и установил с website.

Добавьте к этому configSections в вашем Web.config (или App.config):

<section name="ABCpdf10.Section" type="WebSupergoo.ABCpdf10.ConfigSection, ABCpdf" allowLocation="true" allowDefinition="Everywhere" allowExeDefinition="MachineToLocalUser" overrideModeDefault="Allow" restartOnExternalChanges="true" requirePermission="true" /> 

Затем добавить это к вашему Web.config (или App.config):

<ABCpdf10.Section> 
    <Preferences> 
     <clear /> 
     <add Key="XULRunnerDirectory" Value="C:\Program Files\WebSupergoo\ABCpdf .NET 10.1 x64\ABCGecko" /> 
    </Preferences> 
</ABCpdf10.Section> 

папка может измениться в зависимости от того, какую версию вы установили (32 бита или 64 бит).

Я также удалял все связанные с ABCPdf dll (ABCpdf10-32.dll, ABCpdf10-64.dll, ABCGeckoWP.exe и т. Д.) Из папки bin, за исключением ABCPdf.dll. (Убедитесь, что вы удаляете копию для вывода свойства каталога, если вы установили с помощью nuget)

Не уверен, что помогает, но стоит попробовать.

Редактировать

выше не решило проблему для меня тоже, но я заметил, что ошибки начинают, как правило, после того, как я раскрываю новый код. Затем после iisreset он возвращается к норме.

Я сделал еще несколько копаний в руководстве, и есть еще одна вещь, которую вы могли бы попробовать (я буду :)). Руководство показывает, что многие параметры можно переопределить, и есть два, которые я считаю, связаны сделать ошибку: TempDirectory и ClearoutSize

Для первого я создал временную папку и добавлены следующие настройки:

<add Key="TempDirectory" Value="D:\ABCPdf\Temp" /> 

Для второго, я считаю, что ничего не поделаешь, но в руководстве написано следующее: При запуске проверяется каталог temp ABCpdf. Если окажется, что существует большое количество неиспользуемых элементов, каталог будет очищен.

Возможно, во время этого процесса может произойти что-то неправильное (например, путем блокировки папки), особенно если несколько процессов делают то же самое. Вы можете настроить другой временный каталог для каждого приложения и посмотреть, как это происходит.

+0

Если я выполнил ручную установку (все файлы ABCPDF и XULRunner находятся в папке BIN), я бы включил путь к папке XULRunner в файле web.config или в какую-либо другую папку? –

+0

Не обращайте внимания на мой последний комментарий, я понял это. В моем случае это будет ссылка на мою папку с bin, а не на мою папку xulrunner. Тогда это, похоже, сработает. Я просто подожду несколько часов, чтобы убедиться, что проблема полностью исчезла, прежде чем я награду щедростью, но на первый взгляд это работает правильно. –

+0

К сожалению, это не решило проблему в конце. Тем не менее, я дал вам щедрость, потому что ваш ответ был технически правильным. Выведете ответ, если я его найду. –

0

С помощью поддержки ABC PDF я смог реализовать следующую работу.

По-видимому, при использовании AddImageHtml запускается фоновый процесс, который преобразует HTML в PDF-файл для вас. Именно этот процесс, кажется, висит в какой-то момент, когда вы начнете получать эту ошибку.ABC PDF 10 предлагает метод убийства этого процесса, если он сидит без дела (что здесь и происходит).

//before you start creating your PDF, be sure to kill any remaining processes 
using (var tempPdf = new WebSupergoo.ABCpdf10.Doc()) { 
     tempPdf.HtmlOptions.Engine = WebSupergoo.ABCpdf10.EngineType.Gecko; 
     tempPdf.HtmlOptions.EndTasks(WebSupergoo.ABCpdf10.TaskState.AllWhenBecomeIdle); 
} 

Этот код просто создает документ, устанавливает тип двигателя для Gecko, а затем вызывает EndTasks с параметром «AllWhenBecomeIdle». Это убьет все оставшиеся фоновые рабочие процессы, которые сейчас ничего не делают.

После этого, это бизнес, как обычно, вы можете создать свой PDF, конвертировать HTML, ...

И в конце концов (после того как вы сохранили PDF или потоковым его в браузере (или после того, как вы удалили переменную Doc), я снова делаю то же самое: убейте все оставшиеся фоновые процессы. Пока что это работает в нашей производственной среде. Надеюсь, что так будет, пока ABC PDF не придумает более . окончательное решение

Я завернул мой код сброса в статической функции, так что я могу назвать его где-нибудь Вот код:.

public static class AbcPdfUtils { 
    public static void ResetAbcPdfGeckoProcess() 
    { 
     using (var tempPdf = new WebSupergoo.ABCpdf10.Doc()) { 
      tempPdf.HtmlOptions.Engine = WebSupergoo.ABCpdf10.EngineType.Gecko; 
      tempPdf.HtmlOptions.EndTasks(WebSupergoo.ABCpdf10.TaskState.AllWhenBecomeIdle); 
     } 
    } 
} 

EDIT 2

Остановка и перезапуск процесса Gecko делает на себя немного производительности ударил, кажется, так что это не является идеальным решением. Я связался с их командой поддержки, и они говорят, что планируют выпустить новую версию без этой проблемы, но не знаю, когда это будет. Они также советуют использовать функцию EndTasks только тогда, когда мы поймаем исключение, которое вызывается здесь. Для моего сайта, который требует совершенно переписать, я не буду идти по этому пути.

+0

Поддержка также рассказала мне об этом после того, как я отправил им этот пост. –

-1

Опираясь на ответ Стивена LEMMENS':

using (var abcpdf = new Doc()) 
{ 
    abcpdf.HtmlOptions.PageCacheClear(); 
    abcpdf.HtmlOptions.HideBackground = true; 

    abcpdf.HtmlOptions.Engine = EngineType.Gecko; 
    abcpdf.HtmlOptions.UseScript = true; 
    abcpdf.HtmlOptions.Timeout = 10000; 
    abcpdf.HtmlOptions.OnLoadScript = "(function(){window.ABCpdf_go = false; setTimeout(function(){window.ABCpdf_go = true;},3000);})();"; 

    var printContentUrl = "url for content"; 

    try 
    { 
     abcpdf.Rect.Width = 612 - 14 - 14;  //612 - 54 - 54; // whole width minus left and right 
     abcpdf.Rect.Height = 792 - 46 - 46;  //792 - 54 - 54; // whole height minus top and bottom 
     abcpdf.Rect.Position(14, 46);   // 54, 54 centered 

     // Generate pdf from Url 
     var id = abcpdf.AddImageUrl(printContentUrl); 

     while (abcpdf.GetInfo(id, "Truncated") == "1") 
     { 
      abcpdf.Page = abcpdf.AddPage(); 
      id = abcpdf.AddImageToChain(id); 
     } 

     // Add footer with page number. 
     abcpdf.Font = abcpdf.AddFont("Helvetica-Oblique"); 
     for (var i = 1; i <= abcpdf.PageCount; ++i) 
     { 
      abcpdf.PageNumber = i; 
      abcpdf.Rect.Height = 54; 
      abcpdf.Rect.Position(54, 0); 
      abcpdf.HPos = 0.9; // align to the right 
      abcpdf.VPos = 0.25; // above center 
      abcpdf.AddText(string.Format("Page {0} of {1}", i, abcpdf.PageCount)); 
     } 

     var docData = abcpdf.GetData(); 
     Response.Clear(); 
     Response.ContentType = "application/pdf"; 
     Response.AddHeader("Content-Disposition", "inline; filename=DynamicPdf.pdf"); 
     Response.BinaryWrite(docData); 
    } 
    catch(WebSupergoo.ABCpdf10.Internal.PDFException pdfEx) 
    { 
     //Log Exception here.... 
     ResetAbcPdfGeckoProcess(); 
     Response.Redirect(Request.RawUrl); 
    } 
    catch (Exception ex) 
    { 
     //Log Exception here.... 
     throw ex; 
    } 
} 

public static void ResetAbcPdfGeckoProcess() 
{ 
    using (var tempPdf = new WebSupergoo.ABCpdf10.Doc()) { 
     tempPdf.HtmlOptions.Engine = WebSupergoo.ABCpdf10.EngineType.Gecko; 
     tempPdf.HtmlOptions.EndTasks(WebSupergoo.ABCpdf10.TaskState.AllWhenBecomeIdle); 
    } 
} 

Этот код работает хорошо для меня. Обратите внимание, что этот код является частью метода Page_Load() страницы asp.net. Накладные расходы при вызове метода ResetAbcPdfGeckoProcess() возникают только в том случае, если первая попытка сгенерировать PDF не удалась. Если возникает исключение PDFException, я делаю Response.Redirect (Request.RawUrl);, чтобы снова запустить огонь Page_Load после запуска и остановки процесса Gecko. На второй итерации Page_Load PDF обрабатывается правильно.

 Смежные вопросы

  • Нет связанных вопросов^_^