最後更新: 2025年1月29日

標題 - 用 Python 處理 PDF 文件

在本文中,我們將指導您如何使用 Python 處理 PDF 文件。為此,我們將使用 pypdf 庫。

使用 pypdf 庫,我們將演示如何在 Python 中執行以下操作:

  • 從 PDF 中提取文本
  • 旋轉 PDF 頁面
  • 合併多個 PDF
  • 將 PDF 拆分為單獨文件
  • 向 PDF 頁面添加水印

注意:本文涵蓋了許多有價值的細節,因此隨時跳至您最感興趣的部分!內容組織便於導航,以便您可以快速專注於最相關的內容。

插圖 - 用 Python 處理 PDF 文件

範例代碼

您可以從以下鏈接下載本文中使用的所有範例代碼。它包含代碼、輸入文件和輸出文件。

安裝 pypdf

要安裝 pypdf,只需在終端或命令提示符中運行以下命令:

pip install pypdf

注意:上述命令對大小寫敏感。

1. 使用 Python 從 PDF 文件中提取文本

代碼解釋

1. 創建 PDF 讀取器對象

reader = PdfReader(pdf_file)
  • PdfReader(pdf_file) 將 PDF 文件加載到 讀取器對象中。
  • 這個對象允許訪問頁面及其內容。

2. 遍歷頁面

for page_number, page in enumerate(reader.pages, start=1):
  • reader.pages 返回 PDF 中頁面的列表。
  • enumerate(..., start=1) 為頁面分配從 1 開始的頁碼

3. 列印提取的文本

    print(f"Page {page_number}:")
    print(page.extract_text())
    print("-" * 50)  # 分隔線以提高可讀性
  • page.extract_text() 從當前頁面提取文本內容。
  • 腳本列印提取的文本以及頁碼
  • "-" * 50 列印分隔線(--------------------------------------------------),以提高可讀性。

代碼使用的輸入 PDF 文件

代碼的輸出

2. 使用 Python 旋轉 PDF 頁面

代碼解釋

代碼基本上將第一頁旋轉90° 順時針,並保存修改後的 PDF 而不影響其他頁面。

1. 導入所需的類

from pypdf import PdfReader, PdfWriter
  • PdfReader: 用於讀取輸入 PDF。
  • PdfWriter: 用於創建具有更改的新 PDF。

2. 定義輸入和輸出文件路徑

input_pdf = "pdf-to-rotate/input.pdf"
output_pdf = "pdf-to-rotate/rotated_output.pdf"
  • 腳本從 input.pdf 讀取並將修改後的文件保存為 rotated_output.pdf

3. 讀取 PDF 並創建寫入器對象

reader = PdfReader(input_pdf)
writer = PdfWriter()
  • reader 加載現有的 PDF。
  • writer 用於存儲被修改的頁面。

4. 將第一頁旋轉 90 度

page = reader.pages[0]
page.rotate(90)  # 順時針旋轉 90 度
writer.add_page(page)
  • 提取第 1 頁,將其旋轉90 度,並將其添加到新 PDF。

5. 添加其餘頁面而不進行更改

for i in range(1, len(reader.pages)):
    writer.add_page(reader.pages[i])
  • 遍歷其餘頁面並按原樣添加它們。

6. 保存新 PDF

with open(output_pdf, "wb") as file:
    writer.write(file)
  • 以寫入二進制模式打開 rotated_output.pdf 並保存新 PDF。

7. 列印確認

print(f"Rotated page saved to {output_pdf}")
  • 顯示成功消息。

代碼中使用的輸入 PDF 及其旋轉輸出

截圖 使用 Python 旋轉 PDF 頁面的截屏

3. 使用 Python 合併 PDF 文件

此 Python 腳本演示如何使用 PyPDF 庫將目錄中的多個 PDF 文件合併為一個 PDF。

代碼解釋

  • 此腳本自動合併指定目錄 (pdfs-to-merge) 中的所有 PDF 文件,生成單個輸出文件 (merged_output.pdf)。
  • 它確保輸出目錄存在,並按文件的排序順序添加每個 PDF 的頁面。
  • 最終的合併文件將輸出到 output-dir 子目錄中。

代碼解析

1. 導入庫

import os
from pypdf import PdfReader, PdfWriter
  • os: 用於與文件系統交互,例如讀取目錄和管理文件路徑。
  • PdfReader: 用於讀取 PDF 文件的內容。
  • PdfWriter: 用於創建和寫入新 PDF 文件。

2. 定義目錄和輸出文件

directory = "pdfs-to-merge"
output_file = "output-dir/merged_output.pdf"
  • directory: 指定存儲 PDF 文件的文件夾。
  • output_file: 定義合併 PDF 的輸出路徑和名稱。

3. 如果不存在則創建輸出目錄

os.makedirs(os.path.join(directory, "output-dir"), exist_ok=True)
  • 確保輸出目錄存在,如果不存在則創建它。

4. 創建 PdfWriter 對象

writer = PdfWriter()
  • writer 用於收集和組合來自 PDF 的所有頁面。

5. 遍歷目錄中的所有 PDF 文件

for file_name in sorted(os.listdir(directory)):
    if file_name.endswith(".pdf"):
        file_path = os.path.join(directory, file_name)
        print(f"Adding: {file_name}")
  • 此循環遍歷指定目錄中的所有文件,檢查具有 .pdf 擴展名的文件。使用 sorted() 以字母順序處理它們。

6. 讀取每個 PDF 並將頁面附加到寫入器

reader = PdfReader(file_path)
writer.append(reader)
  • 對於每個 PDF,PdfReader 讀取文件,然後該 PDF 的所有頁面都附加到 writer

7. 寫入合併的 PDF 到輸出文件

output_path = os.path.join(directory, output_file)
with open(output_path, "wb") as output_pdf:
    writer.write(output_pdf)
  • 收集所有頁面後,writer.write() 將合併的 PDF 寫入指定的輸出路徑。

8. 列印確認

print(f"Merged PDF saved as: {output_path}")
  • 列印成功消息確認保存的合併 PDF 的位置。

代碼中使用的輸入 PDF 文件和合併輸出 PDF

4. 使用 Python 拆分 PDF

代碼解釋

上面的 Python 腳本使用 PyPDF 庫將 PDF 拆分為單獨的頁面。它首先確保輸出目錄存在,然後讀取輸入 PDF 文件。腳本遍歷每頁,創建一個新的 PdfWriter 對象,並將每頁保存為單獨的 PDF 文件。輸出文件按順序命名(例如,page_1.pdf, page_2.pdf)並存儲在 output-dir 文件夾中。最後,它為每個創建的文件列印確認消息並通知過程完成。

代碼中使用的輸入 PDF 和拆分的輸出文件

5. 使用 Python 向 PDF 添加水印

您可以使用 PyPDF 庫通過將水印 PDF 叠加到現有 PDF 上來添加水印。確保水印 PDF 僅具有一頁,以便其正確應用於主 PDF 的每一頁。

代碼解釋

上述 Python 腳本讀取輸入 PDF,提取一頁的水印 PDF,將水印覆蓋在輸入 PDF 的每一頁上,並保存最終的加水印 PDF。

代碼解析

以下是每個部分的簡要解釋:

1. 導入必要的類

from pypdf import PdfReader, PdfWriter
  • PdfReader 用於讀取現有的 PDF。
  • PdfWriter 用於創建和寫入新 PDF。

2. 定義文件路徑

input_pdf = "pdf-to-watermark/input.pdf"
watermark_pdf = "pdf-to-watermark/watermark.pdf"
output_pdf = "pdf-to-watermark/output_with_watermark.pdf"
  • input_pdf: 將添加水印的原始 PDF。
  • watermark_pdf: 作為水印的獨立的單頁 PDF。
  • output_pdf: 將包含加水印的頁面的輸出文件。

3. 讀取 PDF

reader = PdfReader(input_pdf)
watermark = PdfReader(watermark_pdf)
  • reader: 讀取輸入的 PDF。
  • watermark: 讀取水印 PDF。

4. 創建寫入器對象

writer = PdfWriter()
  • 這將用於創建最終的加水印 PDF。

5. 提取水印頁

watermark_page = watermark.pages[0]
  • 假定水印 PDF 只有一頁,將用於疊加到所有頁面上。

6. 遍歷輸入 PDF 頁面並合併水印

for page in reader.pages:
    # 合併水印與當前頁面
    page.merge_page(watermark_page)
    
    # 將合併後的頁面添加到寫入器
    writer.add_page(page)
  • 遍歷 input_pdf 的每一頁。
  • merge_page(watermark_page) 在當前頁面上疊加水印。
  • 將修改後的頁面添加到 writer

7. 保存加水印的 PDF

with open(output_pdf, "wb") as output_file:
    writer.write(output_file)
  • 將修改後的頁面寫入到一個新的 PDF 文件中。

8. 列印確認

print(f"Watermarked PDF saved as: {output_pdf}")
  • 列印輸出文件的路徑以作為確認。

輸入的 PDF、水印 PDF 和輸出的加水印 PDF

截圖 使用 Python 添加水印的 PDF 截屏

結論

在本指南中,我們探索了 Python 中的基本 PDF 操作,包括提取文本、旋轉頁面、合併、拆分和添加水印。藉助這些技能,您現在可以構建自己的 PDF 管理器並高效地自動化各種 PDF 任務。