PyPDF2 库,用于在 Python 中处理 PDF 文件
要是你平时工作里碰到过那种一堆 PDF 文件要拆开、合并、加水印的情况,你就知道那味儿有多酸爽。 以前我用过一些桌面工具,点半天鼠标不说,还老卡。后来我发现,Python 的 PyPDF2 库真是个救星。轻量、不依赖 GUI,一行命令就能把几十页的 PDF 拆得干干净净。
安装也特别简单:
pip install PyPDF2
装完之后,导入就行:
from PyPDF2 import PdfReader, PdfWriter
拆分 PDF:就像切西瓜一样简单
举个例子吧,我有个 report.pdf,一共 10 页,但我只想要前 3 页。用 PyPDF2 分分钟搞定:
from PyPDF2 import PdfReader, PdfWriterreader = PdfReader("report.pdf")
writer = PdfWriter()
for i in range(3): # 拆出前3页
writer.add_page(reader.pages[i])
with open("report_part.pdf", "wb") as f:
writer.write(f)
这里的逻辑特别清晰:PdfReader 负责读文件,PdfWriter 负责写文件。reader.pages[i] 就是每一页的对象,你要哪页就取哪页。
合并多个 PDF:像拼积木那样
有时候公司发文档是一堆散页文件,a.pdf、b.pdf、c.pdf。你需要拼成一个完整报告,那 PyPDF2 也能轻松搞定:
from PyPDF2 import PdfMergermerger = PdfMerger()
merger.append("a.pdf")
merger.append("b.pdf")
merger.append("c.pdf")
merger.write("merged.pdf")
merger.close()
这里用的是 PdfMerger,它比 PdfWriter 更方便合并,append() 可以直接加多个文件。 顺序问题自己控制,哪一个先加就哪一个在前面。
提取文本:别再手动复制粘贴了
有一次我需要从一个 50 页的 PDF 合同里提取关键条款,手动复制真要崩溃。 后来用 PyPDF2 的 extract_text(),一分钟不到搞定:
from PyPDF2 import PdfReaderreader = PdfReader("contract.pdf")
text = ""
for page in reader.pages:
text += page.extract_text()
print(text[:500]) # 打印前500个字符看看效果
不过有一点要注意:PyPDF2 的文本提取依赖 PDF 的编码结构, 有些扫描件(其实是图片)提不出文字,这时候就得用 pytesseract 这种 OCR 库配合用了。
加个水印:稍微高级一点的玩法
比如公司要求所有导出的 PDF 文件都得带上水印,PyPDF2 也能直接搞:
from PyPDF2 import PdfReader, PdfWriterreader = PdfReader("source.pdf")
watermark = PdfReader("watermark.pdf")
writer = PdfWriter()
for page in reader.pages:
page.merge_page(watermark.pages[0]) # 合并水印
writer.add_page(page)
with open("output_with_watermark.pdf", "wb") as f:
writer.write(f)
原理就是把两页叠在一起。 如果你的水印文件是透明背景的 PDF 效果最好, 否则就会挡住正文,看起来像盖了个实心章。
加密和解密:保护文件的小技巧
有时候发 PDF 文件不想别人随便打开,也可以加个密码:
from PyPDF2 import PdfReader, PdfWriterreader = PdfReader("confidential.pdf")
writer = PdfWriter()
for page in reader.pages:
writer.add_page(page)
writer.encrypt("mypassword")
with open("confidential_locked.pdf", "wb") as f:
writer.write(f)
加密后的文件用 mypassword 才能打开。 如果要解密,只要这样:
reader = PdfReader("confidential_locked.pdf")
reader.decrypt("mypassword")
小结
PyPDF2 虽然不是什么特别大的库,但真的是实用得一塌糊涂。 日常工作里,它能帮你处理几乎所有 PDF 相关的需求: 合并、拆分、加水印、提文本、加密、解密。
不过要注意的是,它主要适合“结构化 PDF”, 如果是那种纯扫描件、表格类文档,可能就得配合其他库一起用了。 但总的来说,轻量又简单,能救你于“鼠标点击地狱”之中。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领