PDF文件格式解析(1)- 了解PDF的語法格式
由Adobe Systems Incorporated開發的PDF(便攜式文檔格式)被Adobe描述為一種通用的文檔表示語言。PDF代表格式化的,面向頁面的文檔。這些文檔可以是結構化的或簡單的。它們可能包含文本,圖像,圖形和其他多媒體內容,例如視頻和音頻。支持注釋,元數據,超文本鏈接和書簽。更高版本提供了其他功能,例如,將地理空間信息嵌入到代表地圖或其他地理空間圖像(例如衛星照片)的文檔中。
PDF的核心是源自PostScript頁面描述語言的圖像模型。請參閱后記格式族。該模型可以在完整,精確和專業的級別上以與設備無關和與分辨率無關的方式來描述文本和圖形。與作為編程語言的PostScript不同,PDF基於結構化的二進制文件格式,該格式針對交互式查看的高性能進行了優化
最新的都已經到PDF2.0的格式了,但是PDF2.0的標准還沒有廣泛采用,所以本文的介紹還是以PDF1.7為解析參考藍本。
PDF的發展史不做過多介紹,本系列文章就是簡析PDF文件結構。 pdf_reference_1-7是Adobe PDF的參考手冊,可自行從https://www.adobe.com/devnet/pdf/pdf_reference_archive.html下載。
我們看其中的一個例子 TABLE G.2 Objects in simple text string example
- %PDF−1.4
- 1 0 obj
- << /Type /Catalog
- /Outlines 2 0 R
- /Pages 3 0 R
- >>
- endobj
- 2 0 obj
- << /Type /Outlines
- /Count 0
- >>
- endobj
- 3 0 obj
- << /Type /Pages
- /Kids [4 0 R]
- /Count 1
- >>
- endobj
- 4 0 obj
- << /Type /Page
- /Parent 3 0 R
- /MediaBox [0 0 612 792]
- /Contents 5 0 R
- /Resources << /ProcSet 6 0 R
- /Font << /F1 7 0 R >>
- >>
- >>
- endobj
- 5 0 obj
- << /Length 73 >>
- stream
- BT
- /F1 24 Tf
- 100 100 Td
- (Hello World) Tj
- ET
- endstream
- endobj
- 6 0 obj
- [/PDF /Text]
- endobj
- 7 0 obj
- << /Type /Font
- /Subtype /Type1
- /Name /F1
- /BaseFont /Helvetica
- /Encoding /MacRomanEncoding
- >>
- endobj
- xref
- 0 8
- 0000000000 65535 f
- 0000000009 00000 n
- 0000000074 00000 n
- 0000000120 00000 n
- 0000000179 00000 n
- 0000000364 00000 n
- 0000000466 00000 n
- 0000000496 00000 n
- trailer
- << /Size 8
- /Root 1 0 R
- >>
- startxref
- 625
- %%EOF
這段PDF代碼的顯示結果就是Hello World,如下圖。
從整體結構來看語法有點類似XML,HTML,基本都有節點控制。每個obj小節都會有個endobj。

從上面的介紹來看PDF就像變成HTML一樣是有固定格式的,所以接下來幾個章節就圍繞PDF的格式做一個簡要的解析。