1. 程式人生 > >PDF格式分析(三十七)Article thread

PDF格式分析(三十七)Article thread

用途

某些型別的文件可能會包含邏輯連線,而這個邏輯順序並不是物理順序。比如:新聞報道可以從新聞通訊的第一頁開始,然後轉到一個或多個非連續的內頁。

為了表示物理上不連續但邏輯相關的專案的序列,PDF文件定義了一個或多個Article(PDF 1.1)。 Article的順序由article thread定義; 組成文章的各個內容項線上程上稱為珠子(bead)。 使用者可以通過點選從一個珠子到下一個珠子進行跳轉。

表示

文件Catalog中可以定義的可選Threads條目(參見“文件目錄”),該條目中定義了一個Thread詞典組成的陣列,用來表示文件Articles。Thread內的每個單獨的bead應由bead字典表示。Thread字典的“F”條目應指定Threads中的第一個bead; bead通過“N”(下一個)和“V”(前一個)條目,構成一個在一個雙向連結串列,將所有bead順序連結在一起。 此外,對於出現 article beads 的每個頁面,頁面物件(Page)應包含一個B條目,其值是頁面上的bead間接引用的陣列,順序是按照繪圖順序進行排列。

Thread詞典中的條目

Key Type Value
Type name (可選)如果存在,則應為Thread。
F dictionary (必需;應為間接引用)Thread中的第一個bead。
I dictionary (可選)包含有關該Thread的資訊的Thread資訊字典,例如其標題,作者和建立日期。 該詞典的內容應符合文件資訊詞典的語法(見“Document Information Dictionary文件資訊詞典”)。

bead詞典中的條目

Key Type Value
Type name (可選)如果存在,則應為Bead。
T dictionary (對於Thread的第一個bead是必需的;對於所有其他珠子是可選的;該物件是間接引用表示)該bead所屬的Thread物件。
N dictionary (必需;應為間接引用)Thread中的下一個bead。 在最後一個bead中,該條目應指第一個bead。
V dictionary (必需;應為間接引用)Thread中的上一個bead。 在第一個bead中,該條目應指最後一個bead。
P dictionary (必需;應為間接引用)表示此bead所在頁面的頁面物件。
R rectangle (必需)一個矩形,指定頁面上此bead的位置。

例子:

Catalog 字典

494 0 obj                         % Catalog 字典
<<
/Pages 478 0 R
/Threads 495 0 R                  % Threads 簡介引用
/Type/Catalog>>
endobj

Thread 陣列

495 0 obj
[496 0 R 497 0 R]                 % Thread 陣列
endobj

Thread 字典

496 0 obj                        
<<
/F 510 0 R                        % Thread中的第一個bead
/I 56 0 R                         % Thread資訊字典
>>          
endobj
497 0 obj
<<
/F 524 0 R
/I 57 0 R>>          
endobj

Thread中的第一個bead詞典

510 0 obj
<<
/N 511 0 R
/P 500 0 R
/R[44.8739 285.975 589.09 677.906]
/T 496 0 R
/V 512 0 R>>
endobj

Thread中的最後一個bead詞典

512 0 obj
<<
/N 510 0 R
/P 26 0 R
/R[120.778 15.7763 579.065 177.132]
/T 496 0 R
/V 513 0 R>>
endobj

bead所在頁面的頁面物件

500 0 obj
<<
/Annots 501 0 R
/B[510 0 R 524 0 R 525 0 R 526 0 R]
/Contents[536 0 R 537 0 R 538 0 R 543 0 R 544 0 R 547 0 R 548 0 R 549 0 R]
/CropBox[0 0 612 792]
/MediaBox[0 0 612 792]
/Parent 478 0 R
/Resources<</ColorSpace<</CS0 531 0 R>>/ExtGState<</GS0 532 0 R>>/Font<</T1_0 527 0 R/T1_1 528 0 R/TT0 529 0 R/TT1 530 0 R/TT2 539 0 R/TT3 540 0 R/TT4 545 0 R/TT5 546 0 R>>/ProcSet[/PDF/Text]>>
/Rotate 0
/StructParents 0
/Type/Page>>
endobj