ITextSharp 编辑现有 pdf

本文关键字:pdf 编辑 ITextSharp | 更新日期: 2023-09-27 17:57:10

我想使用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

您想使用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 中创建,完成后,将内存流的内容写入源文件路径。