Почему текст отсутствует после преобразования этого PDF в изображение, используя ImageMagick / Ghostscript? - PullRequest
0 голосов
/ 28 сентября 2018

Текст отсутствует после преобразования этого PDF в изображение (PNG или JPG), но нет журнала ошибок.

Использовать ImageMagick: конвертировать -плотность 150 -качество 100 "d: /t/pdf/fp.pdf" -alpha Удалить "d: /t/pdf/5/fp.png"

Используйте Ghostscript (тестирование с версиями 9.23 и 9.25): gswin64 -dSAFER -dBATCH -dNOPAUSE -r300 -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4 -sDEVICE = jpeg -sOutputFile = D: \ t \ pdf \ tjpg\ pdf \ fp.pdf

Кто-нибудь знает, в чем причина и как ее решить?Thx.

PDF Файл для тестирования

изображение 1 изображение 2

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Отсутствующий текст вернулся, когда я удалил параметр -dSAFER.Я не понимаю почему;Я не могу найти причину в документации Ghostscript.

Это моя последняя командная строка:

gswin64 -dBATCH -dNOPAUSE -r150 -sDEVICE=jpeg -sOutputFile=D:\t\pdf\6\fp%03d.jpg D:\t\pdf\fp.pdf
0 голосов
/ 28 сентября 2018

Есть два CIDFonts (STSong-Light и AdobeKaitiStd-Regular), которые используются, но не встроены.Это означает, что должен использоваться замещающий шрифт.При запуске через Ghostscript получается следующий текст:

GPL Ghostscript GIT PRERELEASE 9.26 (2018-09-13)
Copyright (C) 2018 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 2.
Page 1
Can't find CID font "AdobeKaitiStd-Regular".
Attempting to substitute CID font /Adobe-GB1 for /AdobeKaitiStd-Regular, see doc
/Use.htm#CIDFontSubstitution.
The substitute CID font "Adobe-GB1" is not provided either. attempting to use fa
llback CIDFont.See doc/Use.htm#CIDFontSubstitution.
Loading a TT font from %rom%Resource/CIDFSubst/DroidSansFallback.ttf to emulate
a CID font Adobe-GB1 ... Done.
Can't find CID font "AdobeKaitiStd-Regular".
Attempting to substitute CID font /Adobe-GB1 for /AdobeKaitiStd-Regular, see doc
/Use.htm#CIDFontSubstitution.
Can't find CID font "AdobeKaitiStd-Regular".
Attempting to substitute CID font /Adobe-GB1 for /AdobeKaitiStd-Regular, see doc
/Use.htm#CIDFontSubstitution.
Loading NimbusSans-Regular font from %rom%Resource/Font/NimbusSans-Regular... 71
35536 5791889 4867288 3488798 3 done.
Can't find CID font "STSong-Light".
Attempting to substitute CID font /Adobe-GB1 for /STSong-Light, see doc/Use.htm#
CIDFontSubstitution.
Loading NimbusMonoPS-Regular font from %rom%Resource/Font/NimbusMonoPS-Regular..
. 10713600 9353422 4987912 3610458 3 done.
   **** Error: Executing Do inside a text block, attempting to recover
               Output may be incorrect.
>>showpage, press <return> to continue<<

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

[EDIT] Здесь есть странное поведение.Я скачал 64-битный код релиза прошлой ночью и попробовал это, и я вижу ошибку.Стенограмма обратного канала содержит следующее:

Can't find CID font "AdobeKaitiStd-Regular".
Attempting to substitute CID font /Adobe-GB1 for /AdobeKaitiStd-Regular, see doc
/Use.htm#CIDFontSubstitution.
Loading NimbusSans-Regular font from %rom%Resource/Font/NimbusSans-Regular... 77
20460 6369217 2670672 1276767 3 done.
   **** Error: can't process embedded font stream,
        attempting to load the font using its name.
               Output may be incorrect.
   **** Error reading a content stream. The page may be incomplete.
               Output may be incorrect.
Loading NimbusMonoPS-Regular font from %rom%Resource/Font/NimbusMonoPS-Regular..
. 11808228 10439970 2690872 1310356 3 done.
   **** Error: Executing Do inside a text block, attempting to recover
               Output may be incorrect.
   **** Error: File did not complete the page properly and may be damaged.
               Output may be incorrect.
Page 2

Ключевая часть: «Не удается обработать поток встроенного шрифта ....» Вот почему ваш текст пропадает.

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

У вас есть два варианта;

1) Если вы не возражаете против создания кода, клонируйте наш репозиторий Git, откройте файл решения Visual Studio, разрешите VS обновить его до вашей версии, а затем соберите Ghostscript. Используйте этот двоичный файл.

2) Как вы уже обнаружили, не используйте SAFER. Я должен предупредить вас, что это потенциально опасная установка. Пока вы обрабатываете файлы, которые вы создали сами, у вас все будет хорошо, но, пожалуйста,Не используйте эту настройку для обработки случайных файлов из ненадежных источников, вы можете быть готовы к атаке.

[править 2]

И вот третий вариант. С 9.25 мыВозникла доставка файлов ресурсов с Windows, так же как и с Linux.Я подозреваю , что если вы добавите -I "c: / program files / gs / gs9.25 / Resource / Init" в начало вашей командной строки, это сработает, даже если -dSAFER имеет значение true.

Кстати, полезно цитировать сообщения с обратного канала, когда у вас возникли проблемы, может быть, вы мало что скажете, но у них есть полезная информация для разработчиков PostScript.

...