1. 將 PDF 文件分割為頁面
使用 PyPDF2 分割 PDF 文件的基本操作
PyPDF2 提供 PdfReader 類用於打開 PDF 文件和閱讀頁面,還有 PdfWriter 類用於將頁面寫入新的 PDF 文件。要將文檔分割為單獨頁面,可以使用 add_page() 在 PdfWriter 中保存所需頁面到單獨的文件。
將每頁 PDF 保存為單獨的文件
此代碼將文檔分割,為原始文件的每個頁面創建一個單獨的 PDF 文件。
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.pdf、page_2.pdf 等。
2. 提取頁面範圍
有時必須保存某一特定頁面範圍,例如從第 1 頁到第 5 頁。這可以在循環中指定特定頁面來實現。
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. 保存多個頁面範圍
如果需要提取多個頁面範圍並將其保存到單獨的文件,可以編寫一個函數,該函數接受開始和結束頁碼。
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.pdf 和 section_2.pdf 中。
4. 批量處理 PDF 文件
自動分割文件夾中所有 PDF 文件的頁面
如果需要將文件夾中的每個 PDF 文件分割為單獨的頁面,可以編寫腳本自動處理每個文件。
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 分割為部分可以大大節省時間和精力。
此類技術還可以用於準備學習資料,提取技術報告中的重要部分等等。真正的魔法在於這些日常任務的自動化有多麼簡單!
GO TO FULL VERSION