Python 自动化处理 PDF 文件

Python 操作 PDF 文件

PDF (Portable Document Format) 是职场中最通用的文档格式之一。它的核心优势在于“所见即所得”,即在任何设备上打开样式都保持一致。在 Daoman Python AI 的自动化流程中,我们经常需要处理 PDF 的提取、合并、加密以及报告生成。

1. 从 PDF 中提取文本

提取 PDF 文本最常用的库是 PyPDF2。它擅长处理文档结构(合并、分割、加密),虽然在处理复杂排版或图片文字(OCR)时有局限,但对于标准文本型 PDF 非常高效。

安装指令

pip install PyPDF2

基础提取代码

import PyPDF2

# 创建阅读器对象
reader = PyPDF2.PdfReader('test.pdf')

# 遍历每一页并提取文本
for page in reader.pages:
    # extract_text() 返回提取到的字符串
    content = page.extract_text()
    print(content)

进阶提示:如果遇到无法提取的“扫描件”PDF,或者中文乱码严重,建议尝试 pdfminer.six(侧重布局分析)或 PyMuPDF(性能极强)。


2. 页面操作:旋转、加密与合并

PyPDF2 提供了 PdfWriter 对象,用于生成或修改 PDF 文件。

2.1 旋转页面

你可以根据页码实现奇偶页不同的旋转角度,这在纠正扫描方向时非常有用。

writer = PyPDF2.PdfWriter()
reader = PyPDF2.PdfReader('manual.pdf')

for i, page in enumerate(reader.pages):
    # rotate 方法接受角度,正数为顺时针
    if i % 2 == 0:
        page.rotate(90) 
    writer.add_page(page)

with open('rotated.pdf', 'wb') as f:
    writer.write(f)

2.2 文件加密

保护敏感数据(如薪资单、合同)时,批量加密是 Python 的拿手好戏。

writer.encrypt('your_password') # 设置访问密码

3. 批量添加水印:页面叠加技术

利用 page.merge_page() 方法,可以将一个 PDF 页面的内容“压”到另一个页面上。这通常用于给文档批量打上“内部资料”或公司 Logo 的水印。

reader_target = PyPDF2.PdfReader('source.pdf')
reader_mark = PyPDF2.PdfReader('watermark.pdf')
writer = PyPDF2.PdfWriter()

# 获取水印页(通常是第一页)
watermark_page = reader_mark.pages[0]

for page in reader_target.pages:
    # 将水印叠加到原始页上
    page.merge_page(watermark_page)
    writer.add_page(page)

with open('output_with_watermark.pdf', 'wb') as f:
    writer.write(f)

4. 从零创建 PDF 文档

如果你需要根据数据动态生成精美的 PDF 报告(包含图形、自定义字体),reportlab 是工业级的解决方案。

安装指令

pip install reportlab

绘图与中文字体支持

from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

# 1. 创建画布
c = canvas.Canvas("report.pdf")

# 2. 注册中文字体(需确保本地路径有该字体文件)
pdfmetrics.registerFont(TTFont('SimSun', 'SimSun.ttf'))

# 3. 绘制内容
c.setFont('SimSun', 20)
c.drawString(100, 700, "道满科技:年度 AI 趋势报告")

# 4. 绘制线条或图形
c.line(100, 680, 500, 680)

# 5. 保存
c.save()

5. 总结

  • PyPDF2:适合做“手术”,如剪切、合并、旋转、加密和简单的文本读取。
  • reportlab:适合做“创作”,像画板一样从零构建复杂的 PDF 报表。
  • 办公建议:在处理合同时,建议将 Excel 的汇总数据通过 Python 填入 Word 模板(见上一章),最后再转换或输出为 PDF,以确保不可篡改性。