如何基于Pandas DataFrame批量提取PDF指定页并生成对应文件夹与PDF
问题描述
我有一个已排序且包含50条唯一行的Pandas DataFrame(命名为pdf_summary),每行对应一组特定的file_pages组合。源PDF路径如下:
pdf_path = "Documents/menu.pdf"
DataFrame结构示例:
| file_name | file_pages_to_keep |
|---|---|
| 1 - Monday, Wednesday | 1,3 |
| 2 - Monday | 1 |
| 3 - Monday, Tuesday, Wednesday | 1,2,3 |
| ... | ... |
| 50 - Friday | 5 |
需求:为每个file_name创建独立文件夹,并在其中生成仅包含对应file_pages_to_keep页面的PDF文件。预期输出示例:
"Documents/1 - Monday, Wednesday/1 - Monday, Wednesday.pdf"(仅包含源PDF的第1、3页)
解决方案
可以借助PyMuPDF(轻量高效的PDF处理库)、pandas和os模块实现需求,代码如下:
import pandas as pd import fitz # PyMuPDF import os # 源PDF路径 pdf_path = "Documents/menu.pdf" # 遍历DataFrame的每一行 for idx, row in pdf_summary.iterrows(): # 获取当前行的文件名和要保留的页面 folder_name = row['file_name'] pages_str = row['file_pages_to_keep'] # 构建文件夹路径(放在Documents目录下) folder_path = os.path.join("Documents", folder_name) # 创建文件夹,已存在则跳过 os.makedirs(folder_path, exist_ok=True) # 处理页面:将字符串转为整数列表,注意PDF索引从0开始,所以要减1 target_pages = [int(p) - 1 for p in pages_str.split(',')] # 打开源PDF source_pdf = fitz.open(pdf_path) # 创建新的PDF对象 new_pdf = fitz.open() # 逐页添加指定页面到新PDF for page_num in target_pages: new_pdf.insert_pdf(source_pdf, from_page=page_num, to_page=page_num) # 构建输出PDF路径 output_pdf_path = os.path.join(folder_path, f"{folder_name}.pdf") # 保存新PDF new_pdf.save(output_pdf_path) # 关闭文件释放资源 new_pdf.close() source_pdf.close()
代码说明
- 文件夹创建:用
os.makedirs配合exist_ok=True,避免重复创建文件夹时报错 - 页面处理:将
file_pages_to_keep的字符串按逗号分割,转成整数后减1(因为PyMuPDF的页面索引从0开始,而用户给出的是从1开始的页码) - PDF操作:
insert_pdf方法可以精准提取指定页面,生成新PDF后保存到对应文件夹下
依赖安装
如果未安装PyMuPDF,可以通过pip安装:
pip install pymupdf
内容的提问来源于stack exchange,提问作者asd
相关产品推荐
相关产品推荐

