iTextSharp 新内存流或杂耍文件路径?
iTextSharp new memory stream or juggle file paths?
我对编程还是很陌生,我把自己困在一个角落里,看起来就像我制作的这个 WPF 应用程序。我创建了一个试图覆盖正在读入的文件的进程,所以我遇到了访问冲突。不过,我的问题是……如果我对这个应用程序的要求只是简单地标记一个 pdf,最后对文件名的兴趣为零,我怎么能读入文件并同时更改它,我不能有复制 pdf 的过程,它必须覆盖现有的 pdf,并且不创建重复的文件,尽管文件名不同。我希望将文件读入内存流是答案,但我很难找到 java 中没有的文档,我无法从他们的示例中移植到 c#。
这是完成工作的代码。
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
的构造函数,该构造函数采用最常见的文件路径,但如您所见,这意味着您无法写入文件,因为您仍在读取文件。
幸运的是,有一个重载需要 raw byte array so you can just read the file on your own using System.IO.File.ReadAllBytes()
并将其传递给 PdfReader
PdfReader reader = new PdfReader(System.IO.File.ReadAllBytes(filePaths[i]));
我对编程还是很陌生,我把自己困在一个角落里,看起来就像我制作的这个 WPF 应用程序。我创建了一个试图覆盖正在读入的文件的进程,所以我遇到了访问冲突。不过,我的问题是……如果我对这个应用程序的要求只是简单地标记一个 pdf,最后对文件名的兴趣为零,我怎么能读入文件并同时更改它,我不能有复制 pdf 的过程,它必须覆盖现有的 pdf,并且不创建重复的文件,尽管文件名不同。我希望将文件读入内存流是答案,但我很难找到 java 中没有的文档,我无法从他们的示例中移植到 c#。
这是完成工作的代码。
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
的构造函数,该构造函数采用最常见的文件路径,但如您所见,这意味着您无法写入文件,因为您仍在读取文件。
幸运的是,有一个重载需要 raw byte array so you can just read the file on your own using System.IO.File.ReadAllBytes()
并将其传递给 PdfReader
PdfReader reader = new PdfReader(System.IO.File.ReadAllBytes(filePaths[i]));