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

使用Tkinter asksaveasfilename保存合并PDF时文件为空的问题

问题描述

使用Tkinter的askopenfilename一切正常,但改用asksaveasfilename保存合并后的PDF时,生成的文件是空的。原本脚本通过固定路径保存没问题,修改为弹窗询问文件名后出现异常,代码如下:

import tkinter as tk
from tkinter.filedialog import askopenfilename, asksaveasfilename
import PyPDF4

# import des fichiers
root = tk.Tk()
root.withdraw()
file1 = askopenfilename()
file2 = askopenfilename()

# import des fichiers pdf
pdfFile1 = PyPDF4.PdfFileReader(file1, 'rb')
pdfFile2 = PyPDF4.PdfFileReader(file2, 'rb')

#création de l'objet pdf
newPdf = PyPDF4.PdfFileWriter()

# fonction d'extraction des pages du pdf
def extract_page(pdfFile):
    for numPage in range(pdfFile.numPages):
        page = pdfFile.getPage(numPage)
        newPdf.addPage(page)
                
# application de la fct sur nos objets-pdf	extract_page(pdfFile1)	extract_page(pdfFile2)

# création du nouveau Pdf et écriture
file = asksaveasfilename(defaultextension="\.pdf")
pdfCombined = open(file, "wb")
newPdf.write(pdfCombined)
file.close()
解决方案

你的代码有三个关键问题导致生成空文件:

  • 核心合并逻辑未执行:你把extract_page(pdfFile1)和extract_page(pdfFile2)写在了注释行里,这两行代码根本没运行,导致newPdf对象里没有任何页面,写入自然是空文件。
  • 文件关闭对象错误:你调用file.close(),但file是用户选择的文件名字符串,不是文件句柄,正确的操作是关闭pdfCombined这个文件对象。更推荐用with语句自动管理文件,避免手动关闭的失误。
  • 默认扩展名写法错误:defaultextension="\.pdf"里的转义符多余,直接写defaultextension=".pdf"即可。

修正后的完整代码:

import tkinter as tk
from tkinter.filedialog import askopenfilename, asksaveasfilename
import PyPDF4

root = tk.Tk()
root.withdraw()

# 选择要合并的PDF文件
file1 = askopenfilename()
file2 = askopenfilename()

# 读取PDF文件
pdfFile1 = PyPDF4.PdfFileReader(file1, 'rb')
pdfFile2 = PyPDF4.PdfFileReader(file2, 'rb')

# 创建PDF写入对象
newPdf = PyPDF4.PdfFileWriter()

# 提取并添加页面到新PDF
def extract_page(pdfFile):
    for numPage in range(pdfFile.numPages):
        page = pdfFile.getPage(numPage)
        newPdf.addPage(page)

# 执行页面提取(关键:取消注释并正确调用)
extract_page(pdfFile1)
extract_page(pdfFile2)

# 选择保存路径并写入文件
save_path = asksaveasfilename(defaultextension=".pdf")
# 使用with语句自动关闭文件
with open(save_path, "wb") as pdfCombined:
    newPdf.write(pdfCombined)

内容的提问来源于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.14 23:15:54