当前位置: 首页 > 知识库问答 >
问题:

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

孟楷
2023-03-14

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

那么,使用iText可以做到这一点吗?

共有3个答案

柯永福
2023-03-14

如果要添加两个字节数组并以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();
}
松元明
2023-03-14

这个问题没有指定语言,所以我用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是PDFWriter类型的PdfDocuments,合并后的部分是PdfReader类型的PdfDocuments,而PdfMerger是将其粘合在一起的粘合剂。

郜联
2023-03-14

是的,您可以使用iText 7合并PDF。例如,看看iText 7跳转启动教程示例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第88个奥斯卡组合方法createPdf

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

 类似资料:
  • 我试图从多个内存流生成一个PDF文件,但在确定将2个PDF MemoryStream合并为一个PDF MemoryStream的正确方法时遇到了很多困难,该PDF MemoryStream包含来自两个源PDF MemoryStream的所有页面。这看起来很简单,我认为下面的代码设置正确,但生成的PDF内存流并不包含这两个文件的组合。 我很难确定将2个PDF MemoryStream合并为一个PDF

  • 问题内容: 我正在尝试使用Jenkinsfile创建Jenkins工作流。我要做的就是监视’develop’分支中的更改。发生更改时,我希望它进行git标签并合并到master。我正在使用GitSCM步骤,但它似乎唯一支持的就是git clone。我不想掏出钱来做标记/合并,但我看不到解决办法。有人知道这是否可能吗?我在我的Git服务器上使用BitBucket(本地)。 问题答案: 目前尚不可能,

  • 我可以找到tqdm进度条用于group by和其他pandas操作的示例。但找不到任何有关合并或加入的信息。 有可能在熊猫上使用tqdm进行合并吗?

  • 我正在尝试创建Java程序,它可以读取多个pdf文件,并将它们合并成一个单一的pdf文件。然后打印PDF,但在打印时,我需要将多个PDF页面合并在一个页面中并打印。即使它是一个新的pdf创建,那对我来说是好的。我需要一些开源的Java pdf操纵库来处理这个。我知道一个解决方案是在打印时,选择多个打印选项,将多页打印到一张纸上。但我可以访问的打印机没有这样的功能。有谁能为这个问题提出一些解决方案,

  • 问题内容: 比如有收藏,,。任何避免迭代器循环的方法都可以通过Java 8流API交错这些集合以获得以下结果- 吗? 问题答案: 我不确定Stream API是否有更简单的方法,但是您可以在所有列表的索引上使用流来考虑以下问题: 这将获得给定列表中最大列表的大小。然后,对于每个索引,它使用该列表中每个列表的元素在该索引处形成的流(如果该元素存在的话)进行平面映射。 然后,您可以将其与 使用prot

  • 我也需要扩展WebMvcConfigurationSupport类,修改两个内容: 我喜欢从WebMvcAutoConfiguration类注册的默认值,但是由于类上的条件注释,当我扩展WebMvcConfigurationSupport类时,它会防止自动配置的发生。 提前道谢!