有没有办法配置 Ghostscript 以识别 OpenType (.OTF) 的 CID 字体?

Is there a way to configure Ghostscript to recognize CID fonts that are OpenType (.OTF)?

我试图使用以下命令(Ghostscript 9.27,Windows 10)模拟 CID 字体 'AdobeGothicStd-Bold',它作为 OpenType 字体存在:

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 字体替换)。

我们可以使用 .OTF 文件模拟 CID 字体吗?还是目前不支持?

我确实看到了 2015 年的外部 link,它解释了如何使用 OpenType 字体文件在 Ghostscript 中设置 CID 字体:

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

根本问题是 PostScript 不直接支持 TrueType。它支持类型 42,这是一种包含额外信息的 TrueType 格式,以允许 PostScript 解释器使用它。因此,为了使用 TrueType 字体替代缺失的 CIDFont(或字体),itnerpreter 必须对缺失的信息进行猜测。

通常这行得通,但有时行不通。进行猜测的代码只希望遇到 TrueType 字体,并从 TrueType 表中获取它需要的一些信息。您所说的 OpenType 字体是一种带有 CFF 轮廓的 TrueType 字体,实际上是一种 OTTO 字体,TrueType 字体必须具有 TrueType 轮廓数据; OpenType 字体可以有 TrueType 或 CFF 轮廓数据。 OTTO OpenType 字体在 TrueType 表中没有代码所需的相同信息,必须从 CFF 字体数据中的词典中收集。

我不记得目前这个过程到底走了多远,它还在进行中。

正如我在这种情况下经常说的,您应该始终嵌入所有您在PDF文件中使用的字体。 PDF 规范甚至说 CIDFonts 就是这种情况。这是保证再现性的唯一方法。

我无法为您尝试这个,因为我没有 Adob​​eGothicStd-Bold.otf 的副本,但有几点可能会有所帮助:

  1. 如您所见;更改 Fontmap.GS 不会帮助您使用 CIDFonts,该文件只会影响字体,不会影响 CIDFonts
  2. 您的 cidfmap 条目使用 Japan1 作为排序,这是行不通的,因为 PDF 文件中的 CIDFont 使用“/Encoding /UniKS-UTF16-H”,因此需要韩语排序。
  3. 支持
  4. OpenType 字体,目前不支持 OTTO 字体(带有 CFF 轮廓的 OpenType 字体)。在某些时候他们可能会。

请注意,所有这些要点都与提供替代字体有关,以代替未嵌入字体(或 CIDFont)的 PDF 文件中的字体参考。嵌入式字体,任何轮廓类型都可以,包括带有 CFF 轮廓的 OpenType 字体。