乐于分享
好东西不私藏

合并PDF别再傻傻充会员了!这个Python脚本一键搞定(附代码)

本文最后更新于2026-03-10,某些文章具有时效性,若有错误或已失效,请在下方留言或联系老夜

合并PDF别再傻傻充会员了!这个Python脚本一键搞定(附代码)

收了十几个PDF文件要合在一起,网上找的工具不是限制页数就是上传下载慢。今天分享一个Python脚本,把要合并的PDF放进一个文件夹,运行脚本自动合并,想合多少合多少,完全免费,本地处理不泄露隐私。

一键合并所有PDF,想合多少合多少,完全免费,本地处理绝不泄露。

一、先看效果:运行脚本,选个文件夹,所有PDF瞬间合并

你只需要:

  1. 把所有要合并的PDF放进一个文件夹(比如“合同扫描件”)
  2. 运行脚本,输入文件夹路径(或者直接把文件夹拖进窗口)
  3. 脚本自动按文件名顺序合并,生成一个“合并文件.pdf”

运行界面长这样:

二、完整代码

import osimport sysimport PyPDF2print("=== PDF合并免费工具 ===")folder = input("请输入PDF文件夹路径(可直接拖拽文件夹进来):").strip()folder = folder.strip('"').strip("'")# 检查路径if not os.path.isdir(folder):print(f"❌ 文件夹不存在:{folder}")    input("按回车键退出...")    sys.exit()# 获取所有PDF文件pdf_list = [f for f in os.listdir(folder) if f.lower().endswith('.pdf')]if not pdf_list:print("❌ 该文件夹中没有PDF文件")    input("按回车键退出...")    sys.exit()pdf_list.sort()  # 按文件名排序print(f"✅ 共找到 {len(pdf_list)} 个PDF文件,开始合并...")# 创建合并器merger = PyPDF2.PdfMerger()# 逐个合并total_pages = 0for i, filename in enumerate(pdf_list, 1):print(f"正在合并:第{i}/{len(pdf_list)}个 - {filename}")    filepath = os.path.join(folder, filename)    merger.append(filepath)# 可选:统计页数(需要读取页数,稍微慢一点)    with open(filepath, 'rb') as f:        reader = PyPDF2.PdfReader(f)        total_pages += len(reader.pages)# 生成输出文件名(放在上一级目录,避免覆盖)parent_name = os.path.basename(os.path.normpath(folder))output_path = os.path.join(os.path.dirname(folder), parent_name + "合并.pdf")# 保存合并文件merger.write(output_path)merger.close()print(f"\n✅ 合并完成!PDF已保存为:{output_path}")print(f"共合并 {len(pdf_list)} 个文件,总计 {total_pages} 页")input("按回车键退出...")

三、逐行解释

import osimport sysimport PyPDF2

ossys是Python自带的,用来处理路径和退出。

PyPDF2是PDF处理库,需要安装:pip install PyPDF2(装一次即可)。

folder = input("请输入PDF文件夹路径:").strip()folder = folder.strip('"').strip("'")

input() 让用户输入路径。

如果用户拖拽文件夹,路径会自带引号,去掉它们。

if not os.path.isdir(folder):print("文件夹不存在")    sys.exit()

检查路径是否存在,不存在就退出。

pdf_list = [f for f in os.listdir(folder) if f.lower().endswith('.pdf')]

列出文件夹里所有文件,筛选出后缀是 .pdf 的(不区分大小写)。

pdf_list.sort()

按文件名排序,保证合并顺序和文件名一致(比如按数字1,2,3)。

merger = PyPDF2.PdfMerger()

创建一个PDF合并器对象。

merger.append(filepath)

把一个PDF文件添加到合并器里。

# 统计页数with open(filepath, 'rb') as f:    reader = PyPDF2.PdfReader(f)    total_pages += len(reader.pages)

打开每个PDF,获取页数累加。

parent_name = os.path.basename(os.path.normpath(folder))output_path = os.path.join(os.path.dirname(folder), parent_name + "合并.pdf")

用文件夹的名字生成输出文件名,放在上一级目录,避免在原文件夹里乱掉。

merger.write(output_path)merger.close()

写入合并文件,关闭合并器。

四、踩过的坑

坑1:安装PyPDF2报错

如果 pip install PyPDF2 失败,试试:

pip install pypdf2 --user

或者用管理员身份运行命令行。

坑2:有些PDF加密了

如果有密码保护的PDF,合并时会报错。可以先解密再合并,或者跳过这类文件。代码里没处理加密,遇到会报错,可以在循环里加 try...except 跳过。

坑3:文件名顺序不对

如果你希望按修改时间排序,把 pdf_list.sort() 换成:

pdf_list.sort(key=lambda f: os.path.getmtime(os.path.join(folder, f)))

坑4:合并后页序混乱

检查是不是 sort() 排序不符合预期,可以手动指定顺序,比如在文件名前加01、02前缀。

坑5:内存不够(文件太多太大)

PdfMerger 不会一次性把所有文件读进内存,所以一般不用担心。但如果文件真的超大,可以考虑分批次合并。

五、扩展功能:添加书签或页码

如果你想让合并后的PDF自动添加书签(对应原文件名),可以用下面代码替换 merger.append(filepath):

merger.append(filepath, bookmark=filename)

这样在PDF阅读器里会显示书签,方便跳转。

如果想在每页添加页码,那就复杂一些,需要用到 PyPDF2 的页面操作,以后再单独讲。

六、为什么用Python而不是在线工具

对比项
在线工具
Python脚本
价格
限制页数或收费
0元
隐私
文件要上传到云端
本地处理,绝不泄露
速度
上传下载慢
瞬间完成
自定义
只能合并
可以加书签、排序等
网络依赖
必须有网
无网络也能用

七、今日挑战

把你手头需要合并的PDF文件放进一个文件夹,用这个脚本试试。如果有任何问题,评论区告诉我,我会帮你看看。

如果你已经用上了,欢迎分享你合并了多少个文件、多少页,用时多久。

八、下期写什么?

你想用Python解决什么日常麻烦?比如:

  • 批量提取PDF里的图片?
  • 给PDF添加水印?
  • 拆分PDF为单个文件?
  • 批量压缩图片大小?

在评论区留下你的需求,点赞最高的需求,下期小编就写那个脚本!保证免费、好用、带详细解释。

九、下期预告

评论区见!高赞需求就是下期内容。

回复「Py脚本」获取本文完整代码

往期精选:

别再为图片转PDF付费了!这个Python脚本让你彻底告别收费软件

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 合并PDF别再傻傻充会员了!这个Python脚本一键搞定(附代码)

猜你喜欢

  • 暂无文章

评论 抢沙发

5 + 5 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮