iTextSharp新的内存流或杂耍文件路径
本文关键字:文件 路径 内存 iTextSharp | 更新日期: 2023-09-27 18:05:10
我对编程还是很陌生,我把自己困在了一个角落里,就像我做的这个WPF应用程序一样。我创建了一个进程,它试图覆盖正在读取的文件,所以我得到了访问冲突。我的问题是……如果我对这个应用程序的要求是简单地盖章pdf与零的文件名在结束时,我怎么能在文件中读取,并在同一时间改变它,我不能有一个过程,重复的pdf,它必须覆盖现有的pdf,而不是创建一个重复的文件,虽然有不同的文件名。我希望将文件读取到内存流中是答案,但是我很难找到不是java的文档,我缺乏从他们的示例移植到c#的能力。
这是VS
中的错误下面是完成这项工作的代码。
for (int i = 0; i < filePaths.Length; ++i)
{
PdfReader reader = new PdfReader(filePaths[i]);
PdfStamper stamper = new PdfStamper(reader, new FileStream(filePaths[i], FileMode.Create, FileAccess.Write));
BaseFont font = BaseFont.CreateFont(); // Helvetica, WinAnsiEncoding
for (int j = 0; j < reader.NumberOfPages; ++j)
{
PdfContentByte overContent = stamper.GetOverContent(j + 1);
overContent.SaveState();
overContent.BeginText();
overContent.SetFontAndSize(font, 10.0f);
overContent.SetTextMatrix(10, 5);
overContent.ShowText(clientName
+ " #" + clientID
+ " DOB:" + dobDate
+ " " + admitType
+ " @" + admitDate);
overContent.EndText();
overContent.RestoreState();
}
stamper.Close();
}
//reset form
inputBox.Text = "";
clientNameText.Text = "";
clientIDText.Text = "";
dobDateText.Text = "";
admitTypeText.Text = "";
admitDateText.Text = "";
errorLabel.Text = "";
doneImage.Visibility = Visibility.Visible;
}
您正在使用PdfReader
的构造函数,该构造函数采用最常见的文件路径,但是,正如您所看到的,这意味着您无法写入文件,因为您仍在从中读取。
幸运的是,这里有一个接受原始字节数组的重载,所以你可以使用System.IO.File.ReadAllBytes()
自己读取文件并将其传递给PdfReader
PdfReader reader = new PdfReader(System.IO.File.ReadAllBytes(filePaths[i]));