【问题标题】:Rasterize PDF's with font not embedded using GhostScript使用 GhostScript 对未嵌入字体的 PDF 进行光栅化
【发布时间】:2011-10-02 09:31:15
【问题描述】:

我需要从 PDF 生成 JPEG。 JPEG 必须基于 Trim Box 创建,PDF 可以是 1.3 版,带有额外的 Pantone 颜色,绝对需要叠印预览,所以只有 GhostScript(当然 Rip 可以处理它们)。 Photoshop、Image Magick 和 SIPS(OS X 的 Scriptable Image Processing System)都不能解决这两个问题(裁剪到修剪和复合处理叠印)。

我创建了一个应用程序来光栅化我收到的 PDF,除了某些中文 PDF 没有嵌入一种字体之外,所有的工作都很好。此字体为中文 STXiHei TrueType (CID),编码为 G8pc-EUC-H(信息从 Acrobat Pro 中提取)。

现在当 GhostScript 处理这些 PDF 时会出错。 我的问题是:

  1. 因为未嵌入字体在TrimBox区域之外,所以有一个GS参数允许跳过未嵌入字体?
  2. 如果第 1 点不可能,如何替换缺失的字体?
  3. 我在 OS X 上安装的 GS 9.02 不安装 cidfmap 文件或字体文件夹。
  4. 我需要安装什么以及在哪里使用替代字体?
  5. 我多次阅读 use.htm 并花了几天时间进行测试,但都没有成功,试图忽略或用另一种字体替换未嵌入的字体。这个论点似乎很复杂,但解决方案可能很简单。

有人可以帮助我吗?

【问题讨论】:

  • 您应该考虑支持并接受 KenS 的回答。如果你不这样做,你会遇到不愿意回答你未来的问题。有些人在玩“赞成票”,你知道吗? (我不认为,KenS 是……但其他人也在观看。)从你和 KenS 在网络上各种论坛上的活动,我可以看到他为了跟进你在为了解决你的问题。你知道怎么说“谢谢”吗?

标签: fonts ghostscript cjk


【解决方案1】:

这是(最终)在 Comp.text.pdf 中的 UseNet 上开始回答的问题。 问题是 PDF 文件包含对 CIDFont 的引用(不是字体,是 CIDFont)。与上面的问题陈述相反,字体是 not 嵌入的,这就是困难。

CIDFonts 比字体复杂得多,要替换丢失的字体并不简单,就像用(例如)Courier 替换丢失的拉丁常规字体一样。

不可能跳过字体,因为 Ghostscript 无法立即知道文本将被呈现在哪里(即字体在我们找到文本将被绘制的位置之前加载)。

现在 Ghostscript 允许您指定其他字体;对于 CIDFonts,这些在名为 cidfmap 的文件中进行了描述,该文件位于 Ghostscript 发行版的 gs/Resource/Init 中。

问题 1 是默认情况下 GS 将其资源内置到可执行文件中,并使用位于 ROM 文件系统中的文件。所以我们需要告诉 GS 去查看磁盘。有两种方法可以做到这一点:

1) 将源分发中的所有资源(/gs/Resource 下的所有内容)复制到方便的位置,并使用 -sGenericResourceDir= 开关告诉 GS 使用此目录。如果您这样做,那么您必须小心在路径末尾添加一个尾随目录分隔符。我提到这一点是因为通常使用 GS 你不要这样做。在这种情况下,PLRM 说我们必须这样做。

2) 将 cidfmap 文件复制到方便的地方并告诉 GS 使用 -I 开关查看该目录,该开关将该目录添加到搜索列表的头部。重要的是它的头部,因为你只能有一个 cidfmap 文件,而 GS 使用它找到的第一个。

所以,关于字体文件本身。您可以使用正版 CIDFont,也可以使用 TrueType 字体替代 CIDFont。

如果您使用正版 CIDFont,则必须使用上述选项 1 (GenericResourceDir) 并将文件放在 GenericResourceDir 位置下名为 Resource/CIDFonts 的目录中,或者使用选项 2 并将 CIDFont 放在名为 CIDFonts 的目录中直接在-I指向的位置下。

如果您使用 TrueType 字体作为替代字体,那么您可以使用 cidfmap 中字体条目中的 /Path 键来指向 TrueType 字体。

将来源未知的 TrueType 字体转换为特定类型的 CIDFont 的复杂性意味着您必须在 cidfmap 条目中提供大量信息,这些信息记录在文件本身中。需要注意的事项:

1) /Path 必须指向字体文件,它必须存在并且具有允许读取它的权限。

2) 您应该为 TrueType 集合提供 /SubfontID。如果您想使用除第一个子字体之外的任何内容,那么您必须提供一个 SubfontID。

3) cidfmap 中的条目由 PostScript 解释器解释,因此必须符合 PostScript 语法。特别是字体名称是 PostScript 名称对象,因此必须使用“/”来引入。

最后;许多 Linux 发行版没有提供 Ghostscript 的完整源代码,您可能需要在使用上述任何建议之前选择它。您可以从这里获取版本:

http://www.ghostscript.com/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-01
    • 2021-02-11
    • 2011-02-09
    • 2012-06-02
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    相关资源
    最近更新 更多