PyPDF2 PDF格式

2023-03-30 16:00 更新

建議查看 PDF 規(guī)范以獲取詳細(xì)信息和說明。這只是為了對格式進(jìn)行非常粗略的概述。

總體結(jié)構(gòu)

PDF 包括:

  1. 標(biāo)頭:包含 PDF 的版本,例如%PDF-1.7

  2. 主體:包含一系列間接對象

  3. 交叉引用表 (xref):包含正文中間接對象的列表

  4. 預(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 nnf

    • 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ù)告片

預(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ù)。

閱讀PDF文件

大多數(shù) PDF 文件都是壓縮的。如果你想閱讀它們,首先解壓它們:

pdftk crazyones.pdf output crazyones-uncomp.pdf uncompress

然后重命名crazyones-uncomp.pdfcrazyones-uncomp.txt并在我們最喜歡的 IDE / 文本編輯器中打開它。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號