有没有一种方法可以配置Ghostscript识别OpenType(.OTF)的CID字体?

时间:2019-04-22 18:45:50

标签: ghostscript

我试图使用以下命令(Ghostscript 9.27,Windows 10)模拟CID字体“ Adob​​eGothicStd-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年的外部链接,该链接解释了如何使用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

1 个答案:

答案 0 :(得分:0)

基本问题是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就是这种情况。这是保证可重复性的唯一方法。

因为我没有AdobeGothicStd-Bold.otf的副本,所以我无法为您尝试一下,但是有几点可能会有所帮助:

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

请注意,所有这些要点都与提供替代字体来代替未嵌入字体(或CIDFont)的PDF文件中的字体参考一起使用。嵌入字体,无论哪种轮廓类型都可以使用,并且包括带有CFF轮廓的OpenType字体。