【问题标题】:Merge PDF from outputStream从 outputStream 合并 PDF
【发布时间】:2014-02-01 08:35:11
【问题描述】:

我有两个 PDF 文件,每个文件都在 ByteArrayOutputStream 中。我想合并这两个 PDF,我想使用 iText,但我不明白如何制作它,因为它只使用 InputStream。谁能帮帮我?

【问题讨论】:

    标签: pdf itext


    【解决方案1】:

    ByteArrayOutputStream 对象有一个返回byte[]toByteArray() 方法。 PdfReader 类有一个 constructor,它接受一个 byte[] 作为参数。拥有两个文件的 PdfReader 实例后,您可以将这些实例与 PdfCopyPdfSmartCopy 一起使用来合并文件。使用Concatenate 示例获取灵感。

    【讨论】:

      【解决方案2】:

      这是一个简单的代码 sn-p 除了@Lowagie 的答案。此函数读取输入 pdf 并写入 ByteArrayOutputStream 并在另一个 ByteArrayOutputStream 中创建第二个 Pdf。完成两个 Pdf 后,它会通过调用它们的 toByteArray() 来使用两个流中的 byte[],并使用它来创建新的 PdfReader

      private void mergeTwoPdf() {
          try {
              ByteArrayOutputStream os = new ByteArrayOutputStream();
              PdfWriter pdfWriter = new PdfWriter(os);
              PdfReader pdfReader = new PdfReader(new ByteArrayInputStream(Files.readAllBytes(Paths.get("/tmp/input.pdf"))));
              PdfDocument pdf = new PdfDocument(pdfReader, pdfWriter);
      
              // ... some process on pdf
      
              pdf.close();
      
              //Preparing to create final merged pdf
              PdfWriter resultWriter = new PdfWriter("/tmp/output.pdf");
              PdfDocument resultPdfDoc = new PdfDocument(resultWriter);
      
              // Create new PdfReader & PdfDocument from OutputStream of first pdf
              PdfReader reader = new PdfReader(new ByteArrayInputStream(os.toByteArray()));
              PdfDocument pdfDoc1 = new PdfDocument(reader);
      
              // Copy pages of first PdfDocument to Final PdfDocument
              pdfDoc1.copyPagesTo(1, pdfDoc1.getNumberOfPages(), resultPdfDoc);
      
              // Preparing to create Second PdfDocument in memory stream.
              ByteArrayOutputStream os2 = new ByteArrayOutputStream();
              PdfWriter writer2 = new PdfWriter(os2);
              PdfDocument pdfDoc2 = new PdfDocument(writer2);
      
              // Some dummy operation on second Pdf
              Document document = new Document(pdfDoc2, new PageSize(pdfDoc1.getFirstPage().getPageSizeWithRotation()));
              document.add(new Paragraph("This is a demo text"));
              document.close();
      
              // Create new PdfReader & PdfDocument from OutputStream of second PdfDocument
              PdfReader reader2 = new PdfReader(new ByteArrayInputStream(os2.toByteArray()));
              PdfDocument toAttach = new PdfDocument(reader2);
      
              // Copy pages of second PdfDocument to Final PdfDocument
              toAttach.copyPagesTo(1, toAttach.getNumberOfPages(), resultPdfDoc);
      
              resultPdfDoc.close();
              pdfDoc1.close();
              toAttach.close();
      
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-04
        • 2018-10-08
        • 1970-01-01
        • 2013-10-17
        • 2013-05-29
        • 2020-09-27
        • 2010-09-09
        • 2019-12-25
        相关资源
        最近更新 更多