多PDF文件合并代码异常:生成空PDF问题求助
问题分析与修复方案
你的代码生成空PDF的核心问题有两个:
extract_page函数引用了未定义的newPdf变量,且函数没有返回值,导致pdfpages始终是None,存入列表的内容毫无作用。- 后续直接将
listPdf重新赋值为全新的空PdfFileWriter对象,之前所有收集页面的操作全部失效,最终写入的自然是空文件。
修正后的代码
import tkinter as tk from tkinter.filedialog import askopenfilename import PyPDF4 def extract_page(pdf_reader, pdf_writer): # 遍历当前PDF的所有页面,添加到writer对象中 for num_page in range(pdf_reader.numPages): page = pdf_reader.getPage(num_page) pdf_writer.addPage(page) nb_files = int(input("How many Pdf files do you want to merge?")) root = tk.Tk() root.withdraw() # 初始化一个PdfFileWriter对象,用来存储所有合并后的页面 pdf_writer = PyPDF4.PdfFileWriter() for _ in range(nb_files): file_path = askopenfilename() # 打开并读取选中的PDF文件 pdf_reader = PyPDF4.PdfFileReader(file_path) # 将当前PDF的页面添加到writer中 extract_page(pdf_reader, pdf_writer) # 写入合并后的PDF文件 with open('C:/Users/***/Desktop/newPdf.pdf', 'wb') as pdf_comb: pdf_writer.write(pdf_comb)
关键修改说明
- 提前创建唯一的
PdfFileWriter对象,所有待合并的页面都添加到这个对象中,避免重复创建导致数据丢失。 - 修改
extract_page函数,传入pdf_reader和pdf_writer作为参数,明确页面的来源和目标,解决未定义变量的问题。 - 使用
with语句处理文件写入,自动关闭文件,避免手动关闭可能出现的遗漏。 - 删除了无用的
listPdf列表,直接通过pdf_writer管理所有页面,逻辑更清晰。
内容的提问来源于stack exchange,提问作者Christopher Pring
相关产品推荐
相关产品推荐

