呈现由PDFCreator 0.9.x生成的PDF文件。我注意到它在字符映射中包含一个错误。现在,PDF文件中的错误毫无疑问,Acrobat在渲染错误的PDF文件方面有奇效,因此很多PDF生成器都会创建不完全符合PDF标准的PDF文件。PDF字体映射错误
我trief创建一个小例子文件:http://test.continuit.nl/temp/Document.pdf
单页面呈现使用TJ命令单个字形(大写的A)(参见流5 0 OBJ)。选中的字体(7 0 obj)包含嵌入单个字形的字体。到现在为止还挺好。 char被char#1引用。鉴于字体的编码,它包含一个差异部分:[1/A]。因此char 1 - >字符/ A。现在在嵌入子集字体中有一个与字符65不匹配字形的cmap(例如大写字母A),字体的cmap部分确实按照PDF文件Font - > Encoding - > Differences array中的顺序定义字符。
它看起来像字符映射/编码是两次。只有来自PDFCreator 0.9.x的文件似乎受到影响。
我的问题是:这是正确的(或者我犯了一个错误,是PDF正确的),你会做什么来检测这种情况,以解决渲染问题。
注:我确实需要能够使这些PDF ..
解决方案
在ISO32000文件存在的话是象征性的TrueType字体(标志位3是在字体描述符)编码是不允许的,你应该忽略它,总是使用简单的1on1编码。总之,如果它是一种符号字体,我完全忽略了Encoding对象,这就解决了这个问题。
你用什么渲染文件? – userx
@userx:用Delphi编写的我自己的PDF渲染器。它将内存中的PDF呈现为GDI设备(通常是位图,但也可以是打印机或任何其他GDI设备上下文)。 –