推荐使用 pypdf 库合并或拆分 pdf:它 actively 维护、支持密码和元数据;合并时用 pdfwriter 逐页添加,注意顺序与书签;拆分时应分块处理避免内存溢出,并加入异常处理与进度提示。
用脚本合并或拆分 pdf,比手动拖拽更省时、更可控,尤其适合处理批量文件或固定流程。关键不是写多复杂的代码,而是选对工具、理清步骤、避开常见坑。
选对基础工具:PyPDF2 或 PyPDF4 更稳,pypdf(新版)更推荐
Python 生态里处理 PDF 的库不少,但稳定性和维护状态很重要:
- PyPDF2 兼容老项目,但已停止更新,遇到加密 PDF 或新版格式容易报错;
- PyPDF4 是 PyPDF2 的延续,修复了一些问题,但后续也基本不再活跃;
- pypdf(2022 年后替代 PyPDF2 的官方继任者)主动维护、文档清晰、支持密码、元数据、页面旋转等,目前最推荐。
安装只需一行:pip install pypdf
合并多个 PDF:按顺序读取,逐个添加页面
核心逻辑是创建一个空的 PdfWriter 对象,把每个输入 PDF 的每一页“拷贝”进去。注意顺序和页码范围:
- 文件名按字母序读取(如
doc1.pdf,doc2.pdf),若需自定义顺序,建议先用 Python 列表明确排序; - 可跳过某 PDF 的第一页(比如封面),用
reader.pages[1:]切片; - 合并后保留原文件的书签?默认不继承,需手动用
writer.add_outline_item添加。
示例片段(合并当前目录下所有 PDF):
from pypdf import PdfReader, PdfWriter
writer = PdfWriter()
for fname in sorted(glob("*.pdf")):
reader = PdfReader(fname)
for page in reader.pages:
writer.add_page(page)
with open("merged.pdf", "wb") as f:
writer.write(f)
按页拆分 PDF:切片 + 单独保存,避免内存溢出
大文件(如 500 页 PDF)不要一次性全读进内存再拆。稳妥做法是边读边写:
- 用
reader.pages[start:end]提取连续页范围,适合按章节拆; - 若需按每 10 页拆一份,用
range(0, len(reader.pages), 10)分块; - 每拆出一份,立刻用独立
PdfWriter写入新文件并关闭,释放内存; - 原 PDF 有加密?先调用
reader.decrypt("password"),否则读不到页面。
加点实用细节:文件名、进度、错误跳过
真实场景中,脚本得扛住小意外:
- 自动给输出文件加时间戳或页码范围,例如
f"output_part_{i:03d}_{start+1}-{end}.pdf"; - 处理几十个文件时,加
print(f"✓ 已处理 {fname}")或用tqdm显示进度条; - 某个 PDF 损坏或密码错误?用
try/except PdfReadError:捕获,打印警告后继续下一个,别让整个流程中断。
不复杂但容易忽略。











