GhostScript - 错误的字体替换(错误的字符)

时间:2015-11-07 00:53:24

标签: linux pdf fonts ghostscript true-type-fonts

我试图将pdf文件转换为图片。

命令:gs -sDEVICE = pngalpha -sOutputFile = cover.png -r144 myfile.pdf

输出:

Can't find CID font "MyStrangeNonEmbeddedFont".
Attempting to substitute CID font /Adobe-Identity for /MyStrangeNonEmbeddedFont, see doc/Use.htm#CIDFontSubstitution.
The substitute CID font "Adobe-Identity" is not provided either. attempting to use fallback CIDFont.See doc/Use.htm#CIDFontSubstitution.
Loading a TT font from /some/path/DroidSansFallback.ttf to emulate a CID font Adobe-Identity ... Done.

字体已成功替换为DroidSansFallback.ttf,但所有字符都不正确。例子:

'C' is substituted with '<'
'6' is substituted with '>'
'B' is substituted with '@'
'D' is substituted with 'B'

是否可以修复它?

1 个答案:

答案 0 :(得分:0)

评论太长了,而是作为答案添加。

这就是为什么PDF规范强烈建议嵌入CIDFonts。

字符代码 - &gt; CID - &gt;字形描述是规范的一个复杂区域,比常规字体更复杂。

要获得正确的唯一方法是使用未嵌入的原始字体。 “修复”这个最好的选择是嵌入字体并制作一个新的PDF文件。

如果您不能这样做,那么您可以获取字体并向cidfmap添加特定条目。

如果失败那么您可以尝试编辑PDF文件中的CMap(CMap将字符代码映射到CID)或文档中的字符代码,以匹配您可用的任何字体(这可能是很多工作)。

CIDSystemInfo的排序'可能'给你一些线索,你可以使用注册表和排序来确定CID与实际字形的关系。

如果您有一个真正的CIDFont用作替代可能能够操纵字形的CID,但这将很难。如果您使用TrueType字体作为CIDFont的替代品,则无法更改Ghostscript将为该CIDFont生成的CMap。