使用未使用GhostScript嵌入的字体栅格化PDF

时间:2011-07-10 21:28:31

标签: fonts ghostscript cjk

我需要从PDF生成JPEG。 JPEG必须基于Trim Box创建,而PDF可以是1.3版,其中额外的Pantone颜色绝对需要叠印预览,因此只有GhostScript(当然Rip可以处理它们)。 Photoshop,Image Magick和SIPS(OS X的可编写脚本图像处理系统)都无法解决这两个问题(剪裁剪裁和复合处理叠印)。

我创建了一个应用程序来栅格化我收到的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并花了几天时间测试所有这些都没有成功,试图忽略或用另一个替换未嵌入的字体。这个论点似乎很复杂,但可能解决方案很简单。
  6. 有人可以帮助我吗?

1 个答案:

答案 0 :(得分:5)

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

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/