未嵌入字体的 Ghostscript 和 PDF

Posted

技术标签:

【中文标题】未嵌入字体的 Ghostscript 和 PDF【英文标题】:Ghostscript and PDF with fonts not embedded 【发布时间】:2011-07-03 16:44:41 【问题描述】:

我的系统配置是带有 GhostScript 9.02 的 OS X 我想知道(一步一步)如何在 GS 中添加和配置文件,以便可以替换字体。 我的 GS 安装没有安装/创建文件。 如何添加?

问题是我有一个包含所有嵌入子集字体的 PDF,除了一个。 而对于这个 GS 不能光栅化页面。

如何解决这个问题?

【问题讨论】:

请考虑注册一个帐户,以便您可以离开 cmets 并编辑您的帖子。 【参考方案1】:

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 在“gs -h”中列为“搜索路径”的任何 LIBPATH 中搜索此文件。

3) cidfmap 中没有使用 Adob​​e-Japan1 Ordering 的字体映射。如果 Ghostscript 使用步骤 1 和 2 找不到字体,那么它将使用 Ordering 作为字体名称替换字体。至少这应该得到正确的字形。

我不想在这里复制 cidfmap 文档,因为我们偶尔会更新它,但可以通过以下方式在线访问它:http://www.artifex.com/gs-current-release/Use.htm#CIDFontSubstitution

Ghostscript 文档的该部分提供了示例。

【讨论】:

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

以上是关于未嵌入字体的 Ghostscript 和 PDF的主要内容,如果未能解决你的问题,请参考以下文章

Ghost4J/Ghostscript - 尝试将字体嵌入 PDF 时出现错误 100

编译时将字体添加到 Ghostscript 9.15

配置 Ghostscript 以使用“MT Extra”字体

Ghostscript 和 PDF 字体错误

链接到使用 GhostScript 创建的 PDF 页面

如何使用 Ghostscript 和 Ghostscript .NET 通过嵌入 IIC 配置文件生成正确的 PDF/A