Обработка (переназначение) отсутствующих/проблемных (CID/CJK) шрифтов в PDF с помощью ghostscript?

Вкратце, я имею дело с проблемным PDF-файлом, который:

  • Не может быть полностью отрендерен в средстве просмотра документов, таком как evince, из-за отсутствует информация о шрифте;
  • Однако - ghostscriptможет полностью отображать тот же PDF-файл.

Таким образом, независимо от того, что ghostscriptиспользует для заполнения пробелов (может быть, запасные глифы или другой метод доступа к шрифтам), я хотел бы иметь возможность использовать ghostscriptдля создания («перегонки») выходного PDF-файла, в котором почти ничего ничегоне будет изменено, кроме добавленной информации о шрифте, поэтому evinceможет отображать тот же документ таким же образом, как ghostscript.

Мой вопростаков: возможно ли это вообще; и если да, то какой должна быть командная строка для достижения чего-то подобного?

Заранее большое спасибо за любые ответы,
Ваше здоровье!


Подробности:

На самом деле я использую более старую версию Ubuntu 10.04, и у меня может возникнуть не ошибка, а проблема установки с evince(отсутствие poppler-data), как указано в Ошибка № 386008 «Некоторые шрифты не отображаются из-за «Неизвестного тега шрифта...»: Ошибки: пакет «poppler»: Ubuntu.

Однако это именно то, что я хотел бы обработать, поэтому я буду использовать fontspec.pdf, прикрепленный к этому сообщению ( " PDF, вызывающий ошибку. ", // v.), чтобы продемонстрировать проблему.

evince

Во-первых, я открываю страницу 3 этого pdf в evince; и evinceжалуется:

$ evince --page-label=3 fontspec.pdf

Error: Missing language pack for 'Adobe-Japan1' mapping
Error: Unknown font tag 'F5.1'
Error (7597): No font in show
Error: Unknown font tag 'F5.1'
Error (7630): No font in show
Error: Unknown font tag 'F5.1'
Error (7660): No font in show
Error: Unknown font tag 'F5.1'
...

Рендеринг выглядит так:

evince-pdf-missfont-render.png

... и очевидно, что некоторые формы шрифта отсутствуют.

Adobe acroread

Просто примечание о том, как ведет себя Adobe Acrobat Reader для Linux; следующую командную строку:

$ ./Adobe/Reader9/bin/acroread /a "page=3" fontspec.pdf

... не выводит никакого вывода на терминал ( для получения дополнительной информации о переключателе /aсм. справочную страницу acroread) -- и программа не имеет абсолютно никаких проблем с отображением шрифтов.

Кроме того, хотя я хотел бы избежать обращения к постскриптуму, однако обратите внимание, что acroreadсам по себе может использоваться для преобразования PDF в постскриптум:

$ ./Adobe/Reader9/bin/acroread -v
9.5.1

$ ./Adobe/Reader9/bin/acroread -toPostScript \ 
-rotateAndCenter -choosePaperByPDFPageSize \
-start 3 -end 3 \
-level3 -transQuality 5 \
-optimizeForSpeed -saveVM \
fontspec.pdf ./ 

Опять же, приведенная выше командная строка сгенерирует нет вывода на терминал; -optimizeForSpeed ​​-saveVMсуществуют, потому что, по-видимому, они имеют дело со шрифтами; последний аргумент ./— выходной каталог (выходной файл автоматически называется fontspec.ps).

Теперь evinceможетотображать отсутствующие ранее шрифты в выводе fontspec.ps- но снова жалуется:

$ evince fontspec.ps 
GPL Ghostscript 9.02: Error: Font Renderer Plugin ( FreeType ) return code = -1
GPL Ghostscript 9.02: Error: Font Renderer Plugin ( FreeType ) return code = -1
...

... и, кроме того, все textкажется сглаженным до кривых в постскриптуме, поэтому теперь больше нельзя выделить текст в файле .ps в evince(обратите внимание, что файл .ps файл не может быть открыт в acroread). Однако можно снова преобразовать этот .ps обратно в .pdf:

$ pstopdf fontspec.ps   # note, `pstopdf` has no output filename option;
                        # it will automatically choose 'fontspec.pdf',
                        # and overwrite previous 'fontspec.pdf' in 
                        # the same directory 

... и теперь текст в выводе pstopdfможно выбрать в evince, все шрифты есть , и evinceбольше не жалуется. Однако, как я уже отмечал, я хотел бы вообще избежать обращения к файлам postscript.

display(из imagemagick)

Мы также можем наблюдать за страницей в том же документе с помощью imagemagicks display( обратите внимание, что панорамирование изображения из командной строки с использованием 'display', по-видимому, по-прежнему недоступно, поэтому я использовал -cropниже, чтобы настроить окно просмотра):

$ display -density 150 -crop 740x450+280+200 fontspec.pdf[2]
   **** Warning: considering '0000000000 00000 n' as a free entry.
...
   **** This file had errors that were repaired or ignored.
   **** The file was produced by: 
   **** >>>> Mac OS X 10.5.4 Quartz PDFContext <<<<
   **** Please notify the author of the software that produced this
   **** file that it does not conform to Adobe's published PDF
   **** specification.

. .. который генерирует некоторые ошибки ghostscriptish - и приводит к чему-то вроде этого:

imagemagick-display-pdf.png

... где очевидно, что отсутствующие шрифты, которые evinceне могли отобразиться, теперь показано здесь, с imagemagicks display, правильно.

ghostscript

Наконец, мы можем использовать ghostscript как средство просмотра x11-- для наблюдения за той же страницей, тем же документом:

$ gs -sDevice=x11 -g740x450 -r150x150 -dFirstPage=3 \
-c '<> setpagedevice' \
-f fontspec.pdf

GPL Ghostscript 9.02 (2011-03-30)
Copyright (C) 2010 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
Processing pages 3 through 74.
Page 3
>>showpage, press  to continue<<
^C

... и получить следующие результаты:

ghostscript-pdf-view.png

 

В заключение: ghostscriptпо-видимому,по расширению, imagemagick) может, по-видимому, найти отсутствующий шрифт (или, по крайней мере, некоторую замену для него) и отобразить страница с этим -- даже если evinceтерпит неудачу при этом для того же документа.

Поэтому я хотел бы просто экспортировать PDF-версию из ghostscript, в которую были бы встроены только отсутствующие шрифты, и никакой другой обработки; так что я пробую это:

$ gs -dBATCH -dNOPAUSE -dSAFER  \
-dEmbedAllFonts -dSubsetFonts=true -dMaxSubsetPct=99 \
-dAutoFilterMonoImages=false \
-dAutoFilterGrayImages=false \
-dAutoFilterColorImages=false \
-dDownsampleColorImages=false \
-dDownsampleGrayImages=false \
-dDownsampleMonoImages=false \
-sDEVICE=pdfwrite \
-dFirstPage=3 -dLastPage=3 \
-sOutputFile=mypg3out.pdf -f fontspec.pdf

GPL Ghostscript 9.02 (2011-03-30)
Copyright (C) 2010 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
Processing pages 3 through 3.
Page 3

   **** This file had errors that were repaired or ignored.
   **** The file was produced by:
   **** >>>> Mac OS X 10.5.4 Quartz PDFContext <<<<
   **** Please notify the author of the software that produced this
   **** file that it does not conform to Adobe's published PDF
   **** specification.

... но это не работает - выходной файл mypg3out.pdfстрадает точно такими же проблемами в evince, как отмечалось ранее.

Примечание. Хотя я хотел бы избежать повторения постскриптума, хороший пример командной строки gsс переходом из pdf в ps с встраиванием шрифта находится здесь: (#277826) pdf — How заставить GhostScript PS2PDF прекратить подмножество шрифтов; но те же переключатели командной строки для .pdf в .pdf, похоже, не влияют на проблему, описанную выше.

7
задан Community 23 May 2017 в 12:32
поделиться