PDF格式研究簡介檔案結構Stream 編碼轉為XML相關工具OpenPDF訊息相關網站參考文獻最新修改簡體版English |
為了要將 PDF 文件轉換為 XML,我們首先研究了 PDF 的格式,有關 PDF 格式的資訊大部分都可以從 Adobe PDF Reference [[cite:3]] 這份文件中取得,然而、該文件總共有 1236 頁,要完全研究透徹相當不易,況且、有些資訊還不包含在該文件當中,因此、我們以該文件為參考,然後直接以二進位編輯器閱讀數個中文的 PDF 原始檔,一步步研究出 PDF 格式的結構與意義,以下我們將簡要的說明 PDF 的文件格式,並就我們程式中所採取的關鍵方法進行較深入的探討。 PDF 的核心是 Page Description Language,這是一個以樹狀結構為主的語法,樹中節點採用類似物件導向的設計,因此稱為 obj,這些結構的層次大致如下:
上述結構中的 page 代表的的是 PDF 文件中的一個頁面,contents 代表頁面中的內容,其中的 stream 記載了每個頁面中的文字、影像等資訊,以及這些物件的座標轉換指令,這些指令包含座標定位、物件旋轉、放大縮小等等與排版有關的轉換。 許多的 page 頁面會形成頁面集合 pages,而所有的頁面集合會形成目錄 catalog, Catalog 是整棵樹的根節點,要對 PDF 檔案解碼,就必須先找到這個節點。 找到 catalog 之後,就可以利用 pages 資訊找到所有頁面,然後利用 page 中的 font 資訊對 contents 進行解碼,font 中的Encoding 資訊可用來將 stream 中的文字代號轉換為 PDF 的標準內碼 cid (Character identity),然後再利用 ToUnicode 中的資訊將 cid 轉換為 Unicode 編碼,如此即可抽取出 PDF 檔案中的文字。 雖然、上述程序說起來並不難,但是,PDF 的設計卻很複雜,例如:PDF 的繁體中文編碼,就有 Identity-H、Identity-V、B5pc-H、B5pc-V、ETen-B5-H、ETen-B5-V、ETenms-B5-H、ETenms-B5-V、ETHK-B5-H、ETHK-B5-V 等字集,而且還可以將 CMap 直接內嵌在 PDF 檔案中成為一個物件,而不需要遵照任何一種編碼法,這些都增加了解碼的困難度。 更複雜的是、Stream 的內容通常是壓縮過的,其中最常用的是 Inflate 壓縮法,也就市 zip 檔案中所用的壓縮法,因此、在解開 Stream 之前,必須先檢視是否被壓縮過,若有、則必須先解壓縮才能進行解碼。 另一個難以處理的問題是,PDF 中的物件並非以樹狀的層次結構直接儲存,而是以類似超連結的方式所形的樹狀結構,如何連結並沒有限制,因此、常常會在連了四到五層後才能找到所要的節點,這種設計加深了程式的複雜性。 為了說明 PDF 的實際結構,以下我們用一個簡單的 PDF 檔案進行說明:
其中的 1 0 obj, 2 0 obj … 等代表物件, endobj 標記代表物件的結束點,而 2 0 R、3 0 R… 則代表引用,也就是類似超連結的連結方式,因此、從上述範例中,我們可以整理出下列樹狀結構,這樣的結構有助於讀者理解上述 PDF 文件的內容:
請注意上述結構中的 Stream 標記,BT 代表文字段的開始, /F1 24 Tf 代表字型是 F1、大小是 24, 100 100 Td 代表相對位置移動到 100 100 的地方,而 <bd75a457add3a448a4c6b0d1a6d2a4e5c46dbadeb27aa874b2ce> Tj 則是『線上個人化參考文獻管理系統』經過 ETenms-B5-H 這個 CMap 表格編碼後的結果,範例中的 Font 沒有 ToUnicode 欄位,代表要轉為 Unicode 時可使用預設的轉換法。 PDF 的格式實在太複雜了,我們希望在轉換成 XML 後能很容易的處理,因此、我們在設計 OpenPDF 的 XML 格式時就以易處理性為第一考慮,以下是上述範例轉換後的結果。
這樣的表達方式極為簡單,我們稱之為 Easy Document 格式 (簡稱 EzDoc),EzDoc 相較於 PDF,有下列優點:
另外、相對於 Open Document 與 Micorsoft 的 OpenXML,EzDoc 也有下列優勢:
另外、透過現成的軟體,我們可以輕易的將 EzDoc 的 XML 檔案與相關影像壓縮到同一個檔案中,形成 EzDoc 的壓縮版。例如:若上述 XML 文件的名稱為 test.xml,則壓縮完後所形成的檔案,副檔名將命名為 test.ez,這實際上就是將 test.xml 與 logo.gif 兩個檔案以 zip 方式壓縮後的結果。 |
PDF 檔案的內部結構
page revision: 2, last edited: 19 Oct 2010 09:29
有个问题项咨询您一下,关于PDF文件中的云线是如何存储的,放在什么位置、
云线就是使用Adobe PDF软件中的绘图功能绘制的曲线图形。
Post preview:
Close preview