Вкратце, я имею дело с проблемным 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'
...
Рендеринг выглядит так:
... и очевидно, что некоторые формы шрифта отсутствуют.
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
)Мы также можем наблюдать за страницей в том же документе с помощью imagemagick
s 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.
. .. который генерирует некоторые ошибки ghostscript
ish - и приводит к чему-то вроде этого:
... где очевидно, что отсутствующие шрифты, которые evince
не могли отобразиться, теперь показано здесь, с imagemagick
s 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
(ипо-видимому,по расширению, 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, похоже, не влияют на проблему, описанную выше.