如何在 Python 中解析 PDF:一個強大的逐步指南

解析 PDF 意味著從 PDF 文件中提取結構化或非結構化數據。由於 PDF 的複雜結構,這可能會很具挑戰性。與純文本或像 JSONXML 這樣的結構化格式不同,PDF 以不總是遵循線性順序的方式存儲內容。提取文本、表格、圖像和元數據需要一個可靠、準確且高效的 Python PDF 解析庫。在這篇文章中,我們將學習如何使用 Aspose.PDF for Python 在 Python 中解析 PDF。到本指南結束時,您將能夠從 PDF 文檔中提取文本、表格和圖像。

本文涵蓋以下主題:

Aspose.PDF: 最佳 Python PDF 解析庫

Aspose.PDF for Python 是目前最佳的 Python PDF 解析庫之一。它提供高準確性,支持結構化數據提取,甚至通過 OCR 支持處理掃描的 PDF。

Aspose.PDF 在 Python PDF 解析庫中因幾個原因而脫穎而出:

  • 高準確度:準確提取文本和表格。
  • 支持結構化數據:可以處理表格、圖片和元數據。
  • 無外部依賴:一個輕量級、自足的函式庫。
  • 多種輸出格式:將 PDF 轉換為文本、XLSX、DOCX、HTML 和圖像格式。
  • 安全性和可靠性:處理複雜的 PDF 結構而不會造成數據損壞。

相比於開源替代方案,Aspose.PDF 提供了一個更強大且 功能豐富的解決方案,使其成為企業應用程序和文檔自動化系統的理想選擇。

安裝與設置

安裝 Aspose.PDF for Python 很簡單。從 releases 下載它或運行以下 pip 命令:

pip install aspose-pdf

要開始在您的 Python 應用程式中使用 Aspose.PDF,請導入必要的模組:

import aspose.pdf as ap

提取文本:在 Python 中解析 PDF

解析 PDF 中的文本是 Python PDF 解析庫的主要功能之一。我們可以從 PDF 文件的所有頁面或從特定頁面或 PDF 文件的某個區域中提取文本。在接下來的部分中,我們將學習如何:

在 Python 中解析 PDF 所有頁面的文本

Aspose.PDF for Python 提供了一種有效的方法來從 PDF 文件中提取文本,使用 DocumentTextAbsorber 類。Document 類用於加載 PDF 文件,而 TextAbsorber 類負責從所有頁面提取文本內容。accept() 方法處理每一頁並提取文本,然後可以根據需要存儲或顯示。

從 PDF 的所有頁面中提取文本的步驟 在 Python 中

  1. 使用 Document 類加載 PDF 文檔。
  2. 創建 TextAbsorber 類的實例以處理文本提取。
  3. 呼叫 accept() 方法在 pages 集合上,允許 TextAbsorber 處理所有頁面。
  4. 使用 TextAbsorber 實例的 text 屬性檢索提取的文本。
  5. Print the extracted text.

以下代碼示例展示如何在 Python 中解析 PDF 所有頁面的文本。

# 這個代碼範例顯示如何在 Python 中從 PDF 文件的所有頁面提取文本。
import aspose.pdf as ap

# 打開 PDF 文件
document = ap.Document("AddText.pdf")

# Create text absorber
text_absorber = ap.text.TextAbsorber()

# 呼叫 accept 方法以處理所有頁面
document.pages.accept(text_absorber)

# Retrieve the extracted text
extracted_text = text_absorber.text

# 定義文件路徑
file_path = "extracted-text.txt"

# 打開文件以寫入模式並寫入提取的文本
with open(file_path, "w", encoding="utf-8") as tw:
    tw.write(extracted_text + "\n")  # Write the extracted text with a newline

從 PDF 的特定頁面解析文本

我們也可以通過稍微修改之前的方法來從 PDF 文檔的特定頁面提取文本。您只需在 Document 對象的所需頁面上調用 accept() 方法,而不是處理整個文檔。只需使用其索引指定頁碼,Aspose.PDF 將僅從該頁面提取文本。當處理大型 PDF 時,這種方法特別有用,因為您只需要特定部分的數據,可提高效率和性能。

以下代碼示例顯示了如何在 Python 中從 PDF 的特定頁面解析文本。

# 這段代碼範例展示了如何在 Python 中從 PDF 文件的特定頁面提取文本。
import aspose.pdf as ap

# 打開 PDF 文件
document = ap.Document("AddText.pdf")

# Create text absorber
text_absorber = ap.text.TextAbsorber()

# 呼叫 accept 方法以處理所有頁面
document.pages[1].accept(text_absorber)

# Retrieve the extracted text
extracted_text = text_absorber.text

# 定義文件路徑
file_path = "extracted-text.txt"

# 以寫入模式打開檔案並寫入提取的文本
with open(file_path, "w", encoding="utf-8") as tw:
    tw.write(extracted_text + "\n")  # Write the extracted text with a newline

從 PDF 的特定區域解析文本

有時候,我們可能需要從 PDF 頁面的特定部分提取文本,而不是從整個文檔中檢索內容。要針對特定區域,可以使用 TextSearchOptionsRectangle 屬性。此屬性接受一個 Rectangle 物件,該物件定義了所需區域的坐標。通過指定這個邊界,我們可以僅從選定的區域提取文本,而忽略頁面內容的其餘部分。

從特定頁面區域提取文本的步驟

  1. 使用 Document 類加載 PDF 文檔。
  2. 創建一個 TextAbsorber 類的實例以從文檔中捕獲文本。
  3. 定義目標區域,使用 TextSearchOptions.Rectangle,該選項指定要從中提取文本的區域。
  4. 對特定頁面應用文本擷取,方法是對所選頁面調用 accept() 方法。
  5. TextAbsorberText 屬性中提取的文本。
  6. Process the output as needed.

以下代碼範例顯示如何在 Python 中解析 PDF 頁面特定區域的文本。

# 這段代碼範例顯示如何使用 Python 從 PDF 文檔的特定區域提取文本
import aspose.pdf as ap

# 打開 PDF 文件
document = ap.Document("sample.pdf")

# 創建 TextAbsorber 對象以提取文本
absorber = ap.text.TextAbsorber()
absorber.text_search_options.limit_to_page_bounds = True
absorber.text_search_options.rectangle = ap.Rectangle(100, 200, 250, 350, True)

# 接受第一頁的吸收器
document.pages[1].accept(absorber)

# 獲取提取的文字
extracted_text = absorber.text

# 定義檔案路徑
file_path = "extracted-text.txt"

# 打開文件以寫入模式並寫入提取的文本
with open(file_path, "w", encoding="utf-8") as tw:
    tw.write(extracted_text + "\n")  # Write the extracted text with a newline

這種方法使您能夠精確地從表格單元格、表單字段或頁面的任何定義區域提取文本,這使其成為文檔自動化和數據分析的理想選擇。

從多欄PDF中提取文本

PDF 文件通常包含文本、圖像、註釋、附件和圖表等元素的混合。在處理多欄 PDF 時,提取文本並保持原始佈局可能會很具挑戰性。

Aspose.PDF for Python 簡化了這個過程,允許開發者在提取之前操作文本屬性。通過調整字體大小再提取文本,可以實現更乾淨和更結構化的輸出。以下步驟說明了如何應用此方法以準確地從多欄 PDF 提取文本。

在 Python 中從多列 PDF 中提取文本的步驟

  1. 使用 Document 類別加載 PDF 文件。
  2. 建立 TextFragmentAbsorber 的實例,以定位和提取文檔中的單個文本片段。
  3. 檢索所有檢測到的文本片段,並將其字體大小減少70%以提高提取準確性。
  4. 將修改過的文件存儲在內存流中,以避免保存中間文件。
  5. 從記憶體串流載入 PDF 以處理調整過的文本。
  6. 使用 TextAbsorber 從修改過的文檔中檢索結構化文本。
  7. 將提取的文本保存到 .txt 文件以便進一步使用。

以下代碼範例顯示如何從多欄 PDF 中提取文本,同時保留佈局。

# 這個代碼範例顯示如何在 Python 中從多列 PDF 中提取文字
import io
import aspose.pdf as ap

# 打開 PDF 文件
document = ap.Document("multi-column-sample.pdf")

# 創建 TextFragmentAbsorber 物件以提取文本
text_fragment_absorber = ap.text.TextFragmentAbsorber()

# 接受第一頁的吸收器
document.pages.accept(text_fragment_absorber)

# 獲取提取的文本片段集合
text_fragment_collection = text_fragment_absorber.text_fragments

# 減少字體大小至少 70% 以改善文本提取
for text_fragment in text_fragment_collection:
    text_fragment.text_state.font_size *= 0.7

# 將修改過的文件儲存到內存流中
source_stream = io.BytesIO()
document.save(source_stream)

# 從記憶體串流重新加載文檔
source_stream.seek(0)
dest_document = ap.Document(source_stream)

# 初始化 TextAbsorber 以提取更新的文本
text_absorber = ap.text.TextAbsorber()
dest_document.pages.accept(text_absorber)
extracted_text = text_absorber.text

# 將提取的文本保存到文件中
with open("ExtractColumnsText_out.txt", "w", encoding="utf-8") as file:
    file.write(extracted_text)

這種方法確保從多欄PDF提取的文本盡可能準確地保留其原始佈局。

增強的文本解析與 ScaleFactor

Aspose.PDF for Python 允許您解析 PDF 並從特定頁面提取文本,並提供先進的文本提取選項,例如文本格式模式和縮放因子。這些選項有助於準確地從複雜的 PDF 中提取文本,包括多列文檔。

通過使用 ScaleFactor 選項,我們可以微調內部文本網格以提高準確性。1 和 0.1 之間的縮放因子類似於字體縮小,有助於正確對齊提取的文本。0.1 和 -0.1 之間的值將被視為零,這樣可以根據頁面上最常用字體的平均字形寬度自動縮放。如果未設置 ScaleFactor,將應用默認值 1.0,以確保不進行任何縮放調整。對於大規模文本提取,建議自動縮放(ScaleFactor = 0),但手動設置 ScaleFactor = 0.5 可以改善複雜佈局的結果。然而,不必要的縮放不會影響內容的完整性,確保提取的文本保持可靠

從特定頁面提取文本的步驟,帶比例因子

  1. 使用 Document 類加載 PDF 文檔。
  2. 創建 TextAbsorber 的實例以提取文本。
  3. TextExtractionOptions 設置為純格式模式以進行準確的提取。
  4. 調整 scalefactor 以優化多欄 PDF 中的文字識別。
  5. 呼叫 accept()pages 集合中以提取文本。
  6. 將提取的內容保存到文本文件中。
# 這個代碼示例顯示了如何使用 Python 從 PDF 文件的特定區域提取文本。
import aspose.pdf as ap

# 打開 PDF 文件
document = ap.Document("sample.pdf")

# 初始化 TextAbsorber 並設置文本提取選項
text_absorber = ap.text.TextAbsorber()

# 設置擷取選項
extraction_options = ap.text.TextExtractionOptions(ap.text.TextExtractionOptions.TextFormattingMode.PURE)
extraction_options.scale_factor = 0.5  # Adjusts text recognition for better column detection
text_absorber.extraction_options = extraction_options

# 提取指定頁面的文本
document.pages.accept(text_absorber)

# 獲取提取的文本
extracted_text = text_absorber.text

# 將提取的文本保存到文件
with open("ExtractTextUsingScaleFactor_out.txt", "w", encoding="utf-8") as file:
    file.write(extracted_text)

解析 PDF 中的文本:替代方法

Aspose.PDF for Python 也提供了一種替代方法來使用 TextDevice 類提取文本。請閱讀更多關於 extracting text from PDF using the TextDevice

如何在 Python 中解析 PDF 中的表格

從 PDF 中解析表格對於數據分析、自動化和報告至關重要。PDF 通常以表格形式包含結構化數據,使用標準文本提取方法可能難以檢索。幸運的是,Aspose.PDF for Python 提供了一種強大的方法,可以高精度地提取表格,並保持其結構和內容。

TableAbsorber 類專門設計用於從 PDF 頁面檢測和提取表格。它處理每個頁面,識別表格,並在保持其結構的同時檢索單獨的行和單元格。以下是使用 Aspose.PDF for Python 從 PDF 文檔中提取表格的步驟。

在 Python 中解析 PDF 中的表格的步驟

  1. 加載包含表格的 PDF 文件使用 Document 類。
  2. 循環遍歷文檔的 pages 集合,以單獨處理每個頁面。
  3. 創建 TableAbsorber 類的實例以檢測和提取表格。
  4. 呼叫 visit() 方法以識別當前頁面上的表格。
  5. 逐一遍歷提取的表格列表,並檢索行和單元格。
  6. 訪問每個單元格的 textfragments 並使用 segments 屬性提取文本。
  7. 保存提取的表格數據以供進一步分析或在控制台中顯示。
# 這個代碼示例顯示了如何在 Python 中從 PDF 文件中提取表格。
import aspose.pdf as ap

# 加載 PDF 文件
document = pdf.Document("sample.pdf")

# 處理所有頁面
for page in document.pages:
    # 初始化 TableAbsorber 物件
    absorber = ap.text.TableAbsorber()
    # 識別當前頁面的表格
    absorber.visit(page)
    # 循環遍歷提取的表格
   for table in absorber.table_list:
        # 遍歷表中的所有行
       for row in table.row_list:
            # 遍歷該行中的所有列
           for cell in row.cell_list:
                # Fetch the text fragments
                text_fragment_collection = cell.text_fragments
                # 遍歷文本片段
               for fragment in text_fragment_collection:
                    # Print the text
                    print(fragment.text)

透過遵循這些步驟,您可以有效地從 PDF 中提取表格,使處理和分析結構化數據變得更加容易。

解析 PDF 元數據:在 Python 中獲取 PDF 文件信息

當處理 PDF 文件時,通常需要檢索元數據,例如作者、創建日期、關鍵字和標題。 Aspose.PDF for Python 通過 Document 類的 Info 屬性輕鬆提供對 DocumentInfo 對象的訪問。這使您可以以編程方式提取基本的文檔屬性。

步驟來解析 PDF 元數據

  1. 使用 Document 類別打開所需的 PDF 檔案。
  2. 使用 info 屬性檢索 DocumentInfo 對象。
  3. 訪問特定細節,例如作者、創建日期、標題、主題和關鍵字。
  4. 列印元資料或將其保存以供進一步處理。

以下 Python 腳本示範如何在 Python 中檢索和顯示 PDF 文件的關鍵詳細信息:

# 這個代碼範例顯示如何在 Python 中提取文件資訊
import aspose.pdf as ap

# 載入 PDF 文件
document = ap.Document("Sample.pdf")

# 檢索文檔信息
doc_info = document.info

# 顯示文檔元數據
print(f"Author: {doc_info.author}")
print(f"Creation Date: {doc_info.creation_date}")
print(f"Keywords: {doc_info.keywords}")
print(f"Modify Date: {doc_info.mod_date}")
print(f"Subject: {doc_info.subject}")
print(f"Title: {doc_info.title}")

從 PDF 文件中使用 Python 解析圖像

我們可以解析 PDF 文件,並有效地檢索嵌入在文件中的圖像。我們可以從特定頁面提取高品質圖像,並將其單獨保存以供進一步使用。

每個 PDF 頁面將其圖像存儲在資源集合中,具體是在 XImage 收集內。要提取圖像,請訪問所需的頁面,使用索引從 Images 收集中檢索圖像,然後保存它。

在 Python 中從 PDF 中解析圖像的步驟

  1. 使用 Document 類載入包含圖像的 PDF 文件。
  2. 檢索您想提取圖像的特定頁面。
  3. 訪問頁面 resourcesImages 集合並指定圖像索引。
  4. 使用流保存提取的圖像。

以下代碼示例顯示如何在 Python 中從 PDF 解析圖像。

# 這段代碼示例顯示如何在 Python 中從 PDF 中提取圖像。
import aspose.pdf as ap

# Open document
document = ap.Document("Sample.pdf")

# 提取特定圖像(第一頁的第一張圖像)
x_image = document.pages[1].resources.images[1]

# 定義輸出圖像路徑
output_image_path = "OutputImage.jpg"

# 保存提取的圖片
with open(output_image_path, "wb") as output_image:
    output_image.write(x_image.to_stream().read())

此方法提供了一種簡單且有效的方式來從 PDF 中提取圖片,同時保持其品質。使用 Aspose.PDF for Python,您可以自動化圖像提取以用於多種應用,例如 文件處理、數據存檔和內容分析。

如何在 Python 中解析 PDF 注釋

PDF中的註解通過添加突出顯示、圖形和便條紙來增強文檔互動。每種類型的註解都有其特定的目的,Aspose.PDF for Python 使其提取以進行分析或處理變得容易。

在 Python 中解析 PDF 的文本註釋

PDF 文件通常包含文本註解,這些註解作為附加在頁面特定位置的評論或備註。當縮合時,這些註解顯示為圖標,展開時會在彈出窗口中顯示文本。每個 PDF 頁面都有自己的註解集合,其中包含所有特定於該頁面的註解。通過利用 Aspose.PDF for Python,您可以有效地從 PDF 文件中提取文本註解。

步驟以解析 PDF 中的文本註解

  1. 使用 Document 類別加載 PDF 文件。
  2. 檢索特定頁面的 annotations 屬性以獲取該頁面上的所有註釋。
  3. 遍歷註釋並過濾那些具有 AnnotationType.TEXT 的註釋。
  4. 檢索相關資訊,例如註解位置(rect),以便進一步處理或顯示。
import aspose.pdf as ap

# 載入 PDF 文件
document = ap.Document("annotations.pdf")

# 遍歷第一頁上的所有註解
for annotation in document.pages[1].annotations:
    if annotation.annotation_type == ap.annotations.AnnotationType.TEXT:
        # 列印註解詳情
        print(f"Title: {annotation.full_name}")
        print(f"Contents: {annotation.contents}")
        print(f"Annotation Rectangle: {annotation.rect}")

藉由遵循這些步驟,您可以有效地從 PDF 文件中提取和處理文本註釋,使用 Python。

探索更多關於 working with PDF Text Annotation in Python 的內容,請訪問官方指南。

在 Python 中解析 PDF 中的高亮文本

在許多情況下,您可能只需要從 PDF 中提取突出顯示的文本,而不是整個內容。無論您是在分析重要筆記、總結關鍵要點,還是自動化文檔處理,Aspose.PDF for Python 使得有效檢索突出顯示的文本變得簡單。

突出註釋標記重要的文本段落,通常用於評論或學習筆記。您可以使用 HighlightAnnotation 類提取突出顯示的文本及其屬性,例如顏色和位置。

我們可以通過遵循前面提到的步驟來解析 PDF 文件中的高亮文本註釋。不過,我們只需要在第 3 步中提到 AnnotationType.HIGHLIGHT

以下範例展示了如何從 PDF 中過濾和提取突出顯示的文本。

import aspose.pdf as ap

# 載入 PDF 文件
document = ap.Document("annotations.pdf")

# 循環遍歷首頁的所有註解
for annotation in document.pages[1].annotations:
    if annotation.annotation_type == ap.annotations.AnnotationType.HIGHLIGHT:
        # 打印註解細節
        print(f"Title: {annotation.full_name}")
        print(f"Annotation Rectangle: {annotation.rect}")

了解更多關於 working with PDF Highlights Annotation in Python 的資訊,請訪問官方指導。

解析 PDF 圖形註解於 Python

圖形註解包括用於強調或解釋的圖形元素,如形狀、圖畫或印章。提取這些註解涉及識別 InkAnnotationStampAnnotation 物件並檢索它們的繪圖路徑或圖像。

要解析 PDF 文件中的行注釋,請遵循之前概述的步驟。唯一需要修改的是在第 3 步中指定 AnnotationType.LINE

以下範例展示如何使用 Python 解析 PDF 中的行註解。

import aspose.pdf as ap

# 載入 PDF 文件
document = ap.Document("annotations.pdf")

# 遍歷首頁上的所有註解
for annotation in document.pages[1].annotations:
    if annotation.annotation_type == ap.annotations.AnnotationType.LINE:
        # 打印註解詳細資訊
        print(f"Annotation Rectangle: {annotation.rect}")

Read more about working with PDF Figures Annotations in Python here.

PDF中的鏈接註釋允許用戶在文檔內無縫導航、打開外部文件或直接從PDF訪問網頁。這些超鏈接增強了互動性,並通過提供快速訪問額外信息來改善用戶體驗。

要從 PDF 中提取鏈接註釋,請按照之前的步驟操作,但在第 3 步中,確保指定 AnnotationType.LINK。這樣可以確保僅檢索到鏈接註釋。

以下代碼範例展示了如何使用 Python 解析 PDF 中的鏈接註解。

import aspose.pdf as ap

# 載入 PDF 文件
document = ap.Document("annotations.pdf")

# 遍歷第一頁上的所有註解
for annotation in document.pages[1].annotations:
    if annotation.annotation_type == ap.annotations.AnnotationType.LINK:
        # 打印註解細節
        print(f"Annotation Rectangle: {annotation.rect}")

藉助 Aspose.PDF for Python,您可以有效地提取和操作連結註解,以適應各種使用情境,例如為文件編索引或提升導航。

Read the complete details on handling Link Annotations in PDFs here.

結論

Aspose.PDF for Python 是最佳的 Python PDF 解析庫,適合需要可靠、高效和功能豐富的解決方案來解析 PDF 的開發人員。無論您需要解析文字、表格、圖像、元數據還是註釋,Aspose.PDF 都提供了所需的工具。

嘗試使用提供的代碼示例,開始在 Python 中解析 PDF 並簡化你的 PDF 解析任務!

如有任何問題或需要進一步協助,請隨時通過我們的 free support forum 聯繫我們。

查看其他資訊