Обработка (переназначение) отсутствующих / проблемных (CID / CJK) шрифтов в PDF с ghostscript?
Короче говоря, я имею дело с проблемным PDF, который:
Cannot be fully rendered in a document viewer likeevince
, because of missing font information;
However - ghostscript
can fully render the same PDF.
Таким образом - независимо от того, чтоghostscript
использует для заполнения пробелов (maybe fallback glyphs, or a different method to accessing fonts) - Я хотел бы иметь возможность использоватьghostscript
создать ("дистиллировать") выходной PDF, где в значительной степениnothing будет изменен, за исключением информации о шрифте, поэтомуevince
может отображать один и тот же документ так же, какghostscript
Можно.
мойquestion таким образом - возможно ли это вообще сделать; и если да, то какой будет командная строка для достижения чего-то подобного?
Большое спасибо заранее за любые ответы,
Ура!
Я на самом деле на более старой Ubuntu 10.04, и я мог бы столкнуться - не ошибка - но проблема установки сevince
(отсутствиеpoppler-data
пакет), как отмечено вОшибка # 386008 & # x201C; Некоторые шрифты не отображаются из-за & # x201C; Неизвестный тег шрифта ... & # x201D; : Ошибки: & # x201C; poppler & # x201D; пакет: Ubuntu.
Однако это именно то, что я хотел бы обработать, поэтому я буду использоватьfontspec.pdf
прикрепленный к этому посту ("PDF вызывает ошибку.& quot ;, & # xF732; & # xF730; & # xF730; & # xF738; / & # xF730; & # xF738; / & # xF730; & # xF739; v & # xF731;. & # xF731; & # xF738;) продемонстрировать проблему.
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'
...
Рендеринг выглядит так:
... и очевидно, что некоторые формы шрифта отсутствуют.
Adobeacroread
Просто заметка о том, как ведет себя Adobe Acrobat Reader для Linux; следующая командная строка:
$ ./Adobe/Reader9/bin/acroread /a "page=3" fontspec.pdf
... не генерирует никакого вывода на терминал вообще (for more on /a
switch, see Справочная страница) - и у программы абсолютно нет проблем с отображением шрифтов.
Also, while I'd like to avoid the roundtrip to postscript - however, note that acroread
itself can be used to convert a PDF to postscript:
$ ./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
can отобразить ранее отсутствующие шрифты в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
(from imagemagick
)
Мы также можем наблюдать страницу в том же документе сimagemagick
sdisplay
(note that панорамирование изображения из командной строки с использованием «отображения» по-видимому, все еще недоступен, поэтому я использовал-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.
... который порождает некоторыеghostscrip
ошибки ish - и результаты с чем-то вроде этого:
... где очевидно, что отсутствующие шрифты, которыеevince
не может отображаться, теперь отображаются здесь, сimagemagick
sdisplay
, должным образом.
ghostscript
Наконец, мы можемиспользовать ghostscript в качестве средства просмотра x11 Сам - наблюдать за той же страницей, тем же документом:
$ gs -sDevice=x11 -g740x450 -r150x150 -dFirstPage=3 \
-c '<</PageOffset [-120 520]>> 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 <return> to continue<<
^C
... и результаты с таким выводом:
& # XA0;
В заключение:ghostscript
(а такжеapparently по расширению,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
как отмечалось ранее.
Note: While I'd like to avoid the postscript roundtrip, a good example of gs
command line with from pdf to ps with font embedding is here: (# 277826) pdf - Как заставить GhostScript PS2PDF остановить поднабор шрифтов; но та же командная строка переключается с .pdf на .pdf, чтобы, кажется, не иметь никакого влияния на проблему, описанную выше.