Неправильные символы для акцентированных слов при преобразовании из PDF в PCL с помощью Ghostscript

Я пытаюсь преобразовать некоторые файлы PDF (сгенерированные с помощью FastReports) в PCL, используя Ghostscript, и это работает хорошо, за исключением того, что слова с акцентами показывают неправильные символы.

Вот как я вызываю ghostscript:

bin\gswin32c -dBATCH -dNOPAUSE -sDEVICE=pxlmono -sFONTPATH=C:\Windows\Fonts -dDuplex -dFirstPage=1 -dLastPage=2 -sOutputFile=Parte.pcl -fParte.pdf

Это мой оригинальный PDF-файл: введите здесь описание изображения

Это результат PCL: введите здесь описание изображения

Я предполагаю, что проблема в шрифтах, потому что он говорит, что не может найти шрифты Arial и Verdana (хотя оба установлены в \Windows\Fonts).

GPL Ghostscript 9.27 (2019-04-04)
Copyright (C) 2018 Artifex Software, Inc.  All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
Processing pages 1 through 2.
Page 1
Can't find CID font "Verdana".
Attempting to substitute CID font /Adobe-Identity for /Verdana, see doc/Use.htm#CIDFontSubstitution.
The substitute CID font "Adobe-Identity" is not provided either. attempting to use fallback CIDFont.See doc/Use.htm#CIDFontSubstitution.
Loading a TT font from %rom%Resource/CIDFSubst/DroidSansFallback.ttf to emulate a CID font Adobe-Identity ... Done.
Can't find CID font "Verdana".
Attempting to substitute CID font /Adobe-Identity for /Verdana, see doc/Use.htm#CIDFontSubstitution.
Can't find CID font "Verdana".
Attempting to substitute CID font /Adobe-Identity for /Verdana, see doc/Use.htm#CIDFontSubstitution.
Can't find CID font "Arial".
Attempting to substitute CID font /Adobe-Identity for /Arial, see doc/Use.htm#CIDFontSubstitution.
Can't find CID font "Arial".
Attempting to substitute CID font /Adobe-Identity for /Arial, see doc/Use.htm#CIDFontSubstitution.
Page 2
Can't find CID font "Arial".
Attempting to substitute CID font /Adobe-Identity for /Arial, see doc/Use.htm#CIDFontSubstitution.
Loading a TT font from %rom%Resource/CIDFSubst/DroidSansFallback.ttf to emulate a CID font Adobe-Identity ... Done.
Can't find CID font "Verdana".
Attempting to substitute CID font /Adobe-Identity for /Verdana, see doc/Use.htm#CIDFontSubstitution.

Есть ли какой-нибудь параметр для решения моей проблемы с этими шрифтами? Спасибо.

PS: Если вы хотите протестировать исходный PDF-файл, вы можете скачать его здесь: PDF-файл


person Marc Guillot    schedule 26.06.2019    source источник


Ответы (1)


В вашем PDF-файле используются следующие CIDFonts; Arial, Arial, Bold, Verdana, Verdana, Bold и Verdana, Bold Italic. Он не включает ни один из этих шрифтов.

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

Если шрифт или CIDFont отсутствуют, Ghostscript должен использовать замену. CIDFont сложнее заменить, чем обычные шрифты, и Ghostscript поставляется с одним реальным заменителем CIDFont, DroidSansFallback, который он использует для всех языков. Существует «пуля» CIDFont, который является последним запасным вариантом, поскольку он не содержит ничего, кроме глифа пули.

Чтобы получить правильный вывод, вы должны либо встроить CIDFont в файл PDF, либо указать подходящую замену CIDFont для использования Ghostscript. Обратите внимание, что переключатель FONTPATH применяется только к шрифтам, а не к CIDFonts, поэтому он не будет полезен для этого файла (хотя, очевидно, он может иметь преимущества для файлов, использующих шрифты).

Механизм подстановки CIDFont описан в документации Ghostscript rel="nofollow noreferrer">я думаю, что если вы поставляете различные шрифты Windows TrueType для Ghostscript в качестве заменителей отсутствующих именованных шрифтов CIDFonts, тогда ваш файл будет отображаться правильно.

Обратите внимание, что, поскольку вы используете Windows, Ghostscript будет использовать файловую систему ROM. Если вы редактируете файл cidfmap, вам нужно будет использовать переключатель -I (включить), чтобы добавить путь, содержащий файл cidfmap, к пути поиска. Возможно, вам будет проще просто отредактировать файл в папке c:\Program Files (x86)\gs\gs9.27\Resource\Init и добавить этот полный путь, используя -I"c:/Program Files (x86)/gs/gs9.27/Resource/Init"

person KenS    schedule 26.06.2019
comment
Спасибо. Ghostscript должен решить эту проблему, все средства просмотра, которые я пробовал, без проблем обнаруживают наличие системного шрифта с таким же именем и используют его. Механизм замены CDIFont на TrueType, похоже, у меня не работает, я думаю, это потому, что я понятия не имею, что должно идти в /SubfontID и /CSI. Я буду продолжать попытки, мой босс не позволит мне вставлять шрифты (увеличение размера x6) только для того, чтобы иметь возможность использовать Ghostscript. :-( - person Marc Guillot; 26.06.2019
comment
Это не «просто иметь возможность использовать Ghostscript». Любой просмотрщик, у которого нет доступных CIDFonts, должен будет использовать замещающий шрифт. Поскольку это шрифты Windows, это означает, что любая не-Windows платформа. Итак, вы значительно снижаете переносимость, не встраивая шрифты. Кого в наши дни волнует размер файла? Что касается «Ghostscript должен решить эту проблему». Это невозможно. По той же причине нельзя. Невозможно угадать, какими должны быть значения для шрифтов TrueType. Ghostscript является кросс-платформенным, поэтому мы не можем просто делать предположения об ОС, на которой мы работаем. - person KenS; 26.06.2019