pypdf 完整指南:合并、拆分、水印等 6 个常用操作一次讲清
pypdf 完整指南:合并、拆分、水印等 6 个常用操作一次讲清
【免费下载链接】pypdfA pure-python PDF library capable of splitting, merging, cropping, and transforming the pages of PDF files项目地址: https://gitcode.com/GitHub_Trending/py/pypdf
pypdf 是一个纯 Python 编写的 PDF 处理库,帮你用代码完成 PDF 的拆分、合并、裁剪、页面变换、加密与文本提取。无需系统级依赖,pip 一条命令即可安装,适合脚本开发者和批量文档处理场景。
📌 30 秒了解 pypdf
pypdf 定位很直接:用 Python 代码读写 PDF 文件。
- 合并多份 PDF,或把一份 PDF 拆出指定页面
- 裁剪、旋转、缩放页面,调整页面尺寸
- 给文档加水印、印章、图形和文本注释
- 提取 PDF 中的文本与元数据,支持加解密
⚙️ 它适合哪些场景
- 自动化办公:把一批报告按顺序合并成一份 PDF
- 文档处理:给合同批量盖"已审核"印章或加水印
- 数据整理:从 PDF 里批量抽取文字,导入数据库或做检索
- 格式调整:旋转方向错误的页面、裁剪多余的页边
🔧 安装与环境准备
安装
pip install pypdf验证是否装好:
python -c "import pypdf; print(pypdf.__version__)"兼容性
| 操作系统 | Python 版本 | 支持状态 |
|---|---|---|
| Windows / macOS / Linux | 3.9 | ✓ 支持 |
| Windows / macOS / Linux | 3.10 ~ 3.13 | ✓ 支持 |
| Windows / macOS / Linux | 3.14 | ✓ 支持 |
| 任意平台 | < 3.9 | ✗ 不支持 |
pypdf 与操作系统无关,只要 Python 版本达标即可运行。
可选扩展
pip install "pypdf[crypto]":AES 加密/解密 PDFpip install "pypdf[image]":提取、嵌入图片pip install "pypdf[fonts]":字体处理pip install "pypdf[rtl_text]":阿拉伯语等右起文字pip install "pypdf[full]":以上全部
🔍 功能速览
如何一步合并多份 PDF
用PdfWriter依次调用append追加文件,最后write输出即可,只合并前三页也可以传pages=(0, 3)。
提示:合并不同尺寸的页面时,可用merge方法指定插入位置并自动扩展画布。
如何从 PDF 中拆分指定页面
用PdfReader读入原文件,add_page挑选要保留的页码,写出新文件就是拆分。想保留哪些页,就加哪些页。
如何裁剪、旋转和缩放 PDF 页面
页面提供rotate方法调整角度,修改mediabox坐标即可裁剪,缩放则调整页面尺寸参数。
注意:裁剪只是调整可视区域,被裁掉的内容仍留在文件里,别当保密手段用。
如何给 PDF 添加水印或印章
用merge_page把水印页合并到每一页上,over=False水印垫底,over=True印章置顶,配合Transformation还能旋转缩放。
印章适合"已审核"这类标识,水印适合版权保护,两者只差一个参数。
如何提取 PDF 文本
reader.pages[0].extract_text()直接返回文字;传extraction_mode="layout"可尽量还原原始排版。
💡 进阶操作
- 加密与解密:
writer.encrypt("密码")给文档设访问密码,PdfReader打开加密文件时传入password参数。AES-256 加解密需要安装 crypto 扩展包。 - 填写 PDF 表单:读取
page.get_annots()找到表单域,赋值后保存,可用于批量填写发票、申请单。 - 处理图形与文本注释:
pypdf支持高亮、下划线、自由文本、矩形等注释类型,创建和读取都可以,适合做批注工具。
✅ 实战场景
场景一:文档归档(合并 + 水印)收到一份主文档和几份附件,先按顺序append合并成一份 PDF,再用merge_page(over=False)给每页垫上水印,最后写出归档文件。顺序上先合并再加水印,避免对多份文件重复加水印。
场景二:批量盖章后拆分分发(印章 + 拆分)先给合同每页用merge_page(over=True)盖"已盖章"印章,保存后再按页拆分,把每位申请人对应的页分别导出。印章用over=True保证压在正文之上不被遮挡。
⚠️ 常见坑
- 现象:照旧教程写
PdfMerger报不存在。原因:PdfMerger已弃用,功能并入PdfWriter。解决:改用PdfWriter().append(...)完成合并。 - 现象:处理大文件报
RecursionError。原因:Python 递归深度不够。解决:sys.setrecursionlimit(sys.getrecursionlimit() * 5)。 - 现象:扫描件提取文本为空。原因:图片型 PDF 没有文本层,pypdf 不做 OCR。解决:先过 OCR 工具再提取。
- 现象:水印显示在文字上面。原因:
merge_page默认over=True。解决:水印改为over=False,印章才用True。 - 现象:输出大量 warning 日志。原因:很多 PDF 不完全符合规范,pypdf 会记录警告。解决:属正常现象,需要精确控制可传
strict=True改为报错。
📎 小贴士
- 发布代码时用
print(pypdf.__version__)确认并锁定版本,跨版本 API 有差异。 - 批量处理时给每个文件单独写脚本或循环处理,方便定位坏文件。
- 读入可疑文件先试
strict=False,容忍格式瑕疵。 - 需要提取的图片或字体时,按需安装对应扩展包,不要一开始就装 full。
- 输出文件先写临时文件确认无误再覆盖原文件,防止误操作丢失源文档。
到这里,pypdf 的常用能力就都过了一遍:合并、拆分、裁剪变换、水印印章、文本提取,再配上加解密和表单填写覆盖绝大多数需求。下一步建议从 docs/user/ 下的 merging-pdfs.md、add-watermark.md 和 cropping-and-transforming.md 三个文档看完整示例,也可以试试 docs/user/extract-text.md 里的文本提取写法。
【免费下载链接】pypdfA pure-python PDF library capable of splitting, merging, cropping, and transforming the pages of PDF files项目地址: https://gitcode.com/GitHub_Trending/py/pypdf
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
