使用Java合并PDF
PDFMergerUtility 类用于将多个 PDF 文档合并成单个 PDF 文档。PDFMergerUtility 类将接收多个 PDF 文件并将它们合并,并将结果保存为新文档。使用 Java 合并 PDF 需要安装 Apache 库。可能有多种方法可以使用 Java 合并 PDF 文件。
定义:使用Java合并PDF
示例
输入 - PDF1 = Alice.pdf,PDF2 = Bob.pdf
输出 - newMerged.pdf // PDF1 和 PDF2 合并后的 PDF
程序代码
// Merging two pdf documents here import org.apache.pdfbox.multipdf.PDFMergerUtility; import org.apache.pdfbox.pdmodel.PDDocument; import java.io.File; import java.io.IOException; public class GFG { public static void main(String[] args) throws IOException { // loading all the pdf files we wish to merge File file1 = new File( "/Users/abhilasha/Desktop/Merging Pdfs/file1.pdf"); File file2 = new File("/Users/abhilasha/Desktop/Merging Pdfs/file2.pdf"); // Instantiating PDFMergerUtility class PDFMergerUtility obj = new PDFMergerUtility(); // Setting the destination file path obj.setDestinationFileName("/Users/abhilasha/Desktop/Merging Pdfs/newMerged.pdf"); // Add all source files, to be merged obj.addSource(file1); obj.addSource(file2); // Merging documents obj.mergeDocuments(); System.out.println( "PDF Documents merged to a single file"); } }
算法
使用 Apache 库,我们需要遵循以下步骤来合并多个 PDF 文档:
步骤 1 - 首先,我们需要安装 PDFMergerUtility 类。
步骤 2 - 接下来,使用 setDestinationFileName() 方法设置目标文件。
步骤 3 - 现在,使用 addSource() 方法设置源文件。
步骤 4 - 最后一步,我们使用 PDFMergerUtility 类的 mergeDocuments() 方法来合并 PDF 文档。
输出
代码执行前:
代码执行后:
方法
方法 1 - 使用 Java 中的 Itext 合并两个 PDF 文件
方法 2 - 使用 Java 中的 InputStream 合并多个 PDF 文件
方法 1:使用 Java 中的 Itext 合并两个 PDF 文件
代码
import java.io.FileInputStream;import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; 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. * @author w3spoint */public class PDFMergeExample { 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."); } public static void main(String args[]){ try { //Prepare input pdf file list as list of input stream. List<InputStream> inputPdfList = new ArrayList<InputStream>(); inputPdfList.add(new FileInputStream("D:\TestFile1.pdf")); inputPdfList.add(new FileInputStream("D:\TestFile2.pdf")); //Prepare output stream for merged pdf file. OutputStream outputStream = new FileOutputStream("D:\MergeFile.pdf"); //call method to merge pdf files. mergePdfFiles(inputPdfList, outputStream); } catch (Exception e) { e.printStackTrace(); } } }
输出
Pdf file merged successfully.
方法 2:使用 Java 中的 InputStream 合并两个 PDF 文件
要使用 InputStream 合并 PDF 文件,我们需要使用另一个 mergeFiles() 方法,并传入一个输入流数组。
程序,代码
import com.spire.pdf.PdfDocument import com.spire.pdf.PdfDocumentBase; import java.io.*; public class MergePdfsUsingInputStreams { public static void main(String []args) throws FileNotFoundException { //Load the PDF files into FileInputStream objects FileInputStream stream1 = new FileInputStream("File1.pdf"); FileInputStream stream2 = new FileInputStream("File2.pdf"); FileInputStream stream3 = new FileInputStream("File3.pdf"); //Create a InputStream array for the FileInputStream objects InputStream[] streams = new FileInputStream[]{stream1, stream2, stream3}; //Merge the PDF files PdfDocumentBase pdf = PdfDocument.mergeFiles(streams); //Create a OutputStream for the merged PDF OutputStream outputStream = new FileOutputStream("Merge.pdf"); //Save the merged PDF file pdf.save(outputStream); } }
输出
Pdf file merged successfully.
结论
如果我们检查提到的路径,我们可以看到名为“newMerged”的新文档已包含两个单独的文件。
广告