CodeGym /課程 /Python SELF TW /分割 PDF 文件頁面以保存單獨的部分

分割 PDF 文件頁面以保存單獨的部分

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

1. 將 PDF 文件分割為頁面

使用 PyPDF2 分割 PDF 文件的基本操作

PyPDF2 提供 PdfReader 類用於打開 PDF 文件和閱讀頁面,還有 PdfWriter 類用於將頁面寫入新的 PDF 文件。要將文檔分割為單獨頁面,可以使用 add_page()PdfWriter 中保存所需頁面到單獨的文件。

將每頁 PDF 保存為單獨的文件

此代碼將文檔分割,為原始文件的每個頁面創建一個單獨的 PDF 文件。

Python

import PyPDF2

# 打開 PDF 文件
with open("sample.pdf", "rb") as pdf_file:
    pdf_reader = PyPDF2.PdfReader(pdf_file)
    
    # 遍歷每頁
    for page_num in range(len(pdf_reader.pages)):
        pdf_writer = PyPDF2.PdfWriter()
        
        # 提取頁面並添加到新的 PDF 中
        page = pdf_reader.pages[page_num]
        pdf_writer.add_page(page)
        
        # 將當前頁面保存為單獨的 PDF 文件
        output_filename = f"page_{page_num + 1}.pdf"
        with open(output_filename, "wb") as output_file:
            pdf_writer.write(output_file)

print("每頁都已保存為單獨的文件。")

在此示例中,原文檔的每頁都保存為單獨的文件,例如 page_1.pdfpage_2.pdf 等。

2. 提取頁面範圍

有時必須保存某一特定頁面範圍,例如從第 1 頁到第 5 頁。這可以在循環中指定特定頁面來實現。

Python

import PyPDF2

with open("sample.pdf", "rb") as pdf_file:
    pdf_reader = PyPDF2.PdfReader(pdf_file)
    pdf_writer = PyPDF2.PdfWriter()
    
    # 定義頁面範圍,例如從第 1 頁到第 5 頁
    start_page = 1
    end_page = 5
    
    for page_num in range(start_page - 1, end_page):  # 頁面編號從 0 開始
        page = pdf_reader.pages[page_num]
        pdf_writer.add_page(page)

    # 將頁面範圍保存為一個新的 PDF
    with open("pages_1_to_5.pdf", "wb") as output_file:
        pdf_writer.write(output_file)

print("頁面範圍已成功保存。")

此代碼提取第 1 到第 5 頁並將其保存到文件 pages_1_to_5.pdf

3. 保存多個頁面範圍

如果需要提取多個頁面範圍並將其保存到單獨的文件,可以編寫一個函數,該函數接受開始和結束頁碼。

Python

import PyPDF2

def save_page_range(input_pdf, output_pdf, start_page, end_page):
    with open(input_pdf, "rb") as pdf_file:
        pdf_reader = PyPDF2.PdfReader(pdf_file)
        pdf_writer = PyPDF2.PdfWriter()
        
        for page_num in range(start_page - 1, end_page):
            page = pdf_reader.pages[page_num]
            pdf_writer.add_page(page)

        with open(output_pdf, "wb") as output_file:
            pdf_writer.write(output_file)
    
    print(f"頁面 {start_page}–{end_page} 已保存到 {output_pdf}")

# 使用函數提取不同的範圍
save_page_range("sample.pdf", "section_1.pdf", 1, 3)
save_page_range("sample.pdf", "section_2.pdf", 4, 6)

此代碼創建兩個函數,將第 1 到第 3 頁和第 4 到第 6 頁保存到 section_1.pdfsection_2.pdf 中。

4. 批量處理 PDF 文件

自動分割文件夾中所有 PDF 文件的頁面

如果需要將文件夾中的每個 PDF 文件分割為單獨的頁面,可以編寫腳本自動處理每個文件。

Python

import PyPDF2
import os

# PDF 文件夾的路徑
folder_path = "pdf_folder"

# 自動分割文件夾中所有 PDF
for filename in os.listdir(folder_path):
    if filename.endswith(".pdf"):
        file_path = os.path.join(folder_path, filename)
        with open(file_path, "rb") as pdf_file:
            pdf_reader = PyPDF2.PdfReader(pdf_file)
            
            # 將文件分割為單獨的頁面
            for page_num in range(len(pdf_reader.pages)):
                pdf_writer = PyPDF2.PdfWriter()
                page = pdf_reader.pages[page_num]
                pdf_writer.add_page(page)
                
                # 創建輸出文件名
                output_filename = f"{filename[:-4]}_page_{page_num + 1}.pdf"
                output_path = os.path.join(folder_path, output_filename)
                
                # 保存頁面
                with open(output_path, "wb") as output_file:
                    pdf_writer.write(output_file)

print("文件夾中每個 PDF 的所有頁面已成功保存。")

此腳本會自動處理文件夾 pdf_folder 中的每個 PDF 文件,並保存每頁為單獨的 PDF,文件名為 <文件名>_page_<頁碼>.pdf

5. 什麼時候需要分割 PDF 文件?

就像一個偉大的開發者曾說的,我們在經歷漫長的編碼時常常問自己:為什麼?分割 PDF 文件在不同情況下都有需求:

  • 提取關鍵頁面: 只分享必要的頁面,不需要將整個《戰爭與和平》發送給同事。
  • 創建精選合輯: 從不同文件中保存重要章節,用於學習或工作需求。
  • 存檔: 一頁一頁地保存重要數據存檔,避免在不相關的頁面中丟失重要信息。

這時候我們的英雄 PyPDF2 就派上用場啦,讓你的生活變得更簡單!

6. 遇到的小困難以及如何避免

處理 PDF 文件時,你可能會遇到一些小問題。例如,PyPDF2 中的頁碼從零開始,記得在指定頁面時考慮到這點。沒有什麼比提取了不需要的頁面更糟糕的了!

此外,在處理打開和關閉文件時,確保所有 close() 都正確調用。一個未關閉的書本可能會帶來麻煩,特別是如果它是一本 Oracle 的教程。

在現實生活中的應用

使用這些方法不僅對於處理個人文檔十分有用。例如,假如你在一家法律公司工作,需要快速準備某個大案的特定部分以用於法庭,將 PDF 分割為部分可以大大節省時間和精力。

此類技術還可以用於準備學習資料,提取技術報告中的重要部分等等。真正的魔法在於這些日常任務的自動化有多麼簡單!

1
問卷/小測驗
使用 PyPDF2 讀取 PDF 文件,等級 43,課堂 4
未開放
使用 PyPDF2 讀取 PDF 文件
使用 PyPDF2 讀取 PDF 文件
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION