Python按页码提取PDF文件并生成指定文件名

Python按页码提取PDF文件并生成指定文件名
最新回答
烂命

2026-10-30 17:29:19

要实现按页码提取PDF文件并生成指定文件名的功能,可通过Python结合PyPDF2、openpyxl和tkinter库完成。以下是具体实现步骤和完整代码:

核心步骤
  1. 读取Excel配置文件

    从“配置文件.xlsx”中逐行读取起始页、终止页和输出文件名。

    若终止页为空,则默认为PDF最后一页。

    示例Excel格式:

  2. 选择PDF文件

    使用tkinter.filedialog弹出文件选择窗口,获取PDF路径。

    若未选择文件,提示警告。

  3. 提取指定页码并保存

    根据Excel中的页码范围,从PDF中提取页面。

    使用PdfWriter将提取的页面写入新文件,文件名来自Excel配置。

    输出文件保存在“分割文件”文件夹中。

  4. UI界面优化

    使用tkinter创建简单界面,包含按钮触发文件选择和分割操作。

    界面示例:

完整代码from tkinter import filedialog, Tk, Button, messageboxfrom PyPDF2 import PdfReader, PdfWriterimport openpyxlfrom pathlib import Path# 创建输出文件夹Path('分割文件').mkdir(parents=True, exist_ok=True)# 加载Excel配置文件workbook = openpyxl.load_workbook("配置文件.xlsx")sht = workbook.activedef FileOpen(): file_path = filedialog.askopenfilename( initialdir=".", title="Select PDF File", filetypes=(("PDF files", "*.pdf"),) ) if not file_path: messagebox.showwarning("警告!", "未选择文件!") return # 读取PDF总页数 pdf_obj_reader = PdfReader(file_path) max_page = len(pdf_obj_reader.pages) # 遍历Excel每一行 for row in sht.iter_rows(min_row=2): # 跳过表头 row_data = [cell.value for cell in row] begin, end, name = row_data # 处理终止页为空的情况 if end is None: end = max_page # 校验页码合法性 if begin < 1 or end > max_page or begin > end: print(f"错误:页码范围 {begin}-{end} 不合法!") continue # 提取页面并保存 pdf_obj_writer = PdfWriter() for page_num in range(begin - 1, end): # 页码从0开始 pdf_obj_writer.add_page(pdf_obj_reader.pages[page_num]) output_path = Path(f'分割文件/{name}.pdf') with open(output_path, 'wb+') as output_file: pdf_obj_writer.write(output_file) print(f"已生成:{output_path}")# 创建UI界面root = Tk()root.title("PDF分割软件")width, height = 180, 80x = (root.winfo_screenwidth() // 2) - (width // 2)y = (root.winfo_screenheight() // 2) - (height // 2)root.geometry(f'{width}x{height}+{x}+{y}')Button(root, text='打开PDF', font=("Times new roman", 12), command=FileOpen).pack(side='top')root.mainloop()关键点说明
  1. 页码处理

    Python中PDF页码从0开始,而Excel中通常从1开始,因此需对begin减1。

    终止页end直接使用Excel中的值(无需减1,因range不包含终点)。

  2. 错误处理

    检查文件是否选择、页码是否合法(如起始页大于终止页)。

    若Excel中终止页为空,自动赋值为PDF总页数。

  3. 文件输出

    使用Path处理路径,确保跨平台兼容性。

    输出文件按Excel中的name字段命名,扩展名为.pdf。

扩展优化
  • 批量处理:支持拖拽多个PDF文件到界面,自动遍历分割。
  • 进度显示:在UI中添加进度条,实时反馈分割状态。
  • 日志记录:将分割结果写入日志文件,便于追踪。

通过上述方法,可高效实现PDF按页码分割并自定义文件名,适用于批量处理文档的场景。