1. 项目背景与核心需求
批量给PDF文件添加文字水印是文档处理中的常见需求,特别是在企业文档管理、版权保护和教育资料分发等场景。传统手动添加方式效率低下,当需要处理上百份文件时,这个问题尤为突出。
这个工具的核心价值在于实现三个关键功能:一是批量处理多个PDF文件;二是灵活控制水印位置(顶部/页眉或底部/页脚);三是保持原始文档格式不受影响。我在处理公司内部技术文档时,就经常需要给不同版本的规范书添加"内部传阅"水印,手动操作每次都要花半小时,直到开发了这个自动化方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术方案选型与工具准备
2.1 主流PDF处理库对比
Python生态中有多个PDF处理库可选,经过实测比较:
- PyPDF2:最轻量但功能有限,水印定位精度不足
- pdfrw:读取性能好但修改功能弱
- ReportLab:适合生成PDF但不适合修改
- PyMuPDF:功能全面且性能优异,最终选择
安装PyMuPDF只需一行命令:
bash复制pip install pymupdf
2.2 水印位置参数设计
水印位置通过页面坐标系确定,关键参数包括:
- 顶部水印:y坐标设为页面高度-20
- 底部水印:y坐标设为20
- 水平居中:x坐标=(页面宽度-文字宽度)/2
文字宽度需要通过字体和字号计算:
python复制text_width = fitz.get_text_length(text, fontname="helv", fontsize=11)
3. 核心实现代码解析
3.1 批量处理框架
python复制import fitz # PyMuPDF
import os
def batch_watermark(input_dir, output_dir, text, position):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
for filename in os.listdir(input_dir):
if filename.lower().endswith('.pdf'):
input_path = os.path.j
