W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
建議查看 PDF 規(guī)范以獲取詳細(xì)信息和說明。這只是為了對格式進(jìn)行非常粗略的概述。
PDF 包括:
標(biāo)頭:包含 PDF 的版本,例如%PDF-1.7
主體:包含一系列間接對象
交叉引用表 (xref):包含正文中間接對象的列表
預(yù)告片
交叉引用表 (xref) 是正文中間接對象的表。它允許通過指向它們在文件中的位置來快速訪問這些對象。
它看起來像這樣:
xref 42 5 0000001000 65535 f 0000001234 00000 n 0000001987 00000 n 0000011987 00000 n 0000031987 00000 n
讓我們逐步了解它:
xref
只是一個指定外部參照表開始的關(guān)鍵字。
42
是此外部參照部分中第一個對象的數(shù)字 ID;5
是外部參照表中的條目數(shù)。
現(xiàn)在每個對象都有 3 個條目:10 位字節(jié)偏移量、5 位生成編號和一個or 的文字關(guān)鍵字。nnnnnnnnnn ggggg n
n
f
nnnnnnnnnn
是對象的字節(jié)偏移量。它告訴讀者對象在文件中的位置。
ggggg
是代號。它告訴讀者對象的年齡。
n
表示該對象是一個正常使用中的對象,f
表示該對象是一個自由對象。
第一個空閑對象的世代號始終為 65535。它構(gòu)成了所有空閑對象的鏈表的頭部。
普通對象的世代號始終為 0。世代號允許 PDF 格式包含同一對象的多個版本。這是一個版本歷史機(jī)制。
主體是一系列間接對象:
counter generationnumber << the_object >> endobj
counter
(整數(shù))是對象的唯一標(biāo)識符。
generationnumber
(整數(shù))是對象的代號。
the_object
是對象本身。它可以是空的。/Keyword
以指定它是哪種對象開始。
endobj
標(biāo)記對象的結(jié)束。
可以在以下位置找到一個具體示例test_reader.py::test_get_images_raw
:
1 0 obj << /Count 1 /Kids [4 0 R] /Type /Pages >> endobj 2 0 obj << >> endobj 3 0 obj << >> endobj 4 0 obj << /Contents 3 0 R /CropBox [0.0 0.0 2550.0 3508.0] /MediaBox [0.0 0.0 2550.0 3508.0] /Parent 1 0 R /Resources << /Font << >> >> /Rotate 0 /Type /Page >> endobj 5 0 obj << /Pages 1 0 R /Type /Catalog >> endobj
預(yù)告片看起來像這樣:
trailer << /Root 5 0 R /Size 6 >> startxref 1234 %%EOF
讓我們來看看它:
trailer <<
表示尾部詞典開始。它以 . 結(jié)尾>>
。
startxref
是一個關(guān)鍵字,后跟關(guān)鍵字的字節(jié)位置xref
。由于預(yù)告片始終位于文件底部,因此讀者可以快速找到外部參照表。
%%EOF
是文件結(jié)束標(biāo)記。
trailer 字典是一個鍵值列表。鍵在 PDF 參考 1.7 的表 3.13 中指定,例如/Root
和/Size
(兩者都是必需的)。
/Root
(字典)包含文檔目錄。
The5
是目錄字典的對象編號
0
是目錄字典的世代號
R
是指示該對象是對目錄字典的引用的關(guān)鍵字。
/Size
(整數(shù))包含文件外部參照表中的條目總數(shù)。
大多數(shù) PDF 文件都是壓縮的。如果你想閱讀它們,首先解壓它們:
pdftk crazyones.pdf output crazyones-uncomp.pdf uncompress
然后重命名crazyones-uncomp.pdf
為crazyones-uncomp.txt
并在我們最喜歡的 IDE / 文本編輯器中打開它。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: