呈現由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設備上下文)。 –