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

ITextSharp报错:无法打开PDF,提示文件被其他进程占用

解决iTextSharp生成PDF后文件被进程占用无法读取的问题

问题根源在于你代码里的writer.SetCloseStream(false)——这个设置会强制PdfWriter不关闭底层文件流,哪怕using块执行完毕,文件资源也没被彻底释放,导致后续读取时报错。另外你手动调用Close()的方式也不合理,iTextSharp的PdfDocument会自动管理关联的PdfReader和PdfWriter生命周期,手动关闭反而可能导致资源释放不彻底。

修复方案:

  • 移除writer.SetCloseStream(false):除非你有特殊需求要手动控制流的关闭,否则默认PdfWriter会在Dispose时自动关闭流,using块会帮你完成这个过程。
  • 不要手动调用reader.Close()和pdfDoc.Close():所有实现IDisposable的对象(PdfWriter、PdfReader、PdfDocument)都交给using块自动释放,using块会按正确顺序调用Dispose,确保资源彻底释放。
  • 修正代码拼写错误:Directory.CrateDirctory改为Directory.CreateDirectory,PdfDcoument改为PdfDocument

修正后的生成PDF代码:

var path = // 获取路径
Directory.CreateDirectory(path);

using (var writer = new PdfWriter(path, /* writer properties */))
using (var reader = new PdfReader(/* 模板文件 */))
using (var pdfDoc = new PdfDocument(reader, writer))
{
    // 填充PDF的相关代码
    // 无需手动关闭任何对象,using块会自动处理资源释放
}

后续读取文件的代码保持不变即可,此时文件资源已被彻底释放,不会再出现被占用的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:40:33