Day22:PDF处理神器!用Python合并/拆分/加水印,从此告别Adobe会员
想合并几个PDF还要开会员?Python让你免费搞定所有PDF操作!
一、先看这个真实场景
张老师期末要干这些事:
-
全班30个学生交来的电子版作业(每个学生一个PDF文件) -
要合并成一个总文件,方便存档 -
有些文件太大,要拆分成几个小文件 -
还要给每页加上“仅供存档”的水印 -
最后转成Word让领导审阅
以前他:
-
打开百度搜“PDF合并免费版” → 下个软件 → 试用版只能合3个文件 ✓ -
开会员?一个月30块,划不来 ✓ -
用在线工具 → 上传 → 等待 → 下载 → 有广告 → 怕泄露信息 ✓
一整天没了!
二、Python的“PDF魔法”三件套
今天教你用Python操作PDF,三行代码搞定上面所有事:
import PyPDF2# 1. 合并多个PDF合并器 = PyPDF2.PdfMerger()for 文件名 in ['作业1.pdf', '作业2.pdf', '作业3.pdf']: 合并器.append(文件名)合并器.write('全班作业合集.pdf')# 2. 拆分PDF(取前3页)with open('全班作业合集.pdf', 'rb') as f: 阅读器 = PyPDF2.PdfReader(f) 写入器 = PyPDF2.PdfWriter()for 页 in range(3): # 取前3页 写入器.add_page(阅读器.pages[页]) with open('前3页.pdf', 'wb') as 输出: 写入器.write(输出)# 3. 加水印(需要先做个水印PDF)from PyPDF2 import PdfReader, PdfWriterwith open('全班作业合集.pdf', 'rb') as 源文件, open('水印.pdf', 'rb') as 水印文件: 源PDF = PdfReader(源文件) 水印PDF = PdfReader(水印文件) 水印页 = 水印PDF.pages[0] # 取水印第一页 写入器 = PdfWriter()for 页 in 源PDF.pages: 页.merge_page(水印页) # 把水印盖上去 写入器.add_page(页) with open('带水印的作业合集.pdf', 'wb') as 输出: 写入器.write(输出)print("✅ 搞定!PDF处理完成!")
看懂了吗?
-
PdfMerger:合并多个PDF文件 -
PdfReader + PdfWriter:读取和写入PDF,实现拆分 -
merge_page():把水印盖到每一页上 -
全程免费,没有广告,不泄露隐私!
三、分解“魔法”:每步在干什么?
3.1 第一步:安装需要的库
pip install PyPDF2
如果还要转Word,需要额外装 pdf2docx:
pip install pdf2docx
3.2 合并PDF详解
合并器 = PyPDF2.PdfMerger()for 文件名 in ['作业1.pdf', '作业2.pdf', '作业3.pdf']: 合并器.append(文件名)合并器.write('全班作业合集.pdf')
-
PdfMerger():创建一个合并器对象 -
.append(文件名):把一个PDF文件加到合并列表 -
.write(新文件名):保存合并后的文件
注意:文件名可以用 os.listdir() 自动获取,不用手动写列表。
3.3 拆分PDF详解
with open('全班作业合集.pdf', 'rb') as f: 阅读器 = PyPDF2.PdfReader(f) 写入器 = PyPDF2.PdfWriter()for 页 in range(3): 写入器.add_page(阅读器.pages[页]) with open('前3页.pdf', 'wb') as 输出: 写入器.write(输出)
-
PdfReader(f):读取PDF文件 -
len(阅读器.pages):获取总页数 -
阅读器.pages[页]:获取第几页(从0开始) -
PdfWriter():创建写入器 -
写入器.add_page(页对象):添加一页到新文件 -
最后保存
3.4 加水印详解
先准备水印PDF:用Word做个“仅供存档”或“机密”的文档,另存为PDF。
with open('源文件.pdf', 'rb') as 源文件, open('水印.pdf', 'rb') as 水印文件: 源PDF = PdfReader(源文件) 水印PDF = PdfReader(水印文件) 水印页 = 水印PDF.pages[0] 写入器 = PdfWriter()for 页 in 源PDF.pages: 页.merge_page(水印页) 写入器.add_page(页) with open('带水印.pdf', 'wb') as 输出: 写入器.write(输出)
-
merge_page(水印页):把水印页叠加到当前页上(水印透明的话能看到原内容) -
注意水印最好做成半透明的,或者放在角落,不遮挡正文
四、自己动手试试!
4.1 第一步:创建几个测试PDF
如果你手头没有PDF,可以用Word随便打几个字,另存为 测试1.pdf、测试2.pdf、测试3.pdf。
4.2 第二步:合并它们
import PyPDF2import os文件夹 = '.'# 当前文件夹所有PDF = [f for f in os.listdir(文件夹) if f.endswith('.pdf') and f != '合并结果.pdf']合并器 = PyPDF2.PdfMerger()for 文件名 in 所有PDF: 合并器.append(文件名)合并器.write('合并结果.pdf')print(f"✅ 已合并 {len(所有PDF)} 个文件到 合并结果.pdf")
4.3 第三步:制作水印
用Word写一行字“机密”,调成浅灰色、半透明、旋转45度,保存为 水印.pdf。
4.4 第四步:给合并后的文件加水印
with open('合并结果.pdf', 'rb') as 源文件, open('水印.pdf', 'rb') as 水印文件: 源PDF = PyPDF2.PdfReader(源文件) 水印PDF = PyPDF2.PdfReader(水印文件) 水印页 = 水印PDF.pages[0] 写入器 = PyPDF2.PdfWriter()for 页 in 源PDF.pages: 页.merge_page(水印页) 写入器.add_page(页) with open('带水印_合并结果.pdf', 'wb') as 输出: 写入器.write(输出)print("✅ 水印添加完成!")
五、办公实战1:批量处理学生作业(按学号排序)
import PyPDF2import osimport redef 提取学号(文件名):"""从文件名中提取数字(假设学号是纯数字)""" match = re.search(r'(\d+)', 文件名)return int(match.group(1)) if match else 0# 假设作业都在“学生作业”文件夹里作业文件夹 = '学生作业'所有作业 = [f for f in os.listdir(作业文件夹) if f.endswith('.pdf')]# 按学号排序所有作业.sort(key=提取学号)合并器 = PyPDF2.PdfMerger()for 文件名 in 所有作业: 文件路径 = os.path.join(作业文件夹, 文件名) 合并器.append(文件路径)print(f"已添加:{文件名}")合并器.write('全班作业_按学号排序.pdf')print(f"✅ 共合并 {len(所有作业)} 份作业!")
六、办公实战2:PDF转Word(方便领导修改)
from pdf2docx import Converter# 单个文件转换cv = Converter('全班作业合集.pdf')cv.convert('全班作业合集.docx', start=0, end=None)cv.close()print("✅ PDF转Word完成!")
批量转换文件夹里所有PDF:
import osfrom pdf2docx import Converterpdf文件夹 = 'PDF文件'输出文件夹 = 'Word文件'os.makedirs(输出文件夹, exist_ok=True)for 文件名 in os.listdir(pdf文件夹):if 文件名.endswith('.pdf'): pdf路径 = os.path.join(pdf文件夹, 文件名) docx路径 = os.path.join(输出文件夹, 文件名.replace('.pdf', '.docx')) cv = Converter(pdf路径) cv.convert(docx_path, start=0, end=None) cv.close()print(f"已转换:{文件名}")print("✅ 所有PDF转Word完成!")
七、进阶技巧:提取PDF中的文字(比如学生姓名)
import PyPDF2def 提取文字(pdf路径): with open(pdf路径, 'rb') as f: 阅读器 = PyPDF2.PdfReader(f) 文字 = ''for 页 in 阅读器.pages: 文字 += 页.extract_text()return 文字# 试试内容 = 提取文字('张三的作业.pdf')print(内容)
可以结合正则表达式提取学号、姓名等信息,自动归档。
八、重点总结:今天你学会了什么?
✅ 核心技能
-
PdfMerger – 合并多个PDF -
PdfReader + PdfWriter – 拆分PDF、提取页 -
merge_page() – 叠加水印 -
pdf2docx – PDF转Word -
extract_text() – 提取文字内容
✅ 办公应用场景
-
合并学生作业 → 一个PDF全班交齐 -
拆分长文档 → 只发需要的部分 -
添加保密水印 → 防止外泄 -
PDF转Word → 方便领导修改
✅ 效率对比
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
九、今日挑战:动手做!
任务1:批量拆分PDF(每个文件分成每10页一个小文件)
# 提示:循环 range(0, 总页数, 10),每次取10页保存为新文件
任务2:给文件夹里所有PDF加上“保密”水印(保留原文件)
# 生成带水印的新文件,文件名加“_带水印”后缀
任务3:提取所有PDF的第一页,合并成一个“封面合集”
# 用于快速浏览所有文档的首页
十、明日预告
明天学终极自动化:搭建你的个人办公机器人!
-
如何用Python监控文件夹,有新文件自动处理? -
如何把多个脚本组合成一个完整系统? -
如何用GUI界面让不懂代码的同事也能用?
真正的“办公自动化大师”,从明天开始!
回复「Py-Day」获取今日挑战题解及完整代码
评论区作业:晒出你处理的PDF,或者分享你遇到的坑!👇
夜雨聆风
