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

iTextSharp new memory stream or juggle file paths?

我对编程还是很陌生,我把自己困在一个角落里,看起来就像我制作的这个 WPF 应用程序。我创建了一个试图覆盖正在读入的文件的进程,所以我遇到了访问冲突。不过,我的问题是……如果我对这个应用程序的要求只是简单地标记一个 pdf,最后对文件名的兴趣为零,我怎么能读入文件并同时更改它,我不能有复制 pdf 的过程,它必须覆盖现有的 pdf,并且不创建重复的文件,尽管文件名不同。我希望将文件读入内存流是答案,但我很难找到 java 中没有的文档,我无法从他们的示例中移植到 c#。

this is the error in 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 的构造函数,该构造函数采用最常见的文件路径,但如您所见,这意味着您无法写入文件,因为您仍在读取文件。

幸运的是,有一个重载需要 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]));