java merge 2 pdf字节数组

llew8vvj  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(506)

我接收两个PDF,每个PDF作为一个字节数组。现在我有两个数组,a[]和b[]。我连接它们并将它们保存到c[]。当我将c[]转换为pdf时,只显示第二个文件。当我检查c[]的长度时,它是len(a[])+len(b[])。
我在不同的编程语言中发现了其他问题,他们说我不能像这样连接它们,我们需要使用一个pdf创作库。既然我从接收字节数组开始,那么在我的情况下还有什么可以工作的吗?

vaqhlq81

vaqhlq811#

不能只是串联字节数组。
您可以在这里找到几个合并pdf文件的解决方案如何在java中将两个pdf文件合并成一个?
如果你有pdf文件,你可以使用pdfbox的pdfmergerutility。

PDFMergerUtility ut = new PDFMergerUtility();
ut.addSource(...);
ut.addSource(...);
ut.addSource(...);
ut.setDestinationFileName(...);
ut.mergeDocuments();

如果pdf文件不可用,您可以使用itext的其他解决方案

import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfWriter;

/**
 * This class is used to merge two or more 
 * existing pdf file using iText jar.
 */
public class PDFMerger {

   static void mergePdfFiles(List<InputStream> inputPdfList,
                             OutputStream outputStream) throws Exception{
      //Create document and pdfReader objects.
      Document document = new Document();
      List<PdfReader> readers = 
              new ArrayList<PdfReader>();
      int totalPages = 0;

      //Create pdf Iterator object using inputPdfList.
      Iterator<InputStream> pdfIterator = 
          inputPdfList.iterator();

      // Create reader list for the input pdf files.
      while (pdfIterator.hasNext()) {
          InputStream pdf = pdfIterator.next();
          PdfReader pdfReader = new PdfReader(pdf);
          readers.add(pdfReader);
          totalPages = totalPages + pdfReader.getNumberOfPages();
      }

      // Create writer for the outputStream
      PdfWriter writer = PdfWriter.getInstance(document, outputStream);

      //Open document.
      document.open();

      //Contain the pdf data.
      PdfContentByte pageContentByte = writer.getDirectContent();

      PdfImportedPage pdfImportedPage;
      int currentPdfReaderPage = 1;
      Iterator<PdfReader> iteratorPDFReader = readers.iterator();

      // Iterate and process the reader list.
      while (iteratorPDFReader.hasNext()) {
        PdfReader pdfReader = iteratorPDFReader.next();
        //Create page and add content.
        while (currentPdfReaderPage <= pdfReader.getNumberOfPages()) {
              document.newPage();
              pdfImportedPage = 
              writer.getImportedPage(pdfReader,currentPdfReaderPage);
              pageContentByte.addTemplate(pdfImportedPage, 0, 0);
              currentPdfReaderPage++;
        }
        currentPdfReaderPage = 1;
     }

     //Close document and outputStream.
     outputStream.flush();
     document.close();
     outputStream.close();

     System.out.println("Pdf files merged successfully.");
   }

}

相关问题