是否可以使用iText7合并多个pdf

Mat*_*att 5 itext itext7

对此问道道歉,但我在iText网站上看​​不到任何确定的内容.

我有几个产品数据表.每个都是一个单独的文件.我想要做的是使用iText根据网络表单的答案生成摘要/推荐的一组操作,然后附加到所有相关的数据表.这样,我只需要在浏览器中打开一个新选项卡来打印所有信息,而不是为摘要打开一个,并为每个所需的数据表打开一个.

那么,是否可以使用iText以编程方式执行此操作?

mkl*_*mkl 12

是的,您可以使用iText 7合并PDF.例如,查看iText 7 Jump-Start教程示例C06E04_88th_Oscar_Combine,关键代码是:

PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
PdfMerger merger = new PdfMerger(pdf);

//Add pages from the first document
PdfDocument firstSourcePdf = new PdfDocument(new PdfReader(SRC1));
merger.merge(firstSourcePdf, 1, firstSourcePdf.getNumberOfPages());

//Add pages from the second pdf document
PdfDocument secondSourcePdf = new PdfDocument(new PdfReader(SRC2));
merger.merge(secondSourcePdf, 1, secondSourcePdf.getNumberOfPages());

firstSourcePdf.close();
secondSourcePdf.close();
pdf.close();
Run Code Online (Sandbox Code Playgroud)

(C06E04_88th_Oscar_Combine方法createPdf)


根据您的使用情况,您可能希望将PdfDenseMerger与其辅助类PageVerticalAnalyzer一起使用,而不是使用PdfMerger此处.它试图将来自多个源页面内容到一个单一的目标页面和对应的iText 5 PdfVeryDenseMergeTool这个答案.由于PDF文件的性质,这仅适用于没有页眉,页脚和类似工件的PDF.


小智 6

我找到了一个效果很好的解决方案。

public byte[] Combine(IEnumerable<byte[]> pdfs)
{
    using (var writerMemoryStream = new MemoryStream())
    {
        using (var writer = new PdfWriter(writerMemoryStream))
        {
            using (var mergedDocument = new PdfDocument(writer))
            {
                var merger = new PdfMerger(mergedDocument);

                foreach (var pdfBytes in pdfs)
                {
                    using (var copyFromMemoryStream = new MemoryStream(pdfBytes))
                    {
                        using (var reader = new PdfReader(copyFromMemoryStream))
                        {
                            using (var copyFromDocument = new PdfDocument(reader))
                            {
                                merger.Merge(copyFromDocument, 1, copyFromDocument.GetNumberOfPages());
                            }
                        }
                    }
                }
            }
        }

        return writerMemoryStream.ToArray();
    }
}
Run Code Online (Sandbox Code Playgroud)

使用

DirectoryInfo d = new DirectoryInfo(INPUT_FOLDER);
            
var pdfList = new List<byte[]> { };

foreach (var file in d.GetFiles("*.pdf"))
{
    pdfList.Add(File.ReadAllBytes(file.FullName));
}


File.WriteAllBytes(OUTPUT_FOLDER + "\\merged.pdf", Combine(pdfList));
Run Code Online (Sandbox Code Playgroud)

作者: https: //www.nikouusitalo.com/blog/combining-pdf-documents-using-itext7-and-c/