渲染由 PDFCreator 0.9.x 生成的 PDF 文件时。我注意到它在字符映射中包含错误。现在,PDF 文件中的错误没什么好奇怪的,Acrobat 在渲染错误的 PDF 文件方面确实很神奇,因此许多 PDF 生成器创建的 PDF 不完全符合 PDF 标准。
我尝试创建一个小示例文件:http ://test.continuit.nl/temp/Document.pdf
单个页面使用 Tj 命令呈现单个字形(大写 A)(参见流 5 0 obj)。所选字体 (7 0 obj) 包含嵌入单个字形的字体。到目前为止,一切都很好。char 由 char #1 引用。鉴于字体的编码,它包含一个差异部分:[ 1 /A ]。因此 char 1 -> 字符 /A。现在在嵌入的子集字体中,有一个 cmap 与字符 65(例如大写 A)处的字形不匹配,字体的 cmap 部分确实按照 PDF 文件 Font -> Encoding -> Differences 数组中的顺序定义了字符。
看起来字符映射/编码完成了两次。只有 PDFCreator 0.9.x 中的文件似乎受到影响。
我的问题是:这是否正确(或者我是否犯了错误并且 PDF 是否正确)以及您将如何检测这种情况以解决渲染问题。
注意:我确实需要能够呈现这些 PDF。
解决方案
在 ISO32000 文件中有一条注释,表示不允许使用符号 TrueType 字体(字体描述符中的标志位 3)编码,您应该忽略它,始终使用简单的 1on1 编码。总而言之,如果它是符号字体,我完全忽略 Encoding 对象,这解决了问题。