有没有办法配置 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 就是这种情况。这是保证再现性的唯一方法。
我无法为您尝试这个,因为我没有 AdobeGothicStd-Bold.otf 的副本,但有几点可能会有所帮助:
- 如您所见;更改 Fontmap.GS 不会帮助您使用 CIDFonts,该文件只会影响字体,不会影响 CIDFonts
- 您的 cidfmap 条目使用 Japan1 作为排序,这是行不通的,因为 PDF 文件中的 CIDFont 使用“/Encoding /UniKS-UTF16-H”,因此需要韩语排序。
支持 - OpenType 字体,目前不支持 OTTO 字体(带有 CFF 轮廓的 OpenType 字体)。在某些时候他们可能会。
请注意,所有这些要点都与提供替代字体有关,以代替未嵌入字体(或 CIDFont)的 PDF 文件中的字体参考。嵌入式字体,任何轮廓类型都可以,包括带有 CFF 轮廓的 OpenType 字体。
我试图使用以下命令(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 就是这种情况。这是保证再现性的唯一方法。
我无法为您尝试这个,因为我没有 AdobeGothicStd-Bold.otf 的副本,但有几点可能会有所帮助:
- 如您所见;更改 Fontmap.GS 不会帮助您使用 CIDFonts,该文件只会影响字体,不会影响 CIDFonts
- 您的 cidfmap 条目使用 Japan1 作为排序,这是行不通的,因为 PDF 文件中的 CIDFont 使用“/Encoding /UniKS-UTF16-H”,因此需要韩语排序。 支持
- OpenType 字体,目前不支持 OTTO 字体(带有 CFF 轮廓的 OpenType 字体)。在某些时候他们可能会。
请注意,所有这些要点都与提供替代字体有关,以代替未嵌入字体(或 CIDFont)的 PDF 文件中的字体参考。嵌入式字体,任何轮廓类型都可以,包括带有 CFF 轮廓的 OpenType 字体。