PDF學習三 PDF檔案邏輯結構
本文轉自: https://blog.csdn.net/u012632138/article/details/80648760
說明:
要解析一個PDF檔案,首先要掌握PDF的物理結構,這是第一步。但是這個僅僅只是基礎,更重要的是對PDF邏輯結構的解析。PDF的邏輯大體上是一個樹狀結構,根節點是catalog字典,通過這裡去解析頁、目錄、連結資訊等等。
PDF reference 1.7.pdf 中3.6節。
目標:
掌握PDF樹型結構,掌握從Root到Page Content解析流程。
Catalog根節點
Catalog是整個PDF邏輯結構的根節點,是通過trailer的Root欄位定位,相當重要,因為這裡是PDF檔案物理結構和邏輯結構的連線點。Catalog字典包含的資訊非常多,這裡僅列了Pages做個說明。
完整的可檢視 PDF reference1.7.pdf Page 137。
以下是Catalog 字典
3 0 obj % 根據Root中指定的間接引用物件號找到Catalog字典
<<
/Type /Catalog % 指定型別是Catalog,區分大小寫
/Pages 1 0 R % 指向頁面樹的跟節點
>>
endobj % 物件結束關鍵字
Page Tree 根節點
1 0 obj % 根據Catalog字典中Pages指定的間接引用物件號找到Pages字典
<<
/Type /Pages
/Kids [2 0 R] % 該Page Tree節點下的子節點,可以是Page字典,也可以是其他Page Tree節點
/Count 1 % 該文件的頁面數,1說明文件只有1頁。
>>
endobj
Page 字典
2 0 obj % Page 字典
<<
/Type /Page
/Parent 1 0 R % parent page tree node
/MediaBox [0 0 612 792] % page size (612x792 points)
/Contents 4 0 R % content stream
/Resources << % resource dictionary
/Font << % font list
/Font1 5 0 R>>
>> >>
endobj
Contents字典
4 0 obj % the page content stream
<<
/Length 0 % should be byte length of the stream data.
% We use 0 here for convenience.
>> stream
% Text example: draw "Hello World!" text
BT % begin text object
/Font1 10 Tf % set font to /Font1, font size to 10 points
100 700 TD % move text position to 100,700
(Hello World!) Tj % output the text
ET % end text object
endstream
endobj
Resources字典
這個例子中包含的是font字典
5 0 obj % a font dictionary.
% This is a base-14 font, so only a few data is required.
<<
/Type /Font
/Subtype /Type1
/BaseFont /Helvetica
>>
endobj
頁面繼承
看下圖,例如Rotate屬性可以從page 父節點中繼承。
CaptionName Dictionary
PDF檔案中的一些物件型別可以被名稱引用而不是被物件引用。名稱和物件之間的對應是通過文件的名稱字典(PDF1.2)建立的,通過Names選項定位在文件目錄冊中(參看3.6.1部分,“文件目錄冊”)。在這個字典中的每個選項指派一個名稱樹結構的根節點(參看3.8.5部分,“名稱樹”)。
後記:
Catalog中還有許多其他條目,例如:Outline、OpenAction、PageLabels、OpenAction、AA、AcroForm,大家對哪個感興趣,可留言給我。
問題彙總:
1)Q:Catalog指向的Pages root節點中的Count數是表示該文件的所有頁面嗎?
A:是的,是該文件的頁面總數。PDF中說明:(Required) The number of leaf nodes (page objects) that are descendants of this node within the page tree.
2)Q:Points單位
1 Points = 1/72 inch
螢幕 1 inch = 96 pixel
PDF中Points 座標轉換為螢幕pixel。 例如頁面寬為w:w*96/72 得出在螢幕上顯示的值。
3)Q:PDF單位能換嗎?例如可以將Points換為inch嗎?
A:PDF單位只能是Point,1/72 inch。在Page 物件中有UserUnit,可以設定使用者空間單位,預設是1。可以設定為2,相當於整個座標系放大2倍,例如 10*10的矩形框,在UserUnit 為2的裡面相當於20*20的矩形框。
/UserUnit 2