ITEXTSharp将PDF文件附加到磁盘上已存在的文件中

时间:2016-04-29 15:07:45

标签: c# pdf itextsharp

我有PDF文件必须合并为一个。如果我一次拥有所有PDF文件,这不是问题。然而,PDF文件分阶段进入,由于工作流程,我们需要在它们到达时合并它们。

因此工作流程如下所示:

1:如果不存在PDF文件,请创建一个并将第一组页面合并到新的PDF文件中,然后关闭。

2:如果PDF已经存在(目标1),请将其打开并将新页面合并到目标PDF文件中。然后关闭

3:重复一遍。

下面是我的代码,但它只是覆盖了以前插入的页面,所以我的问题是如何使用PDFSmartCopy将PDF文件插入到现有的PDF文件中。

我需要使用 PDFSmartCopy ,因为我需要优化字体。 我在StackOverflow上找到了这个很好的文档,它显示了如何附加,但是他们使用的不同于PDFSmartCopy。

注意:我不确定是否需要创建中间PDF文件来保存目标PDF页面,然后删除目标PDF,然后将中间PDF保存为目标PDF。然而,在我去做之前,我想知道是否有办法在没有中间步骤的情况下做到这一点。

using (FileStream stream = new FileStream(targetFile, FileMode.OpenOrCreate))
{
  Document pdfDoc = new Document(PageSize.LETTER);
  PdfSmartCopy pdf = new PdfSmartCopy(pdfDoc, stream);
  pdfDoc.Open();
  foreach (string file in files)
  {
    PdfReader reader = new PdfReader(file);
    pdf.AddDocument(reader);
    pdf.FreeReader(reader) ;
    reader.Close();
  }  

}

1 个答案:

答案 0 :(得分:1)

这是我用来将Ppdf合并在一起的代码。就像我上面从源代码中看到的那样,看起来你可以用PdfCopy替换PdfSmartCopy。同样基于注释PdfSmartCopy使用更多内存,以便它可以保存对资源的引用。它继承自PdfCopy类,这使我认为只需用PdfCopy替换PdfSmartCopy即可。

我希望这能让你朝着正确的方向前进。此外,还有一个指向您要查看的源代码的链接。 https://github.com/itext/itextsharp

var document = new Document();
var writer = new PdfCopy(document, new FileStream(outFile, FileMode.Create));
document.Open();
    foreach (var fileName in groupfiles)
    {
        var reader = new PdfReader(Path.Combine(config.WorkingDirectory, fileName));
        for (var i = 1; i <= reader.NumberOfPages; i++)
        {
            var page = writer.GetImportedPage(reader, i);
            writer.AddPage(page);
        }
        reader.Close();
   }
writer.Close();
document.Close();