You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多PDF文件合并代码异常:生成空PDF问题求助

问题分析与修复方案

你的代码生成空PDF的核心问题有两个:

  1. extract_page函数引用了未定义的newPdf变量,且函数没有返回值,导致pdfpages始终是None,存入列表的内容毫无作用。
  2. 后续直接将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:35:17