ITextSharp编辑现有的pdf

时间:2013-02-01 04:39:53

标签: c# itextsharp

我想使用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();
            }

1 个答案:

答案 0 :(得分:4)

想要使用iTextSharp向现有PDF文件添加文本,找到不同的方式,但在所有这些文件中,编写器和阅读器都是单独的pdf文件。

由于iText(夏普)使用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中创建结果文件,完成后,将内存流的内容写入源文件路径。