我認爲會有括號之間可讀文本在Tj命令之前
這個假設只適用於簡單的PDF。
文本表示操作者的字符串操作數應被解釋爲識別該字符的字形代碼序列被塗:
爲了從PDF規格(ISO 32000-1)引用。
使用簡單的字體,字符串的每個字節應被視爲單獨的字符代碼。然後按照字體的編碼查找字符代碼以選擇字形,如第9.6.6節「字符編碼」中所述。
使用複合字體(PDF 1.2),可以使用多字節代碼來選擇字形。在這種情況下,字符串的一個或多個連續字節將被視爲單個字符代碼。代碼長度以及從代碼到字形的映射在名爲CMap的數據結構中定義,如9.7所述,「複合字體」。
(第9.4.3節 - 文本顯示運營商 - ISO 32000-1)
因此,
我想知道它是什麼類型的內容。
如上所述,這些「字符串」由單字節或多字節字符代碼組成。這些代碼取決於當前字體的編碼。 PDF中的每個字體對象可以有不同的編碼。
那些編碼可以是一些標準編碼(MacRomanEncoding,MacExpertEncoding,或WinAnsiEncoding)或一些定製編碼。特別是在嵌入字體子集的情況下,您經常會發現編碼,其中1是頁面上繪製的第一個字形的代碼,2是第二個不同字形的代碼,第三個是不同的字形,等等。
此外:是否有可能從這些字符串中獲取純文本,還是需要更多信息來提取純文本?
由於用文字說明的字符串參數的編碼依賴於當前的字體,你至少需要跟蹤當前的字體名稱(TF指令)和查找編碼信息(編碼或ToUnicode map)從當前字體對象。
第9.10節 - 文本內容提取 - ISO 32000-1對此進行了更詳細的解釋。
此外,顯示指令的文本順序不一定是閱讀順序。單詞「你好」可以例如首先畫出'o',然後向左,然後'el',然後再離開,然後'H',然後向右,最後剩下'l'。而且兩個單詞不需要用空格字形分隔,只需要一個文本定位指令即可。
因此,一般來說,您還必須跟蹤繪製的單獨字符串的位置。
來源
2017-02-14 14:57:13
mkl