本文介绍如何基于pandas dataframe中定义的页面组合,自动化地从源pdf(如menu.pdf)中提取指定页码,为每一行生成一个专属文件夹及仅含目标页的pdf文件,全程使用pypdf2实现稳健的pdf操作。
本文介绍如何基于pandas dataframe中定义的页面组合,自动化地从源pdf(如menu.pdf)中提取指定页码,为每一行生成一个专属文件夹及仅含目标页的pdf文件,全程使用pypdf2实现稳健的pdf操作。
在文档自动化处理场景中,常需根据业务逻辑(如周几对应菜单页)将一份主PDF按不同页码子集拆分为多个定制化PDF,并为每个子集创建隔离的存储目录。本教程提供一套完整、可复用的Python解决方案,依托 PyPDF2(v3.0+)进行PDF读写,并结合 os 和 pandas 实现路径管理与数据驱动控制。
✅ 核心步骤概览
- 定义安全的页面提取函数(支持1-based页码输入)
- 遍历DataFrame逐行解析页码字符串(如 "1,3" → [1, 3])
- 自动创建同名文件夹(兼容含空格/标点的 file_name)
- 将提取结果保存为
/ .pdf
? 实现代码
import os
import pandas as pd
from PyPDF2 import PdfReader, PdfWriter
# 1. 定义页面提取函数(注意:输入页码为1-based,内部自动转0-based)
def extract_pages(input_pdf: str, output_pdf: str, pages: list):
"""
从input_pdf中提取指定页码(1-based),保存为output_pdf
:param input_pdf: 源PDF路径
:param output_pdf: 输出PDF路径(含文件名)
:param pages: 整数列表,如 [1, 3, 5]
"""
with open(input_pdf, "rb") as f:
reader = PdfReader(f)
writer = PdfWriter()
for p in pages:
if 1 <h3>⚠️ 关键注意事项</h3>
- 页码索引:file_pages_to_keep 列中的页码必须为 1-based(即第一页是 1),代码内部自动转换为 PdfReader 所需的0-based索引;
- 路径安全性:os.makedirs(..., exist_ok=True) 确保并发或重复运行不报错;建议对 folder_name 做简单清洗(如移除 / \ : * ? " | 等非法字符,生产环境可引入 slugify 或正则替换);
- 错误防护:函数内置页码越界校验,避免静默失败;
- 依赖版本:请使用 PyPDF2>=3.0.0(旧版 PyPDF2pip install PyPDF2 pandas
? 总结
该方案将数据驱动(DataFrame)与PDF操作解耦,结构清晰、易于调试和扩展。你可进一步增强功能,例如:添加日志记录、支持多线程加速、生成摘要报告(各PDF页数/大小)、或集成进FastAPI/CLI工具中供团队复用。只要 pdf_summary 结构稳定,即可零修改支撑任意规模(50行或5000行)的批量导出任务。










