PyPDF2 PDF格式

2023-03-30 16:00 更新

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

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

PDF 包括:

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

  2. 主體:包含一系列間接對(duì)象

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

  4. 預(yù)告片

外部參照表

交叉引用表 (xref) 是正文中間接對(duì)象的表。它允許通過指向它們?cè)谖募械奈恢脕砜焖僭L問這些對(duì)象。

它看起來像這樣:

xref 42 5
0000001000 65535 f
0000001234 00000 n
0000001987 00000 n
0000011987 00000 n
0000031987 00000 n

讓我們逐步了解它:

  • xref只是一個(gè)指定外部參照表開始的關(guān)鍵字。

  • 42是此外部參照部分中第一個(gè)對(duì)象的數(shù)字 ID;5是外部參照表中的條目數(shù)。

  • 現(xiàn)在每個(gè)對(duì)象都有 3 個(gè)條目:10 位字節(jié)偏移量、5 位生成編號(hào)和一個(gè)or 的文字關(guān)鍵字。nnnnnnnnnn ggggg nnf

    • nnnnnnnnnn是對(duì)象的字節(jié)偏移量。它告訴讀者對(duì)象在文件中的位置。

    • ggggg是代號(hào)。它告訴讀者對(duì)象的年齡。

    • n表示該對(duì)象是一個(gè)正常使用中的對(duì)象,f表示該對(duì)象是一個(gè)自由對(duì)象。

      • 第一個(gè)空閑對(duì)象的世代號(hào)始終為 65535。它構(gòu)成了所有空閑對(duì)象的鏈表的頭部。

      • 普通對(duì)象的世代號(hào)始終為 0。世代號(hào)允許 PDF 格式包含同一對(duì)象的多個(gè)版本。這是一個(gè)版本歷史機(jī)制。

身體

主體是一系列間接對(duì)象:

counter generationnumber << the_object >> endobj

  • counter(整數(shù))是對(duì)象的唯一標(biāo)識(shí)符。

  • generationnumber(整數(shù))是對(duì)象的代號(hào)。

  • the_object是對(duì)象本身。它可以是空的。/Keyword以指定它是哪種對(duì)象開始。

  • endobj標(biāo)記對(duì)象的結(jié)束。

可以在以下位置找到一個(gè)具體示例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是一個(gè)關(guān)鍵字,后跟關(guān)鍵字的字節(jié)位置xref。由于預(yù)告片始終位于文件底部,因此讀者可以快速找到外部參照表。

  • %%EOF是文件結(jié)束標(biāo)記。

trailer 字典是一個(gè)鍵值列表。鍵在 PDF 參考 1.7 的表 3.13 中指定,例如/Root/Size(兩者都是必需的)。

  • /Root(字典)包含文檔目錄。

    • The5是目錄字典的對(duì)象編號(hào)

    • 0是目錄字典的世代號(hào)

    • R是指示該對(duì)象是對(duì)目錄字典的引用的關(guān)鍵字。

  • /Size(整數(shù))包含文件外部參照表中的條目總數(shù)。

閱讀PDF文件

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

pdftk crazyones.pdf output crazyones-uncomp.pdf uncompress

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)