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
相关产品推荐
相关产品推荐

