C# 编辑现有的pdf文件

C# 编辑现有的pdf文件,c#,itextsharp,C#,Itextsharp,我想使用iTextSharp将文本添加到现有的PDF文件中,我发现了不同的方法,但在所有这些方法中,编写者和读者都是独立的PDF文件。 我想要一种方法,这样我可以打开一个pdf,然后在不同的位置写不同的东西。 现在我有了这个代码,但它生成了一个新文件 using (FileStream stream1 = File.Open(path, FileMode.OpenOrCreate)) { BaseFont bf = BaseFont.CreateFont(fontPath

我想使用iTextSharp将文本添加到现有的PDF文件中,我发现了不同的方法,但在所有这些方法中,编写者和读者都是独立的PDF文件。 我想要一种方法,这样我可以打开一个pdf,然后在不同的位置写不同的东西。 现在我有了这个代码,但它生成了一个新文件

using (FileStream stream1 = File.Open(path, FileMode.OpenOrCreate))
      {
      BaseFont bf = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
      PdfReader reader = new PdfReader("C:\\26178DATA\\pdf\\holding.pdf");
      var pageSize = reader.GetPageSize(1);
      PdfStamper stamper = new PdfStamper(reader, stream1);
      iTextSharp.text.Font tmpFont = new iTextSharp.text.Font(bf, fontSize);
      PdfContentByte canvas = stamper.GetOverContent(1);
      Phrase ph = new Phrase(words[1], tmpFont);
      ph.Font = tmpFont;
      canvas.SetFontAndSize(bf, fontSize);
      ColumnText.ShowTextAligned(canvas, Element.ALIGN_LEFT, ph, iTextSharp.text.Utilities.MillimetersToPoints(x * 10), pageSize.GetTop(iTextSharp.text.Utilities.MillimetersToPoints(y * 10)), 0);
      stamper.Close();
            }
您希望使用iTextSharp将文本添加到现有PDF文件中,可以找到不同的方法,但在所有这些方法中,编写器和读取器都是单独的PDF文件

由于iText(Sharp)使用PdfStamper处理PDF的正常方式可能涉及对现有PDF元素的重大重组,因此iText不会在位编辑文件。另一种方式是使用附加模式,允许就地编辑;但这一选择并未实施。就地编辑的一大缺点是,在某些程序失败的情况下,所讨论的文件可能会保持在中间的、不可用的状态

也就是说,您可以将新文件保存到原始文件的路径,方法是首先将文件完全读入内存,然后开始创建具有相同路径的输出。如果您的示例代码暗示在创建输出流之前至少要移动PdfReader构造函数的使用:

PdfReader reader = new PdfReader(path);
using (FileStream stream1 = File.Open(path, FileMode.OpenOrCreate))
{
    BaseFont bf = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
    ...
或者,您可以在内存中创建结果文件,即在MemoryStream中而不是在FileStream中创建,完成后,将内存流的内容写入源文件路径