编程学习网 > 编程语言 > Python > Python PDF 自动化保姆级:告别复制粘贴,批量处理 PDF 全套方案
2026
08-24

Python PDF 自动化保姆级:告别复制粘贴,批量处理 PDF 全套方案


你有没有过这种经历:领导甩来几十个 PDF,让你合并成一个、按规则重命名、再拆分成单页。你一个一个打开、另存为、改名字,两小时过去了,眼睛都花了。

今天这篇是 Python PDF 自动化系列的第一篇,我们从最基础的环境搭建开始,搞定职场最高频的三个操作:PDF 合并、PDF 拆分、批量重命名全程保姆级,复制代码就能跑。

01 环境搭建:三个库搞定 90% PDF 需求

Python 处理 PDF 的库有很多,但职场常用的就三个,各有分工:

PyPDF2PDF 基础操作之王。合并、拆分、旋转、加密解密,全靠它。轻量、稳定、文档全。

pdfplumber文本和表格提取神器。尤其是表格提取,比 PyPDF2 强一个量级。后面第篇专门讲。

reportlabPDF 生成工具。从零创建 PDF、画表格、插图表,第篇详细讲。

先打开终端,一次性安装:

 

pip install PyPDF2 pdfplumber reportlab

安装完成后,验证一下:

python -c "import PyPDF2; import pdfplumber; import reportlab; print('全部安装成功')"

 

看到 "全部安装成功" 就说明环境 OK 了。建议使用 Python 3.8 及以上版本,兼容性最好。

02 PDF 合并:把多个文件拼成一个

场景:你有 10 个章节的 PDF 报告,需要合并成一份完整文档提交。

PyPDF2 PdfMerger 类专门干这个。直接上代码:

from PyPDF2 import PdfMergerimport os# 要合并的PDF文件夹pdf_dir = "./pdf_files"# 输出文件名output_file = "merged_result.pdf"# 获取文件夹下所有PDF,按文件名排序pdf_files = sorted([    f for f in os.listdir(pdf_dir)    if f.endswith(".pdf")])merger = PdfMerger()for pdf in pdf_files:    file_path = os.path.join(pdf_dir, pdf)    merger.append(file_path)    print(f"已合并: {pdf}")merger.write(output_file)merger.close()print(f"合并完成!输出文件: {output_file}")

关键说明:

sorted() 很重要,保证按文件名顺序合并。如果你的文件是 "1.pdf2.pdf10.pdf" 这种数字命名,sorted 会按字符串排序导致 10 排在 2 前面,需要用自然排序。

PdfMerger 还支持只合并部分页面,比如 merger.append(file, pages=(0, 5)) 只合并前 5 页。

合并大文件时注意内存,几百个文件合并建议分批处理。

03 PDF 拆分:一个文件拆成多个

场景:一份 50 页的合同,需要每页单独存成一个文件;或者按章节拆分。

方案一:每页拆成单独文件

from PyPDF2 import PdfReader, PdfWriterinput_pdf = "big_document.pdf"reader = PdfReader(input_pdf)for page_num in range(len(reader.pages)):    writer = PdfWriter()    writer.add_page(reader.pages[page_num])    output_file = f"page_{page_num + 1}.pdf"    with open(output_file, "wb") as f:        writer.write(f)    print(f"已拆分: {output_file}")print("拆分完成!")

方案二:按页码范围拆分(比如每 10 页一个文件)

from PyPDF2 import PdfReader, PdfWriterinput_pdf = "big_document.pdf"reader = PdfReader(input_pdf)total_pages = len(reader.pages)pages_per_file = 10  # 每个文件10for start in range(0, total_pages, pages_per_file):    end = min(start + pages_per_file, total_pages)    writer = PdfWriter()    for page_num in range(start, end):        writer.add_page(reader.pages[page_num])    output_file = f"pages_{start + 1}_to_{end}.pdf"    with open(output_file, "wb") as f:        writer.write(f)    print(f"已生成: {output_file}")print("批量拆分完成!")

04 批量重命名:一秒改完上百个文件名

场景:下载的 PDF 文件名乱七八糟,需要统一改成 "日期_类型_编号.pdf" 的格式。

Python os 模块就能搞定,不需要 PDF 库:

import ospdf_dir = "./pdf_files"# 获取所有PDF文件pdf_files = [f for f in os.listdir(pdf_dir) if f.endswith(".pdf")]for index, old_name in enumerate(pdf_files, start=1):    # 新文件名规则:report_001.pdf    new_name = f"report_{index:03d}.pdf"    old_path = os.path.join(pdf_dir, old_name)    new_path = os.path.join(pdf_dir, new_name)    os.rename(old_path, new_path)    print(f"{old_name} → {new_name}")print("批量重命名完成!")

进阶:根据 PDF 内容自动命名

如果想根据 PDF 第一页的标题自动命名,可以结合 pdfplumber 提取文本:

import pdfplumberimport ospdf_dir = "./pdf_files"for filename in os.listdir(pdf_dir):    if not filename.endswith(".pdf"):        continue    filepath = os.path.join(pdf_dir, filename)    with pdfplumber.open(filepath) as pdf:        first_page = pdf.pages[0]        text = first_page.extract_text()        # 取第一行作为标题        title = text.split("\n")[0].strip()        # 清理文件名中的非法字符        safe_title = "".join(c for c in title if c not in r'\/:*?"<>|')    new_name = f"{safe_title}.pdf"    new_path = os.path.join(pdf_dir, new_name)    os.rename(filepath, new_path)    print(f"{filename} → {new_name}")

 

05 常见坑与避坑指南

1:加密的 PDF 无法操作

如果 PDF 有密码保护,PyPDF2 会报错。需要先解密,第篇会详细讲加密解密。

2:合并后书签丢失

PdfMerger 默认不会保留原 PDF 的书签(outline)。如果需要保留,可以用 merger.append(file, import_outline=True)

3:中文文件名乱码

Windows 系统下偶尔出现中文文件名编码问题,建议在脚本开头加上:

import syssys.stdout.reconfigure(encoding="utf-8")

4:扫描版 PDF 无法提取文本

扫描件本质是图片,pdfplumber 提取不到文字。需要 OCR 处理,后面的文章会涉及。

写在最后

这一篇我们搞定了 PDF 自动化的基础三件套:合并、拆分、重命名。这些操作看起来简单,但在真实工作中,一次处理上百个文件时,Python 能帮你省下几小时的重复劳动。

以上就是“Python PDF 自动化保姆级:告别复制粘贴,批量处理 PDF 全套方案的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。 

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取