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

时间:2016-11-14 13:02:09

标签: itext itext7

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

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

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

4 个答案:

答案 0 :(得分:6)

是的,您可以使用iText 7合并PDF。查看iText 7 Jump-Start tutorial示例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();

C06E04_88th_Oscar_Combine方法createPdf

根据您的使用情况,您可能希望在此处使用PdfDenseMerger及其助手类PageVerticalAnalyzer而不是PdfMerger。它尝试将来自多个源页面的内容放到单个目标页面上,并对应于来自PdfVeryDenseMergeTool的iText 5 this answer。由于PDF文件的性质,这仅适用于没有页眉,页脚和类似工件的PDF。

答案 1 :(得分:0)

该问题未指定语言,因此我使用C#添加了答案;这对我有用。我要创建三个独立但相关的PDF,然后将它们合并为一个。

在创建了三个单独的PDF文档并将数据添加到它们之后,我通过以下方式将它们组合在一起:

PdfDocument pdfCombined = new PdfDocument(new PdfWriter(destCombined));
PdfMerger merger = new PdfMerger(pdfCombined);

PdfDocument pdfReaderExecSumm = new PdfDocument(new PdfReader(destExecSumm));
merger.Merge(pdfReaderExecSumm, 1, pdfReaderExecSumm.GetNumberOfPages());

PdfDocument pdfReaderPhrases = new PdfDocument(new PdfReader(destPhrases));
merger.Merge(pdfReaderPhrases, 1, pdfReaderPhrases.GetNumberOfPages());

PdfDocument pdfReaderUncommonWords = new PdfDocument(new PdfReader(destUncommonWords));
merger.Merge(pdfReaderUncommonWords, 1, pdfReaderUncommonWords.GetNumberOfPages());

pdfCombined.Close();

因此,组合的PDF是PdfDocument的PDFWriter类型,合并的部分是PdfDocuments的PdfReader类型,而PdfMerger是将其绑定在一起的胶水。

答案 2 :(得分:0)

如果要添加两个字节数组并返回一个字节数组作为PDF / A

public static byte[] mergePDF(byte [] first, byte [] second) throws IOException {
    // Initialize PDF writer
    ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
    PdfWriter writer = new PdfWriter(arrayOutputStream);
    

    // Initialize PDF document
    PdfADocument pdf = new PdfADocument(writer, PdfAConformanceLevel.PDF_A_1B, new PdfOutputIntent("Custom", "",
            "https://www.color.org", "sRGB IEC61966-2.1", new FileInputStream("sRGB_CS_profile.icm")));


    PdfMerger merger = new PdfMerger(pdf);

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

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


    return arrayOutputStream.toByteArray();
}

答案 3 :(得分:0)

这是将 file1.pdf 合并到 file2.pdf 创建新的 merge.pdf 所需的最少 C# 代码:

var path = @"C:\Temp\";

var src0 = System.IO.Path.Combine(path, "merged.pdf");
var wtr0 = new PdfWriter(src0);
var pdf0 = new PdfDocument(wtr0);

var src1 = System.IO.Path.Combine(path,  "file1.pdf");
var fi1 = new FileInfo(src1);
var rdr1= new PdfReader(fi1);
var pdf1 = new PdfDocument(rdr1);

var src2 = System.IO.Path.Combine(path,  "file2.pdf");
var fi2 = new FileInfo(src2);
var rdr2 = new PdfReader(fi2);
var pdf2 = new PdfDocument(rdr2);

var merger = new PdfMerger(pdf0);

merger.Merge(pdf1, 1, pdf1.GetNumberOfPages());
merger.Merge(pdf2, 1, pdf2.GetNumberOfPages());

merger.Close();
pdf0.Close();