Ghostscript - 在运行时确定最终的替换字体

时间:2014-11-21 06:16:13

标签: fonts ghostscript postscript

我有一个文件试图找出哪些字体可用于重新编码,但由于某些内部原因(我不知道为什么,它只是另一个自己的PS文件)。 / p>

它通过以下逻辑来实现:

/Arial 
dup /Font resourcestatus{ pop pop }{ pop /ArialMT }ifelse
dup /Font resourcestatus{ pop pop }{ pop /Helvetica }ifelse 

目的是最好的字体键最后在堆栈上。

在Windows上的Ghostscript中,这似乎是/ Arial(因为resourcestatus返回2)。但是,尝试查找字体会产生常见警告:

Can't find (or can't open) font file %rom%Resource/Font/ArialMT.
Can't find (or can't open) font file ArialMT.
Can't find (or can't open) font file %rom%Resource/Font/ArialMT.
Can't find (or can't open) font file ArialMT.
Querying operating system for font files...
Didn't find this font on the system!
Substituting font Helvetica for ArialMT.

在我们尝试使用之前,是否可以在这种情况下确定最终/ Helvetica字体键?

这很重要,因为替换过程导致其他嵌入字体丢失时会出现一些错误。肯定是某个地方出现了这个错误,但我还在调查,并且好奇。

1 个答案:

答案 0 :(得分:4)

答案是“不是真的”。 Ghostscript中的字体替换机制非常复杂,并且涉及基于字体特征的一些启发式方法。它还取决于您如何配置Ghostscript和安装的字体。

在您的特定情况下,您可能会发现在fontmap.GS中有Arial的定义。事实上,默认的fontmap.GS包括:

/ Arial / ArialMT;

但是,除非您在Windows系统上安装(并使用GS安装程序设置FontPath),否则它实际上不会为ArialMT安装引用。因此,由于未定义ArialMT,它将恢复为“if all else failed”字体,即Helvetica。几乎就是你在上面的后面通道上看到的。

避免字体替换问题的最佳选择是仔细配置fontmap.GS,Ghostscript源附带的版本是示例,它不打算在每个系统上“按原样”使用