Ошибка GhostScript

В конкретном PDF-файле при выполнении следующей команды:

gs -dSAFER -dBATCH -dNOPAUSE -dQUIET -dFirstPage=1 -dLastPage=1 -sDEVICE=pdfwrite -sOutputFile=output.pdf input.pdf

Я получаю такую ​​ошибку:

GPL Ghostscript 8.71: Warning: 'loca' length 188 is greater than numGlyphs 93 in the font MGOXZX+Arial-BoldMT.

Есть идеи, что означает эта ошибка и как решить проблему?


person StackOverflowNewbie    schedule 17.09.2010    source источник
comment
без доступа к исходному PDF-файлу невозможно будет дать какой-либо хороший конкретный совет. Тип предупреждения может означать, что файл input.pdf неисправен и его подмножество шрифтов Arial-BoldMT неправильно встроено. Появляются таблицы 'loca', например. в шрифтах OpenType и представить указатель местоположений глифов. Таким образом, рассматриваемый подмножество шрифта, по-видимому, требует 188 глифов в соответствии с таблицей, но содержит только 93 фактических описания формы глифа.   -  person Kurt Pfeifle    schedule 18.09.2010


Ответы (1)


Во-первых, Ghostscript объявил это не «ошибкой», а «предупреждением». Это большая разница.

Во-вторых, вы попросили Ghostscript вывести первую страницу входного PDF-файла. Это сработало? Видите ли вы какие-либо видимые различия при сравнении output.pdf и первой страницы input.pdf?

В-третьих, если действительно есть проблема, вы должны указать, какую версию Ghostscript вы используете. самый последний - 8.71.


Обновление: Конечно, StackOverflowNewbie уже намекнул на версию Ghostscript, процитировав предупреждающее сообщение ...

«Предупреждение» означает: может быть проблема с выходным файлом (который сам по себе все еще является действующим PDF-файлом), но вам лучше проверить его.

«Ошибка» означает: проблема с выводом, безусловно, есть, и Ghostscript прервет всю дальнейшую обработку; выход, скорее всего, даже не действительный PDF-файл.

Есть много разных методов для дальнейшей отладки проблемы. Но невозможно дать какой-либо совет по набору гвоздей, если вы не видите нужных файлов. StackOverflowNewbie сообщает, что страница вывода отличается от входной.

Итак, вот кувалда, которую можно использовать: добавьте -dDEBUG в командную строку:

gs \
  -sOutputFile=output.pdf \
  -dDEBUG \
  -dLastPage=1 \
  -sDEVICE=pdfwrite \
   input.pdf

Предостережения! Это потенциально приведет к появлению огромного количества вывода stderr / stdout на вашей консоли.

Если вы уже знаете или имеете определенную подсказку, где именно может быть корень проблемы (что вы, вероятно, могли бы даже предположить, глядя на визуальные различия между входным и выходным PDF-файлом), вы можете сузить его, используя (вместо -dDEBUG) одно из следующих по порядку:

 -dPDFDEBUG      # (debug PDF Interpreter)
 -dPDFWRDEBUG    # (debug PDF Writer)
 -dTTFDEBUG      # (debug TTF Fonts)
 -dCCFONTDEBUG   # (debug compiled-in Fonts)
 -dFAPIDEBUG     # (debug Font API)
 -dCFFDEBUG      # (debug CFF Fonts)
 -dCMAPDEBUG     # (debug CMAP)
 -dDOCIEDEBUG    # (debug CIE color)
 -dSETPDDEBUG    # (debug setpagedevice)
 -dSTRESDEBUG    # (debug Static Resources)
 -dVGIFDEBUG     # (debug ViewGIF)
 -dVJPGDEBUG     # (debug ViewJPEG)
 -dINITDEBUG     # (debug Initialization)
 -dEPSDEBUG      # (debug EPS handling)
 -dPDFOPTDEBUG   # (debug PDF Optimizer/Linearizer)

Кроме того, поскольку в предупреждении упоминается шрифт Arial-BoldMT, вам следует сначала проверить статус встроенного шрифта на обоих страницах ввода и вывода с помощью pdfinfo и pdffonts:

 pdfinfo -f 1 -l 1 -box input.pdf
 pdfinfo -box output.pdf
 pdffonts -f 1 -l 1 input.pdf
 pdffonts output.pdf

Обновление2:

Вы можете попытаться извлечь шрифт (ы) из исходного PDF-файла для дальнейшего изучения. (Если вы не знаете, как это сделать, задайте новые отдельные вопросы SO, такие как «Как мне извлечь шрифты из PDF-файла для дальнейшего анализа?» и «Как я могу исследовать шрифт для внутренних ошибок? ")

person Kurt Pfeifle    schedule 17.09.2010
comment
1. Как GS различает ошибку и предупреждение? 2. Была существенная разница в выводе: вывод не имел текстового содержания исходного документа. 3. предупреждение уже показывает версию: 8.71. - person StackOverflowNewbie; 18.09.2010
comment
Ооо! Там это было на виду, а я не видел ... (v8.71). - Предупреждение означает: действительный выходной документ все равно будет создан; но лучше проверьте это. Ошибка означает: результат точно не такой, как вы хотели. Я обновлю свой ответ ... - person Kurt Pfeifle; 18.09.2010