Python操作Pdf文件
Python操作PDF文件:深入教学与应用指南
一、前言:为什么需要用Python操作PDF?
PDF 是办公与文档传输中最常用的格式之一,它的可移植性强、排版固定、兼容性好,广泛应用于简历、合同、报告、证书、发票等场景。在实际开发和数据处理任务中,我们常常需要自动:
- 批量提取PDF中的文本内容;
- 合并、拆分、旋转或加密PDF;
- 加水印、加页码、生成新PDF报告。
Python 提供了多个强大库,例如 PyPDF2
和 reportlab
,帮助我们轻松实现 PDF 自动化处理任务。
二、从PDF中提取文本:内容抓取自动化
使用 PyPDF2 提取纯文本
安装库
pip install PyPDF2
核心用法
import PyPDF2
reader = PyPDF2.PdfReader("test.pdf")
for page in reader.pages:
print(page.extract_text())
教学说明
.extract_text()
方法适用于基于“文本层”的PDF。- 对于图像型或扫描版PDF(没有文字层),此方法提取不到内容。
典型应用场景
- 合同内容归档;
- 发票信息提取;
- 论文段落抓取。
三、PDF页面旋转与操作:结构调整技巧
reader = PyPDF2.PdfReader("XGBoost.pdf")
writer = PyPDF2.PdfWriter()
for i, page in enumerate(reader.pages):
new_page = page.rotate(90 if i % 2 else -90)
writer.add_page(new_page)
with open("rotated_output.pdf", "wb") as f:
writer.write(f)
教学说明
.rotate()
方法接受角度参数(+90/-90);- 可用于修复扫描时旋转方向错误的文件。
应用场景
- 双面扫描PDF整理;
- 批量文档格式统一处理。
四、PDF加密:信息安全控制
reader = PyPDF2.PdfReader("XGBoost.pdf")
writer = PyPDF2.PdfWriter()
for page in reader.pages:
writer.add_page(page)
writer.encrypt("mypassword123")
with open("encrypted.pdf", "wb") as f:
writer.write(f)
教学说明
.encrypt()
方法可以设置访问密码;- 提供了简单的文档保护机制。
应用场景
- 合同保密传输;
- 面试题防篡改;
- 财务文件加密归档。
五、批量添加水印:PDF叠加操作
reader = PyPDF2.PdfReader("XGBoost.pdf")
watermark = PyPDF2.PdfReader("watermark.pdf").pages[0]
writer = PyPDF2.PdfWriter()
for page in reader.pages:
page.merge_page(watermark)
writer.add_page(page)
with open("watermarked.pdf", "wb") as f:
writer.write(f)
教学说明
.merge_page()
实现内容叠加;- 多页可动态切换不同水印(如奇偶页不同)。
应用场景
- 公司LOGO叠加;
- 机密标识添加;
- 批阅时加"草稿"或"样本"标识。
六、创建PDF文件:从零生成排版文档
安装 reportlab
pip install reportlab
示例:文本、图像和字体混合生成PDF
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
pdf_canvas = canvas.Canvas("output.pdf", pagesize=A4)
width, height = A4
# 注册自定义字体
pdfmetrics.registerFont(TTFont("MyFont", "resources/fonts/青呱石头体.ttf"))
# 绘制图片
pdf_canvas.drawImage("resources/guido.jpg", 50, height - 300, width=150, height=200)
# 绘制中文文本
pdf_canvas.setFont("MyFont", 36)
pdf_canvas.drawString(100, 400, "你好,世界!")
# 英文文本旋转绘制
pdf_canvas.setFont("Helvetica", 30)
pdf_canvas.rotate(18)
pdf_canvas.drawString(200, 250, "Hello, World!")
# 显示页并保存
pdf_canvas.showPage()
pdf_canvas.save()
教学说明
- 支持自定义字体、颜色、图像、坐标控制;
drawString
可以控制位置;rotate
支持旋转排版。
应用场景
- 自定义证书生成;
- 自动日报/周报;
- 生成含图文内容的发票或说明书。
七、使用场景与最佳实践对照表
任务类型 | 推荐工具库 | 使用技巧/注意事项 |
---|---|---|
提取纯文本 | PyPDF2 |
提取失败多因PDF为图像型,无文字层 |
页面旋转/重排 | PyPDF2 |
使用 .rotate() ,注意奇偶页处理方式 |
加密PDF | PyPDF2 |
仅为基本加密,安全性有限 |
添加水印 | PyPDF2 |
预制水印PDF,使用 .merge_page() |
批量文档生成 | reportlab |
使用坐标绘制、注册字体、循环内容生成 |
中文字体支持 | reportlab |
使用 .ttf 字体,注册后使用 |
八、学习建议与练习任务
新手练习
- 安装
PyPDF2
,尝试提取一个中文简历中的文本。 - 下载一个报告 PDF,尝试逆时针旋转每一页并保存。
- 给一份电子发票添加“公司副本”水印。
进阶任务
- 创建一个支持图像+表格的自动化日报PDF。
- 使用 Excel+PDF,批量生成薪资单或成绩单。
- 实现:根据奇偶页添加不同样式的水印。
九、总结
掌握 PyPDF2
和 reportlab
,就像掌握了自动化PDF工厂的大门钥匙。无论是办公、开发还是数据批处理,Python都能替你:
- 提速重复劳动;
- 自动化个性化文档生成;
- 保证规范性、安全性与高效性。
📌 下一步建议:可进一步学习如 pdfplumber
(处理表格)、fitz
(PyMuPDF,提取图像)、pikepdf
(PDF修复)等库,构建更完整的PDF处理工具链。
如需我补充“提取图片/表格内容”、“PDF拆分合并”等专题,请告诉我。