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:使用Itext在Java中合并两个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:使用输入流合并两个PDF文件
要通过使用输入流合并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”的新文档,其中包含两个单独的文件。