Есть ли способ настроить Ghostscript для распознавания шрифтов CID, которые являются OpenType (.OTF)? - PullRequest
0 голосов
/ 22 апреля 2019

Я пытался эмулировать шрифт CID 'AdobeGothicStd-Bold', который существует как шрифт OpenType, с помощью следующей команды (Ghostscript 9.27, Windows 10):

gswin64c.exe -I"C:/Program Files/gs/ghostscript-9.27/Resource/Init";"C:/Program Files/gs/ghostscript-9.27/Resource/Font" -sDEVICE=pdfwrite -dPDFSETTINGS=/printer -dPDFSTOPONERROR -dBATCH -dNOPAUSE -sOutputFile=output.pdf "C:/Temp/ghostscript_question_4-22-2019.pdf"

Я попытался сделать следующее дополнение в 'cidfmap' (это было до того, как я понял в документации, что замены в 'cidfmap' работают только со шрифтами TrueType):

/AdobeGothicStd-Bold << /FileType /TrueType /Path (C:/Windows/Fonts/AdobeGothicStd-Bold.otf) /CSI [(Japan1) 2] >> ;

со следующим выводом:

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 1.
Page 1
Loading a TT font from C:/WINDOWS/Fonts/AdobeGothicStd-Bold.otf to emulate a CID font AdobeGothicStd-Bold ... Done.
Error: /undefined in --get--
Operand stack:
   --nostringval--   --dict:19/29(L)--   --nostringval--   --dict:19/29(L)--   --dict:1/1(L)--   N   false   true   --dict:3/3(L)--   --dict:13/21(ro)(L)--   F0   13   5   --dict:6/15(L)--   --dict:6/15(L)--   AdobeGothicStd-Bold   --dict:10/12(ro)(G)--   --nostringval--   --nostringval--   CIDFontObject   --dict:8/17(L)--   --dict:8/17(L)--   AdobeGothicStd-Bold   26   10   75742   resourcefont   --dict:29/32(L)--   undefinederror
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1992   1   3   %oparray_pop   1991   1   3   %oparray_pop   1979   1   3   %oparray_pop   1980   1   3   %oparray_pop   --nostringval--   --nostringval--   2   1   1   --nostringval--   %for_pos_int_continue   1983   1   7   %oparray_pop   --nostringval--   --nostringval--   --nostringval--   --nostringval--   %array_continue   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --dict:1/1(L)--   --nostringval--   1   %dict_continue   --nostringval--   1968   7   9   %oparray_pop   --nostringval--   1969   8   9   %oparray_pop   --nostringval--   9   0   1913   10   10   %oparray_pop   --nostringval--   false   1   %stopped_push   1912   10   10   %oparray_pop   --nostringval--   --nostringval--   (gstatetype)   --dict:0/0(L)--   --nostringval--   --nostringval--   %loop_continue   1964   15   10   %oparray_pop   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   %array_continue   --nostringval--   --nostringval--   --nostringval--   --nostringval--
Dictionary stack:
   --dict:735/1123(ro)(G)--   --dict:1/20(G)--   --dict:80/200(L)--   --dict:80/200(L)--   --dict:133/256(ro)(G)--   --dict:317/325(ro)(G)--   --dict:31/32(L)--   --dict:6/9(L)--   --dict:7/20(L)--   --dict:5/5(L)--
Current allocation mode is local
GPL Ghostscript 9.27: Unrecoverable error, exit code 1

Я также попытался выполнить указанную выше команду со следующим изменением на Fontmap.GS:

/AdobeGothicStd-Bold    (C:/Windows/Fonts/AdobeGothicStd-Bold.otf) ;

и следующий вывод:

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 1.
Page 1
Can't find CID font "AdobeGothicStd-Bold".
Attempting to substitute CID font /Adobe-Korea1 for /AdobeGothicStd-Bold, see doc/Use.htm#CIDFontSubstitution.
The substitute CID font "Adobe-Korea1" is not provided either. attempting to use fallback CIDFont.See doc/Use.htm#CIDFontSubstitution.
Loading a TT font from C:/Program Files/gs/ghostscript-9.27/Resource/CIDFSubst/DroidSansFallback.ttf to emulate a CID font Adobe-Korea1 ... Done.

, который говорит мне, что изменение в Fontmap.GS не было распознано (и я, вероятно, не должен использовать Fontmap.GS для замены шрифта CID).

Можем ли мы эмулировать шрифты CID, используя файл .OTF? Или это в настоящее время не поддерживается?

Я видел внешнюю ссылку 2015 года, которая объясняет, как настроить шрифты CID в Ghostscript, используя файлы шрифтов OpenType:

https://www.preining.info/blog/2015/04/setting-up-cid-fonts-for-ghostscript-technical-notes/

Но я не знаю, применяется ли этот метод к текущей версии Ghostscript.

PDF, используемый в моем вопросе, находится здесь:

https://drive.google.com/open?id=1hsUACus_T0pu7D2BGnWE2H_mUpfCBrtk

1 Ответ

0 голосов
/ 23 апреля 2019

Основная проблема в том, что PostScript напрямую не поддерживает TrueType. Он поддерживает тип 42, который представляет собой TrueType fotn, содержащий дополнительную информацию, позволяющую интерпретатору PostScript использовать его. Таким образом, чтобы использовать шрифт TrueType вместо отсутствующего CIDFont (или шрифта), itnerpreter должен угадать недостающую информацию.

Обычно это работает, но иногда нет. Код, который делает предположения, ожидает только встречи со шрифтами TrueType, и он получает часть необходимой информации из таблиц TrueType. Вы называете шрифт OpenType шрифтом TrueType с контурами CFF, на самом деле это шрифт OTTO, шрифты TrueType должны иметь данные контура TrueType; Шрифты OpenType могут иметь данные структуры TrueType или CFF. Шрифт OTTO OpenType не имеет той информации, которая требуется коду в таблицах TrueType, и вместо этого он должен быть собран из словарей в данных шрифта CFF.

Я не помню точно, как далеко продвигается этот процесс в данный момент, он продолжается.

Как я всегда говорил в этом случае, вы должны всегда вставлять все шрифты, которые вы используете в файле PDF. В спецификации PDF даже говорится, что это относится к CIDFonts. Это единственный способ гарантировать воспроизводимость.

Я не могу попробовать это для вас, потому что у меня нет копии AdobeGothicStd-Bold.otf, но есть несколько моментов, которые могут помочь:

  1. Как вы заметили; изменение Fontmap.GS не поможет вам с CIDFonts, этот файл влияет только на шрифты, а не CIDFonts
  2. Ваша запись в cidfmap использует Japan1 в качестве Порядка, это не сработает, потому что CIDFont в файле PDF использует "/ Encoding / UniKS-UTF16-H" и поэтому требует корейского Порядка.
  3. OpenType шрифты поддерживаются, OTTO шрифты (шрифты OpenType с контурами CFF) в настоящее время не поддерживаются. В какой-то момент они, вероятно, будут.

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

...