1. 项目背景与核心需求
在日常文档管理中,PDF水印功能是个高频需求。无论是合同防伪、内部传阅标记,还是版权声明,批量添加水印都能显著提升文档管理的专业性和安全性。最近我在处理一批招标文件时,需要为300多份PDF统一添加"机密"水印和项目编号,手动操作显然不现实,于是开发了这个自动化解决方案。
这个工具的核心价值在于:
- 支持批量处理文件夹内所有PDF文件
- 可自定义水印文字内容、字体、大小、颜色和透明度
- 灵活控制水印位置(页眉/页脚/任意坐标)
- 保持原始PDF的文本可选中性和搜索功能
- 处理速度达到每分钟约50份文件(实测数据)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术方案选型
2.1 主流PDF处理库对比
经过对Python生态中主流PDF库的实测比较:
| 库名称 | 水印功能 | 批量处理 | 字体支持 | 性能 | 备注 |
|---|---|---|---|---|---|
| PyPDF2 | 基础 | 支持 | 有限 | 快 | 合并拆分优秀 |
| pdfrw | 无 | 支持 | 无 | 一般 | 适合简单修改 |
| ReportLab | 强大 | 需编码 | 丰富 | 较慢 | 生成PDF更专业 |
| pdfium | 中等 | 支持 | 丰富 | 快 | 需要二进制依赖 |
| PyMuPDF | 专业 | 支持 | 丰富 | 最快 | 最终选择方案 |
选择PyMuPDF(fitz)的原因:
- 唯一支持直接修改现有PDF而不重写全部内容
- 提供精确的文本定位功能(毫米/英寸/点单位)
- 保留原始文档的所有属性(书签、链接等)
- 实测处理速度比其他方案快3-5倍
2.2 水印位置计算原理
关键坐标计算公式:
code复制页眉位置:x = (pag
