"我要把这10份合同合成一个文件发给客户,WPS每次只能合并3个,还得充会员……"
我说你早找我啊,这事儿Python五行代码就完事了。
她面对的情况大概是这样的:
📁 合同文件夹/
├── 合同-甲方.pdf (3页)
├── 合同-乙方.pdf (5页)
├── 补充协议1.pdf (2页)
├── 补充协议2.pdf (1页)
└── ... 还有6个
目标:按文件名顺序合成一个 完整合同.pdf,页码连续,打开就能看。
核心代码就这么多:
from PyPDF2 import PdfMergerfrom pathlib import Pathmerger = PdfMerger()for pdf in sorted(Path("你的文件夹路径").glob("*.pdf")):merger.append(str(pdf)) # 按文件名顺序逐个加入merger.write("完整合同.pdf") # 一次性输出merger.close()
五行核心逻辑,sorted 保证按文件名排,你文件名叫 01合同02合同 它就按这个顺序合。
怎么用:
第一步:装库(只用装一次)
pip install PyPDF2第二步:改路径
把代码里的 "你的文件夹路径" 改成你实际放PDF的文件夹,比如 r"C:\Users\小张\Desktop\合同"。
第三步:运行
把代码保存成 merge_pdf.py,然后执行:
python merge_pdf.py结果就在同目录下生成一个 完整合同.pdf。
你可能会问:
文件名顺序不对怎么办?
把文件名改成 01-xxx.pdf02-xxx.pdf 这种格式,sorted 会自动按数字排。或者直接在代码里手动指定顺序:
files = ["封面.pdf", "正文.pdf", "附件.pdf"] # 按你要的顺序写for f in files:merger.append(f)
合并后页码乱了?
PyPDF2是按PDF内部页码走的,不会乱。如果你发现打开后页码不对,大概率是原PDF本身就有书签/目录干扰,不是合并的问题。
能合并扫描件吗?
能,扫描件也是PDF,合并方式完全一样。
文件太多有上限吗?
实测过100多个PDF合并没问题。上千个的话可能内存会吃紧,不过正常工作场景基本遇不到。
怎么加目录/书签?
merger.append("合同正文.pdf", outline_item="合同正文") # 加书签打开PDF时左侧会有目录跳转,很专业。
5行代码,以后再有人找你合并PDF,把脚本丢过去就行。省下来的时间喝杯咖啡不香吗。
我是鲁叶的Python,这个系列持续更新中,每篇解决一个具体小问题。
下期预告:微信接收的文件乱七八糟?一个脚本按类型自动归档,再也不会找不到东西。
夜雨聆风