Ghostscript和未嵌入字体的PDF

3
我的系统配置是OS X,并安装了GhostScript 9.02。 我想知道如何(逐步)添加和配置GS中的文件,使其能够进行字体替换。但是,我的GS安装不具备安装/创建此文件的功能。请问如何添加呢?
问题在于我有一个PDF,其中所有嵌入的子集字体都正常,只有一种异常。因此GS无法栅格化该页面。请问如何解决这个问题?

请考虑注册一个账户,这样您就可以留下评论并编辑您的帖子。 - Bill the Lizard
1个回答

3
在PDF中有两类字体--“常规”字体和CIDFonts。对于常规字体,每个字形只使用一个字节,并且在PDF中提供了编码和其他信息来选择字体中的字形。Ghostscript将根据FontName猜测替代字体,虽然它可能看起来不像原始字体,但应该可以打印。
然而,CIDFonts通常使用多个字节进行访问,名称暗示需要某些CMap才能将字节流正确解码为字形编号。另一个问题是,特定字形的字形编号将因“排序”而异。对于未嵌入的CIDFonts,Ghostscript将生成错误输出,如下所示:
无法找到CID字体“KozMin-Bold”。将CID字体/Adobe-Japan1替换为/KozMin-Bold,请参见doc/Use.htm#CIDFontSubstitution。也没有提供替代CID字体“Adobe-Japan1”。将以错误退出。
这告诉您PDF引用了指定排序“Adobe-Japan1”的字体“Kozmin-Bold”,并且: 1)在Ghostscript的Resource/CIDFont目录中找不到Kozmin-Bold字体。 2)cidfmap文件中未定义Kozmin-Bold的映射(GS在任何列为“搜索路径”的LIBPATH中搜索此文件)。 3)在cidfmap中没有针对具有Adobe-Japan1排序的字体的映射。如果Ghostscript无法使用步骤1和2找到字体,则将使用排序作为字体名称替换字体。至少这应该得到正确的字形。
我不想在此处再次重现cidfmap文档,因为我们会不时更新它,但可以在线访问该文档:http://www.artifex.com/gs-current-release/Use.htm#CIDFontSubstitution。 Ghostscript文档的该部分提供了示例。

感谢您的回复。 当我处理具有1个非嵌入字体(中文STXihei CID字体)的PDF时,会收到以下错误消息(与您的示例不同)。 ****警告:无法处理字体流,按名称加载字体。 GPL Ghostscript 9.02:无法恢复的错误,退出代码1字体在裁剪框之外(因此不重要),但GhostScript无法栅格化页面。 我想知道是否有命令可以跳过/替换此字体。 我尝试在以下位置创建Fonts文件夹: /usr/local/share/ghostscript/9.02/Resource/ 并将字体复制到其中,但是错误出现了。 - user827756
1
听起来你没有捕获Ghostscript的所有输出。你只得到了stderr的输出,所以你必须将stdout重定向到其他地方。这就是为什么你看不到剩下的警告。你不能跳过字体。为了定义替代品,你必须像上面引用的文档中所述编辑cidfmap。将字体复制到Fonts文件夹对于CIDFonts根本行不通,必须将其放置在CIDFonts文件夹中。如果你构建的Ghostscript具有内置到ROM文件系统中的资源,则必须告诉GS查找字体和cidfamp。 - KenS
1
你可以使用-I开关来实现这一点。我建议您创建一个方便的目录,创建一个名为“CIDFont”的子目录,并将替代字体放在其中。在上级目录中创建一个cidfmap文件,引用该字体并命名它。然后使用-I将上级目录包含在搜索路径中。 - KenS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接