CodeGym /Adesua ahorow /Python SELF TW /合併多個PDF檔案為一個文件

合併多個PDF檔案為一個文件

Python SELF TW
等級 43 , 課堂 3
開放

1. 使用 PyPDF2 合併 PDF

為什麼要合併PDF檔案

首先,讓我們來了解為什麼需要合併PDF檔案。正所謂,「一個PDF好過十個!」。在工作環境中,你可能有報告、研究結果、技術文檔或簡報,這些都分開存為不同的檔案。一直在不同檔案間切換不僅麻煩,還有可能漏掉關鍵內容。透過將所有文件合併為一個文檔,你可以更方便地處理數據,並能創建一種更結構化的方法來分析和分發這些資訊。

此外,合併PDF檔案對於後續的檔案歸檔、生成統一的最終報告或合併多版本文件以跟踪更改也非常有用。總而言之,這功能用途非常多!

使用 PyPDF2 合併 PDF 的基礎

首先讓我們看看如何使用 PyPDF2 進行合併。我們將撰寫一個腳本,將多個PDF檔案合併為一個檔案。當然,程式碼會附上說明文字,讓你能理解每個步驟。

Python

import PyPDF2

# 創建 PdfMerger 物件
pdf_merger = PyPDF2.PdfMerger()

# 我們想要合併的PDF文件清單
pdf_files = ['document1.pdf', 'document2.pdf', 'document3.pdf']

# 將每個檔案添加到 PdfMerger 物件
for file in pdf_files:
    pdf_merger.append(file)

# 將結果保存為新的PDF檔案
output_filename = 'merged_document.pdf'
with open(output_filename, 'wb') as output_file:
    pdf_merger.write(output_file)

# 關閉 PdfMerger 物件釋放資源
pdf_merger.close()

print(f"合併的PDF已創建: {output_filename}")

合併文檔的順序及結構

現在我們學會了如何合併PDF文件,接下來要考慮頁面的順序。請記住,PyPDF2 會按照你傳入 .append() 方法的文件順序添加頁面。因此,清單 pdf_files 的順序會直接影響最終文檔中的頁面順序。

2. 合併單個頁面

如果你不想合併整個文件,而是從多個文件中提取頁面來組成最終的文件,那麼你應該使用 PdfWriter 類,而不是 PdfMerger。例如:

Python

import PyPDF2

# 需要合併的PDF檔案清單
pdf_files = ["file1.pdf", "file2.pdf", "file3.pdf"]

# 創建 PdfWriter 物件來寫入合併的PDF
pdf_writer = PyPDF2.PdfWriter()

# 遍歷每個PDF檔案
for pdf_file in pdf_files:
    with open(pdf_file, "rb") as file:
        pdf_reader = PyPDF2.PdfReader(file)
        # 將每頁加入 PdfWriter
        for page_num in range(len(pdf_reader.pages)):
            # 這裡可以跳過你不想加入的頁面
            page = pdf_reader.pages[page_num]
            pdf_writer.add_page(page)

# 保存合併的PDF
with open("merged_document.pdf", "wb") as output_file:
    pdf_writer.write(output_file)

這段程式碼的工作原理?

  1. 創建檔案清單: 清單 pdf_files 包含需要合併的PDF文檔的路徑。
  2. 初始化 PdfWriter: pdf_writer 用於創建新的PDF文件。
  3. 遍歷每個文件: 每個PDF文件以讀取模式打開。
  4. 添加頁面: 所有頁面依次使用 add_page() 方法加入到 pdf_writer
  5. 保存結果: 在所有頁面添加完成後,新的PDF文件寫入至 merged_document.pdf

3. 新文檔的樣式化

添加書籤和目錄

如果合併後的文件過於龐大且難以導航,那麼書籤就可以派上用場了!PyPDF2 支援添加基本書籤來幫助文件導覽。讓我們為每個合併的文件添加書籤。

Python

pdf_merger = PyPDF2.PdfMerger()

# 用於書籤的頁面索引
page_offset = 0

for file in pdf_files:
    # 讀取當前文件
    pdf_reader = PyPDF2.PdfReader(file)

    # 將文件添加到 PdfMerger
    pdf_merger.append(file)

    # 為文件名稱添加書籤
    pdf_merger.add_bookmark(file, page_offset)

    # 更新頁面偏移量
    page_offset += len(pdf_reader.pages)

with open(output_filename, 'wb') as output_file:
    pdf_merger.write(output_file)

pdf_merger.close()

這麼做可以幫助你更輕鬆地掌控文件,而不會在PDF海洋中迷失。

更新合併文件的元數據

合併後,可以為文檔添加或更新元數據,例如作者、標題和關鍵字。

Python

import PyPDF2

pdf_files = ["file1.pdf", "file2.pdf"]
pdf_writer = PyPDF2.PdfWriter()

for pdf_file in pdf_files:
    with open(pdf_file, "rb") as file:
        pdf_reader = PyPDF2.PdfReader(file)
        for page_num in range(len(pdf_reader.pages)):
            page = pdf_reader.pages[page_num]
            pdf_writer.add_page(page)

# 添加元數據
pdf_writer.add_metadata({
    "/Title": "合併文檔",
    "/Author": "Ivan Ivanov",
    "/Subject": "銷售報告"
})

# 保存合併文件
with open("merged_with_metadata.pdf", "wb") as output_file:
    pdf_writer.write(output_file)

這段程式碼會添加元數據,幫助識別和結構化文檔。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION