在日常工作中,PDF 文档处理是不可避免的任务,比如合并多个PDF、提取页面或从中提取文字和图像。今天,我们将使用 Python 构建一个功能强大的 PDF 文档处理助手,让这些操作变得轻而易举。
环境准备
我们需要借助以下 Python 库来处理 PDF 文件:
PyPDF2:处理 PDF 文件的常用库(支持合并、拆分、加密等操作)。
pdfplumber:从 PDF 中提取文字和图片。
reportlab:生成和编辑 PDF 文档。
安装这些库:
pip install PyPDF2 pdfplumber reportlab
功能一:拆分 PDF 文件
拆分 PDF 文件常用于从大文档中提取特定页面。以下代码演示了如何实现:
from PyPDF2 import PdfReader, PdfWriter
def split_pdf(input_file, output_file, start_page, end_page):
reader = PdfReader(input_file)
writer = PdfWriter()
for page_num in range(start_page - 1, end_page):
writer.add_page(reader.pages[page_num])
with open(output_file, "wb") as output_pdf:
writer.write(output_pdf)
# 示例调用
split_pdf("sample.pdf", "output.pdf", 1, 3)
效果:将sample.pdf的第 1 页到第 3 页提取并保存为output.pdf。
功能二:合并多个 PDF
当需要将多个 PDF 文件合并成一个文档时,这段代码会派上用场:
from PyPDF2 import PdfMerger
def merge_pdfs(pdf_list, output_file):
merger = PdfMerger()
for pdf in pdf_list:
merger.append(pdf)
with open(output_file, "wb") as output_pdf:
merger.write(output_pdf)
# 示例调用
merge_pdfs(["file1.pdf", "file2.pdf", "file3.pdf"], "merged.pdf")
效果:将file1.pdf、file2.pdf和file3.pdf合并为merged.pdf。
功能三:从 PDF 中提取文本
提取 PDF 文件的文字信息对数据分析或内容检查非常有用。
import pdfplumber
def extract_text_from_pdf(pdf_file):
with pdfplumber.open(pdf_file) as pdf:
for page in pdf.pages:
print(page.extract_text())
# 示例调用
extract_text_from_pdf("sample.pdf")
效果:逐页输出sample.pdf中的文字内容。
功能四:提取 PDF 中的图片
从 PDF 提取图片可以用于图像存档或数据标注任务。
import pdfplumber
def extract_images_from_pdf(pdf_file, output_folder):
with pdfplumber.open(pdf_file) as pdf:
for page_num, page in enumerate(pdf.pages, start=1):
for img_num, img in enumerate(page.images, start=1):
image = pdf.pages[page_num - 1].images[img_num - 1]
with open(f"{output_folder}/page{page_num}_img{img_num}.jpg", "wb") as img_file:
img_file.write(image)
# 示例调用
extract_images_from_pdf("sample.pdf", "images")
功能五:生成带水印的 PDF
为 PDF 文档添加水印是确保版权保护的重要步骤。
from PyPDF2 import PdfReader, PdfWriter
def add_watermark(input_file, watermark_file, output_file):
reader = PdfReader(input_file)
watermark_reader = PdfReader(watermark_file)
watermark_page = watermark_reader.pages[0]
writer = PdfWriter()
for page in reader.pages:
page.merge_page(watermark_page)
writer.add_page(page)
with open(output_file, "wb") as output_pdf:
writer.write(output_pdf)
# 示例调用
add_watermark("sample.pdf", "watermark.pdf", "watermarked.pdf")
效果:为sample.pdf添加水印,生成watermarked.pdf。
功能六:自动生成 PDF 报告
借助reportlab,我们可以快速生成专业的 PDF 报告。
from reportlab.pdfgen import canvas
def generate_pdf_report(output_file, title, content):
c = canvas.Canvas(output_file)
c.setFont("Helvetica-Bold", 20)
c.drawString(100, 750, title)
c.setFont("Helvetica", 12)
for i, line in enumerate(content, start=1):
c.drawString(100, 750 - i * 20, line)
c.save()
# 示例调用
generate_pdf_report("report.pdf", "Python PDF 报告", ["这是第一行内容", "这是第二行内容"])
效果:生成一份名为report.pdf的 PDF 文档,包含标题和内容。
总结
通过上述功能模块,你的 PDF 助手已经具备了解决大部分 PDF 处理需求的能力。以下是扩展方向:
交互式界面:借助 Tkinter 或 PyQt 构建用户界面。
批处理功能:支持文件夹级操作。
在线服务:用 Flask 或 FastAPI 构建 Web 应用,实现在线处理。
现在,动手试试吧!构建属于你的专属 PDF 助手!
领取专属 10元无门槛券
私享最新 技术干货