Python操作Pdf文件
基础教学 1 min read

Python操作Pdf文件

Blog Author

Python操作PDF文件:深入教学与应用指南


一、前言:为什么需要用Python操作PDF?

PDF 是办公与文档传输中最常用的格式之一,它的可移植性强、排版固定、兼容性好,广泛应用于简历、合同、报告、证书、发票等场景。在实际开发和数据处理任务中,我们常常需要自动:

  • 批量提取PDF中的文本内容;
  • 合并、拆分、旋转或加密PDF;
  • 加水印、加页码、生成新PDF报告。

Python 提供了多个强大库,例如 PyPDF2reportlab,帮助我们轻松实现 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,批量生成薪资单或成绩单。
  • 实现:根据奇偶页添加不同样式的水印。

九、总结

掌握 PyPDF2reportlab,就像掌握了自动化PDF工厂的大门钥匙。无论是办公、开发还是数据批处理,Python都能替你:

  • 提速重复劳动;
  • 自动化个性化文档生成;
  • 保证规范性、安全性与高效性。

📌 下一步建议:可进一步学习如 pdfplumber(处理表格)、fitz(PyMuPDF,提取图像)、pikepdf(PDF修复)等库,构建更完整的PDF处理工具链。

如需我补充“提取图片/表格内容”、“PDF拆分合并”等专题,请告诉我。