【发布时间】:2013-03-15 02:46:51
【问题描述】:
我的网络方法在我的 %temp% 文件夹中创建了一个 pdf 文件,并且该文件有效。然后我想使用下面的代码向该文件添加一些自定义字段(元)。
PdfStamper 类生成一个IOException,无论我使用它的.Close() 方法还是using 块刚刚结束。仍然持有文件句柄的进程是 webdev web 服务器本身(我在 VS2010 SP1 中调试)。
private string AddCustomMetaData(string guid, int companyID, string filePath)
{
try
{
PdfReader reader = new PdfReader(filePath);
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
{
PdfStamper st = new PdfStamper(reader, fs);
Dictionary<string, string> info = reader.Info;
info.Add("Guid", guid);
info.Add("CompanyID", companyID.ToString());
st.MoreInfo = info;
st.Close();
}
reader.Close();
return guid;
}
catch (Exception e)
{
return e.Message;
}
}
无论我尝试什么,它都会在st.Close(); 处抛出异常,更准确地说:
进程无法访问文件'C:\Users[my 用户名]\AppData\Local\Temp\53b96eaf-74a6-49d7-a715-6c2e866a63c3.pdf' 因为它正被另一个进程使用。
要么我忽略了一些明显的事情,要么我尚未意识到 PdfStamper 类存在问题。使用的itextsharp版本是5.3.3.0和5.4.0.0,问题是一样的。
任何见解将不胜感激。
编辑:我目前正在“编码”这个问题,但我还没有找到任何解决方案。
【问题讨论】:
-
您确定该文件在 pdf 阅读器打开之前没有被使用吗? (就像在此之前你对这个文件做了什么)
-
更好的是,尝试切换文件打开的顺序 (
filestreambeforepdf reader)
标签: c# asp.net itextsharp pdfstamper