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

标签 linux pdf fonts ghostscript truetype

我正在尝试将 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'

可以修复吗?

最佳答案

评论太长,添加为答案。

这就是 PDF 规范强烈建议嵌入 CIDFonts 的原因。

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

唯一正确的方法是使用未嵌入的原始字体。 “修复”此问题的最佳方法是嵌入字体并制作一个新的 PDF 文件。

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

否则您可以尝试编辑 PDF 文件中的 CMap(CMap 将字符代码映射到 CID)或文档中的字符代码,以匹配您可用的任何字体(这可能需要大量工作).

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

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

关于linux - GhostScript - 错误的字体替换(错误的字符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33577882/

相关文章:

java - 我的客户需要什么才能使用我的 Java 程序? (i文本)

swift - 如何显示来自文件流的pdf数据

javascript - 如何使用文件输入在 PDFJS 中打开本地 PDF?

c# - 如何检查字体是否支持特定样式

php - UTF-8贯穿始终

linux - 如何在 Grub 中添加菜单项以在命令行中启动 Ubuntu

c - 在 C 中的浏览器中生成按键

linux - 平面文件数据分析

css - @font-face 不能像倾斜一样工作

android - 在 Android WebView 中使用 Font-face