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;

            }

iTextSharp新的内存流或杂耍文件路径

您正在使用PdfReader的构造函数,该构造函数采用最常见的文件路径,但是,正如您所看到的,这意味着您无法写入文件,因为您仍在从中读取。

幸运的是,这里有一个接受原始字节数组的重载,所以你可以使用System.IO.File.ReadAllBytes()自己读取文件并将其传递给PdfReader

PdfReader reader = new PdfReader(System.IO.File.ReadAllBytes(filePaths[i]));