news 2026/9/17 4:03:26

3 分钟跑通 pypdf:免费纯 Python 的 PDF 合并、拆分、水印与文本提取指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3 分钟跑通 pypdf:免费纯 Python 的 PDF 合并、拆分、水印与文本提取指南

3 分钟跑通 pypdf:免费纯 Python 的 PDF 合并、拆分、水印与文本提取指南

【免费下载链接】pypdfA pure-python PDF library capable of splitting, merging, cropping, and transforming the pages of PDF files项目地址: https://gitcode.com/GitHub_Trending/py/pypdf

你有多少次为"合并几个 PDF"这件事卡住过?用鼠标在软件里一页页拖,拖错顺序重来;或者把公司文件传到在线工具上,心里发毛,万一传出去呢?再或者花几百块买一套 PDF 套件,结果 90% 的功能你只用了"合并"这一个按钮。

今天要介绍的主角是pypdf:一个纯 Python 写的开源 PDF 库,合并、拆分、裁剪、旋转、加水印、提取文本、加密解密,全部能在几行代码里搞定。它不需要图形界面、不上传任何文件,还能直接写进你的脚本和自动化任务里。安装上只有一条pip install pypdf,核心功能零第三方依赖,几乎不会遇到依赖冲突。

上图为 pypdf 为文档逐页叠加半透明水印的实际效果——这正是后文要带你用十几行代码复现出来的成果。

它凭什么替代老办法

先说清楚你换工具能省下什么。pypdf 是 BSD-3-Clause 许可的开源项目,完全免费、纯 Python、本地运行:

维度pypdf付费 PDF 软件在线转换工具
成本免费开源订阅制,年年掏钱免费但有文件大小限制
隐私全程本地处理,文件不出电脑本地处理文件要上传到别人服务器
自动化可写脚本,批量上百个文件手动点鼠标单文件逐个上传
可定制性完全可编程,任意改造有限预设选项无定制能力
依赖纯 Python,轻量大型软件依赖网络

一句话:以前花钱、手点、上传的事,现在免费、自动、本地搞定。

一条命令跑通最小闭环

你此刻最大的顾虑大概是"装不上"或"版本不兼容"。先花 10 秒确认 Python 版本(pypdf 要求 Python 3.9 或更高):

python --version

然后一条命令装好,就这么简单:

pip install pypdf

装完立刻验证一下,跑通最小闭环——打印版本号、读一下 PDF 页数。这里拿仓库自带的样例 PDF 测试,不用自己找文件:

import pypdf print(pypdf.__version__) # 打印你刚装好的版本号 reader = pypdf.PdfReader("sample-files/09-simple-annotations/annotated.pdf") print(len(reader.pages)) # 打印页数

看到版本号和一个大于 0 的页数,恭喜,已经跑通了!环境、依赖、Python 版本全部没问题,后面所有任务都建立在它上面。

真实任务走一遍:给合同批量加保密水印

假设你要给一份多页合同的每一页都盖上"CONFIDENTIAL"水印。老办法是打开软件逐页插入图片;用 pypdf,核心就是merge_page一个方法——它把水印叠印到页面上(不是把两页接起来),水印默认在文字底下,不影响阅读。

from pypdf import PdfReader, PdfWriter reader = PdfReader("合同.pdf") watermark = PdfReader("水印模板.pdf").pages[0] # 水印模板只需取第一页 writer = PdfWriter() for page in reader.pages: page.merge_page(watermark) # 把水印叠到当前页 writer.add_page(page) with open("合同-水印版.pdf", "wb") as f: writer.write(f)

运行完你会得到一份新 PDF:每一页都盖着半透明水印,原文字清晰可读。想调整水印的位置、大小、旋转角度,看 docs/user/add-watermark.md 就行,那里还有用Transformation控制缩放位移的完整示例。

按需选装依赖:解锁哪些能力

pypdf 的设计哲学是"核心零依赖、高级能力按需装"。你不需要一次全装,对照下面的能力清单挑就行(完整列表见 docs/user/installation.md):

安装命令解锁能力什么时候用
pip install pypdf[image]图像提取(装 Pillow)要从 PDF 里抠出图片
pip install pypdf[crypto]AES 加密解密(装 cryptography)给 PDF 设密码、读加密 PDF;只用到 RC4 时核心包就够
pip install pypdf[fonts]字体工具(装 fonttools)需要精细处理字体
pip install pypdf[rtl_text]阿拉伯语等右起文字排版处理 RTL 语言文档
pip install pypdf[full]上面全部一次装齐不确定要什么时的一站式方案

生产环境建议只装实际用到的那一项,项目体积和潜在攻击面都更小。

上生产前必看

三个最容易踩的坑,一次说清。

1. 文件不合规怎么办。PDF 规范有一千多页,现实中的文件经常"不守规矩"。PdfReader有个strict参数:strict=True(默认)遇到不规范直接抛异常,strict=False则尽力抢救并打警告。调试时建议用严格模式暴露问题,上线时可按需放宽。详见 docs/user/robustness.md。

2. 错误要精准捕获。pypdf 的错误类是一套有层级的家族,别一律抓Exception

try: reader = PdfReader("待处理.pdf") except pypdf.errors.PdfReadError as e: print(f"读取失败: {e}") # 空文件、密码错误、流损坏都会落到这里

WrongPasswordErrorEmptyFileError这些都是它的子类,需要分别处理时按家族往下抓即可。

3. 版本与升级。pypdf 4.x 起每个版本都兼容所有受支持的 Python(3.9 到 3.14,见pyproject.toml),保持向后兼容。建议:新项目直接用最新版,老项目定期pip install --upgrade pypdf,既能拿到性能改进也能及时打上安全修复。

收尾与行动清单

回顾一下你刚走过的路:一条命令装好 pypdf,一次验证跑通环境,十几行代码给合同批量盖完水印——全程免费、本地、可重复。

接下来你可以马上做的几件事:

  1. 把今天的水印脚本改成循环,处理整个文件夹的 PDF
  2. 从一份长 PDF 里提取文本,走一遍 docs/user/extract-text.md
  3. 试一次writer.append()把几个 PDF 合并成一个
  4. 需要密码保护时,装pypdf[crypto]并参考 docs/user/encryption-decryption.md
  5. 遇到怪文件,先查 docs/user/robustness.md,再用pypdf.__version__记录版本信息去提问

告别逐页拖拽,拥抱 Python 自动化——pypdf 已经就位,剩下的交给你。🚀

【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 4:02:34

Self-Harness:让Agent控制框架自动进化,告别人肉调优

1. 重新认识 Agent Harness:不是“绳子”,是“驾驶舱”1.1 从“裸奔的 Agent”说起:为什么需要 Harness先说一个我自己的切身体会。最早做 Agent 原型的时候,我的想法特别单纯:把大模型的 API 接上,丢给它几…

作者头像 李华
网站建设 2026/9/17 4:00:55

OFDM信道估计:DFT与LS算法对比及Matlab仿真分析

1. 为什么OFDM信道估计里总拿DFT和LS对比做无线通信物理层仿真的朋友,对OFDM大概率不陌生。4G、5G NR、WiFi 6这些主流系统,核心调制方案都离不开OFDM。OFDM把宽带信道切成若干个窄带子载波,每个子载波上经历近似平坦的衰落,这大大…

作者头像 李华
网站建设 2026/9/17 4:00:09

2026年全栈前端:React 19 RSC、边缘函数与AI Agent实战解析

2026 年聊全栈前端,绕不开一个变化:前端的"全栈"不再是指我会写几个 Node 接口,而是指我能在同一套技术栈里,把渲染、数据、AI 编排全部串起来。React 19 把 RSC(服务端组件)和 Server Functions…

作者头像 李华
网站建设 2026/9/17 3:59:58

LVGL按键事件处理全链路解析:从硬件消抖到回调执行

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华