有許多與 PDF 相關的 Python 軟件包。我的最愛之一是PyPDF2。您可以使用它提取元數據、旋轉頁面、拆分或合并 pdf 等。這是一把現有 pdf 的瑞士軍刀。在本文中, 我們將學習如何使用 PyPDF2 提取 PDF 的基本信息。

開始

PyPDF2 不是 Python 標準庫的一部分, 因此您需要自己安裝它。最好的方法是使用pip。

pip install pypdf2

現在, 我們已經安裝了 PyPDF2, 讓我們學習如何從 PDF 獲取元數據!

提取元數據

您可以使用 PyPDF2 從任何 PDF 中提取相當數量的有用數據。例如, 您可以學習文檔的作者、標題和主題, 以及有多少頁。讓我們來看看如何通過下載本書的樣本從 Leanpub 在https://leanpub.com/reportlab。我下載的樣本被稱為 “reportlab 樣本. pdf”。

下面是代碼:

# get_doc_info.py

from PyPDF2 import PdfFileReader


def get_info(path):
    with open(path, 'rb') as f:
        pdf = PdfFileReader(f)
        info = pdf.getDocumentInfo()
        number_of_pages = pdf.getNumPages()

    print(info)

    author = info.author
    creator = info.creator
    producer = info.producer
    subject = info.subject
    title = info.title

if __name__ == '__main__':
    path = 'reportlab-sample.pdf'
    get_info(path)

我們從這里導入 PdfFileReader PyPDF2 。此類使我們能夠讀取 PDF 并使用各種訪問器方法提取數據。我們首先要做的是創建我們自己的 get_info 函數, 接受 PDF 文件路徑作為它的唯一參數。然后, 我們以只讀二進制模式打開文件。接下來, 我們將該文件處理程序傳遞到 PdfFileReader 并創建它的實例。

現在, 我們可以使用該 getDocumentInfo 方法從 PDF 中提取一些信息。這將返回一個實例 PyPDF2.pdf.DocumentInformation , 它具有以下有用的屬性, 除其他之外:

  • 作者
  • 創造者
  • 生產者
  • 主題
  • 標題

如果打印出 DocumentInformation 對象, 這就是您將看到的內容:

{ '/Author': 'Michael Driscoll',
 '/CreationDate': "D:20180331023901-00'00'",
 '/Creator': 'LaTeX with hyperref package',
 '/Producer': 'XeTeX 0.99998',
 '/Title': 'ReportLab - PDF Processing with Python' }

我們還可以通過調用該 getNumPages 方法來獲取 PDF 中的頁數。

從 pdf 中提取文本

PyPDF2 對從 pdf 中提取文本的支持有限。不幸的是, 它沒有內置的圖像提取支持。我已經看到了一些關于堆棧溢出的食譜, 使用 PyPDF2 來提取圖像, 但代碼示例似乎很受打擊或錯過。

讓我們嘗試從我們在上一節下載的 PDF 的第一頁中提取文本:

# extracting_text.py

from PyPDF2 import PdfFileReader


def text_extractor(path):
    with open(path, 'rb') as f:
        pdf = PdfFileReader(f)

        # get the first page
        page = pdf.getPage(1)
        print(page)
        print('Page type: {}'.format(str(type(page))))

        text = page

pdf “text_extractor (路徑)”

您將注意到, 此代碼開始的方式與前面的示例非常相似。我們仍然需要創建一個實例 PdfFileReader 。但是, 這一次, 我們抓住一個頁面使用的 getPage 方法。PyPDF2 是從零開始的, 很像 Python 中的大多數東西, 所以當你通過它的時候, 它實際上抓住了第二頁。第一頁, 在這種情況下, 只是一個圖像, 所以它不會有任何文本。

有趣的是, 如果運行此示例, 您將發現它不返回任何文本。相反, 我得到的只是一系列的斷字符。不幸的是, PyPDF2 對提取文本的支持非常有限。即使它能夠提取文本, 它也可能不按您期望的順序排列, 并且間距也可能不同。

要使此示例代碼正常工作, 您需要嘗試對不同的 PDF 運行它。我在美國國稅局網站上找到一個: https://www.irs.gov/pub/irs-pdf/fw9.pdf

這是一個 W9 形式的人誰是自營職業或合同雇員。它也可以在其他情況下使用。無論如何, 我下載它作為w9 , 并將其添加到 GitHub 存儲庫以及。如果您使用該 PDF 而不是示例之一, 它將愉快地從2頁中提取一些文本。我不會重現這里的輸出, 因為它是一種漫長的雖然。

您可能會發現, pdfminer包比 PyPDF2 更適合于提取文本。

包裝

PyPDF2 包很有用。我們能夠從 pdf 中獲取一些有用的信息。我可以看到在 pdf 文件夾中使用 PyPDF, 并使用元數據提取技術來根據創建者名稱、主題等來分類 pdf。試試看, 看看你怎么想!

Comments are closed.