乐于分享
好东西不私藏

一个脚本解决一个问题 | 10个PDF合成一份,Python 5行搞定

一个脚本解决一个问题 | 10个PDF合成一份,Python 5行搞定
上周隔壁工位的行政小妹又在那叹气,我凑过去一看,她面前开着十几个PDF窗口,左手Word右手WPS,正一个一个地打印到PDF。

"我要把这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,这个系列持续更新中,每篇解决一个具体小问题。

下期预告:微信接收的文件乱七八糟?一个脚本按类型自动归档,再也不会找不到东西。