Python技术迷

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, PdfWriter

reader = 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 PdfMerger

merger = 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 PdfReader

reader = 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, PdfWriter

reader = 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, PdfWriter

reader = 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 全部免费领