我有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();
}
}
答案 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();