PyPDF2 庫中 PDF 文檔處理的九個基本操作指南
PyPDF2是一個非常實用的Python庫,用于讀取、分割、合并、裁剪以及執行其他PDF文檔操作。它非常適合自動化處理PDF文件的任務。本文將詳細介紹使用PyPDF2進行PDF處理的九個基本操作,并通過實際代碼示例幫助你快速上手。
安裝PyPDF2
首先,你需要安裝PyPDF2庫。打開命令行工具,輸入以下命令:
pip install pypdf2
安裝完成后,你可以通過以下方式導入PyPDF2庫:
from PyPDF2 import PdfReader, PdfWriter
讀取PDF文件
讀取PDF文件是任何PDF處理任務的第一步。這里有一個簡單的示例:
# 導入必要的庫
from PyPDF2 import PdfReader
# 創建PdfReader對象
reader = PdfReader("example.pdf")
# 獲取PDF的頁數
num_pages = len(reader.pages)
print(f"Number of pages: {num_pages}")
# 獲取第一頁的內容
first_page = reader.pages[0]
text = first_page.extract_text()
print(f"First page text:\n{text}")
這段代碼首先創建了一個PdfReader對象來讀取名為example.pdf的文件,然后獲取了該PDF的總頁數并打印出來。接著,它提取了第一頁的內容并將其打印出來。
分割PDF文件
有時我們需要將一個大的PDF文件拆分成多個小文件。下面是一個如何實現這一目標的例子:
from PyPDF2 import PdfReader, PdfWriter
def split_pdf(input_pdf, output_prefix):
# 創建PdfReader對象
reader = PdfReader(input_pdf)
# 遍歷每一頁
for i in range(len(reader.pages)):
writer = PdfWriter()
# 添加當前頁
writer.add_page(reader.pages[i])
# 寫入新的PDF文件
with open(f"{output_prefix}_{i + 1}.pdf", "wb") as f:
writer.write(f)
split_pdf("large_document.pdf", "part")
這段代碼定義了一個函數split_pdf,它接受兩個參數:一個是輸入的PDF文件名,另一個是輸出文件的前綴。對于輸入PDF中的每一頁,它都會創建一個新的PDF文件并保存下來。
合并多個PDF文件
合并多個PDF文件也非常簡單。下面是一個示例:
from PyPDF2 import PdfReader, PdfWriter
def merge_pdfs(inputs, output):
writer = PdfWriter()
for input_pdf in inputs:
reader = PdfReader(input_pdf)
for page in reader.pages:
writer.add_page(page)
with open(output, "wb") as f:
writer.write(f)
merge_pdfs(["doc1.pdf", "doc2.pdf"], "merged.pdf")
這個函數接收一個包含多個PDF文件名的列表作為輸入,并將它們合并成一個PDF文件。每添加一頁時,它都會調用add_page方法將頁面添加到最終的PDF文檔中。
旋轉PDF頁面
如果你需要調整PDF文件中某些頁面的方向,可以使用rotate_clockwise或rotate_counter_clockwise方法輕松實現:
from PyPDF2 import PdfReader, PdfWriter
def rotate_pages(input_pdf, output_pdf, angle):
reader = PdfReader(input_pdf)
writer = PdfWriter()
for page in reader.pages:
if angle == 90:
page.rotate_clockwise(90)
elif angle == -90:
page.rotate_counter_clockwise(90)
else:
raise ValueError("Angle must be 90 or -90.")
writer.add_page(page)
with open(output_pdf, "wb") as f:
writer.write(f)
rotate_pages("example.pdf", "rotated.pdf", 90)
此函數根據指定的角度(90度或-90度)旋轉PDF中的所有頁面,并將結果保存到新的PDF文件中。
加密PDF文件
加密PDF文件可以保護文件內容不被未經授權的人訪問。下面是一個簡單的加密示例:
from PyPDF2 import PdfReader, PdfWriter
def encrypt_pdf(input_pdf, output_pdf, password):
reader = PdfReader(input_pdf)
writer = PdfWriter()
for page in reader.pages:
writer.add_page(page)
# 設置密碼
writer.encrypt(password)
# 寫入加密后的PDF文件
with open(output_pdf, "wb") as f:
writer.write(f)
encrypt_pdf("example.pdf", "encrypted.pdf", "secret")
這段代碼定義了一個函數encrypt_pdf,它接受三個參數:輸入的PDF文件名、輸出的PDF文件名和密碼。它遍歷輸入PDF中的每一頁并將其添加到writer對象中,然后使用encrypt方法設置密碼,并將加密后的PDF文件寫入到新的文件中。
解密PDF文件
如果要讀取已加密的PDF文件,需要先對其進行解密。下面是一個簡單的解密示例:
from PyPDF2 import PdfReader, PdfWriter
def decrypt_pdf(input_pdf, output_pdf, password):
reader = PdfReader(input_pdf)
# 檢查是否已加密
if reader.is_encrypted:
try:
reader.decrypt(password)
except Exception as e:
print(f"Error: {e}")
return
writer = PdfWriter()
for page in reader.pages:
writer.add_page(page)
# 寫入解密后的PDF文件
with open(output_pdf, "wb") as f:
writer.write(f)
decrypt_pdf("encrypted.pdf", "decrypted.pdf", "secret")
這段代碼定義了一個函數decrypt_pdf,它接受三個參數:輸入的PDF文件名、輸出的PDF文件名和密碼。它首先檢查輸入PDF是否已加密,如果是,則嘗試使用提供的密碼進行解密。如果解密成功,它會將PDF文件中的每一頁添加到writer對象中,并將解密后的PDF文件寫入到新的文件中。
添加水印
在PDF文件中添加水印可以幫助標識文檔的所有權或提醒讀者注意版權問題。下面是一個簡單的添加水印示例:
from PyPDF2 import PdfReader, PdfWriter
def add_watermark(input_pdf, watermark_pdf, output_pdf):
reader = PdfReader(input_pdf)
watermark_reader = PdfReader(watermark_pdf)
writer = PdfWriter()
# 獲取水印頁面
watermark_page = watermark_reader.pages[0]
for page in reader.pages:
page.merge_page(watermark_page)
writer.add_page(page)
# 寫入帶有水印的PDF文件
with open(output_pdf, "wb") as f:
writer.write(f)
add_watermark("example.pdf", "watermark.pdf", "watermarked.pdf")
這段代碼定義了一個函數add_watermark,它接受三個參數:輸入的PDF文件名、水印PDF文件名和輸出的PDF文件名。它首先創建一個watermark_page對象來表示水印頁面,然后遍歷輸入PDF中的每一頁,并使用merge_page方法將水印頁面添加到每一頁中。最后,將帶有水印的PDF文件寫入到新的文件中。
實戰案例:批量處理PDF文件
假設你有一個文件夾中包含多個PDF文件,需要對這些文件進行批量處理,例如添加水印、加密或解密。下面是一個簡單的批量處理示例:
import os
from PyPDF2 import PdfReader, PdfWriter
def batch_process_pdf(input_folder, watermark_pdf, output_folder, password=None):
# 創建輸出文件夾
os.makedirs(output_folder, exist_ok=True)
# 獲取文件夾中的所有PDF文件
pdf_files = [f for f in os.listdir(input_folder) if f.endswith(".pdf")]
for pdf_file in pdf_files:
input_pdf_path = os.path.join(input_folder, pdf_file)
output_pdf_path = os.path.join(output_folder, pdf_file)
# 創建PdfReader對象
reader = PdfReader(input_pdf_path)
writer = PdfWriter()
# 添加水印
if watermark_pdf is not None:
watermark_reader = PdfReader(watermark_pdf)
watermark_page = watermark_reader.pages[0]
for page in reader.pages:
page.merge_page(watermark_page)
writer.add_page(page)
# 加密或解密
if password is not None:
writer.encrypt(password)
elif reader.is_encrypted:
reader.decrypt(password)
for page in reader.pages:
writer.add_page(page)
# 寫入新的PDF文件
with open(output_pdf_path, "wb") as f:
writer.write(f)
batch_process_pdf("input_folder", "watermark.pdf", "output_folder", "secret")
這段代碼定義了一個函數batch_process_pdf,它接受四個參數:輸入文件夾路徑、水印PDF文件名、輸出文件夾路徑和密碼。它首先創建輸出文件夾,并獲取輸入文件夾中的所有PDF文件。
然后,對于每個PDF文件,它執行以下操作:
- 創建一個PdfReader對象來讀取輸入PDF文件。
- 如果提供了水印PDF文件,則添加水印。
- 如果提供了密碼,則進行加密或解密。
- 將處理后的PDF文件寫入到輸出文件夾中。
本文介紹了使用PyPDF2庫進行PDF文件讀取、分割、合并、旋轉、加密、解密及添加水印的基本操作。通過實際代碼示例展示了如何利用PyPDF2自動化處理PDF文件,從而提高工作效率。希望這些示例能夠幫助你更好地理解和應用PyPDF2庫。