【问题标题】:Embedded TrueType fonts in Adobe ReaderAdobe Reader 中嵌入的 TrueType 字体
【发布时间】:2012-10-13 16:18:41
【问题描述】:

我根据 Adob​​e 手册在 pdf 文件中嵌入了 TrueType 字体:

7 0 obj 
<<
/BaseFont /Arial
/FirstChar 32
/LastChar 126
/Subtype /TrueType
/FontDescriptor 8 0 R
/Widths 59 0 R
/Type /Font
>>

它在大多数 PDF 查看器中都能完美运行,例如 Evince、Xournal、PDF Editor 等;但它在 Adob​​e Reader XI 中不起作用。它根本不显示任何文本(显示图纸)。在 PDF 属性中,它没有我的嵌入字体。看来,Adobe Reader 无法找到嵌入的字体。但是 Adob​​e Reader 与其他 PDF 查看器有什么区别。

更新:最初,我从 PDF 手册中复制了文本,非法字符是 Unicode 减号。这是该文件的更新版本。仍然,它不显示嵌入的字体,而是默认的替代字体。

PDF File

【问题讨论】:

  • 没有示例文件将很难回答您的问题。
  • @yms 你说得对。我添加了一个简单的示例来说明我的问题。

标签: pdf fonts pdf-generation truetype adobe-reader


【解决方案1】:

可能还有其他问题,但乍一看我可以看到您的字体描述符已损坏:

8 0 obj 
<<
/FontName /Acens
/StemV 105
/Leading 83
/FontFile2 10 0 R
/Ascent 720
/Flags 262178
/XHeight 394
/AvgWidth 478
/Descent −270
/ItalicAngle 0
/StemH 45
/MaxWidth 1212
/MissingWidth 255
/FontBBox [−177 −269 1123 866] <- This guy here does not look very well
/Type /FontDescriptor
/CapHeight 660
>>
endobj 

除了 Acrobat 之外,您尝试过的所有读者很可能只是忽略了这个问题并假设了某种“默认”值。

【讨论】:

  • '/Descent'键也有嫌疑
  • 一旦那些有趣的“â^”片段被删除(用空格覆盖),就会显示检索嵌入字体“Acens”失败。因此,还有更多工作要做...... ;)
  • 好点,我编辑了文件,但使用嵌入字体仍然有问题。
  • @yms 我只是使用十六进制编辑器用 ASCII 32 覆盖那些坏字符,因此没有对象被移动
【解决方案2】:

除了字体描述符损坏,FontFile2流字典不完整:

8 0 obj 
<<
[...]
/FontFile2 10 0 R
[...]
>> 
endobj 
10 0 obj 
<<
/Length 29061
>>
stream 
[...]

根据规范 (ISO 32000-1:2008),缺少 Length1 条目:

(Type 1 和 TrueType 字体需要) Type 1 字体程序的明文部分,或整个 TrueType 字体程序,在使用指定的过滤器解码后 流的过滤器条目(如果有)。

【讨论】:

  • 是的,你是对的,但我不知道如何计算Length1。流长度是二进制ttf文件的大小,但是Length1怎么计算呢?
  • 在您的情况下,即对于 TrueType 字体,它是整个未压缩字体程序的大小,请参见上面的引用。我对所有字体都不太熟悉,但这是否意味着在您的情况下 Length1 与您的 Length 相同,因为您毕竟不应用压缩?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
  • 2020-04-08
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多