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

使用PyMuPDF写入临时PDF文件时遭遇Permission denied错误

解决PyMuPDF保存临时PDF时的"Permission denied"错误

问题场景

使用PyMuPDF(fitz)修改PDF后,通过NamedTemporaryFile创建临时文件并保存时,触发"Permission denied"错误,报错提示无法删除临时文件。

错误原因

Windows系统中,NamedTemporaryFile在with块内会保持文件打开状态,而PyMuPDF的doc.save()方法在保存非增量PDF时,会尝试删除已存在的目标文件(即当前临时文件)。由于文件正被NamedTemporaryFile的句柄占用,系统拒绝删除操作,导致权限错误。

解决方案

方案1:退出with块后再保存

让NamedTemporaryFile的with块执行完毕,自动关闭文件句柄,再调用doc.save():

from tempfile import NamedTemporaryFile
import fitz

doc = fitz.open("test.pdf")

temp_pdf_path = None
with NamedTemporaryFile(suffix=".pdf", delete=False) as temp_file:
    temp_pdf_path = temp_file.name

# 临时文件已关闭,执行保存
doc.save(temp_pdf_path)
doc.close()

方案2:在with块内手动关闭文件句柄

显式关闭临时文件的句柄,释放文件占用:

from tempfile import NamedTemporaryFile
import fitz

doc = fitz.open("test.pdf")

with NamedTemporaryFile(suffix=".pdf", delete=False) as temp_file:
    temp_pdf_path = temp_file.name
    temp_file.close()  # 手动释放文件句柄
    doc.save(temp_pdf_path)
    doc.close()

方案3:手动生成临时文件名

绕过NamedTemporaryFile的文件创建逻辑,直接生成临时路径,避免文件被提前打开:

import os
import tempfile
import fitz

doc = fitz.open("test.pdf")

# 生成唯一临时文件名,不提前创建文件
temp_pdf_path = os.path.join(tempfile.gettempdir(), f"{next(tempfile._get_candidate_names())}.pdf")
doc.save(temp_pdf_path)
doc.close()

内容的提问来源于stack exchange,提问作者Mazze

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:06:11