項目遇到需求 需要將多個pdf文件合成一個pdf文件,從網上找了半天完成了,做個筆記記錄下。
第一步,引入jar包
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.4.3</version> </dependency>
第二步,pdf操作通用方法
import java.io.File; import java.io.FileOutputStream; import com.itextpdf.text.Document; import com.itextpdf.text.pdf.PdfCopy; import com.itextpdf.text.pdf.PdfImportedPage; import com.itextpdf.text.pdf.PdfReader; /*** * pdf 相關操作 * */ public class PdfUtil { /** * 將多個PDF合並成一個PDF * @param files 源PDF路徑 * @param outputPath 合並后輸出的PDF路徑 * @param outputFileName 合並后輸出的PDF文件名 */ public static void mergePDF(String[] files, String outputPath, String outputFileName) throws Exception{ String sep = File.separator; Document document = null; PdfCopy copy = null; PdfReader reader = null; try { //首先驗證輸出文件是否存在,若不存在創建文件 String outFilePath=outputPath + sep +outputFileName; //先驗證是否存在輸出文件夾,不存在則創建 File fileDir = new File(outputPath); if (!fileDir.exists()) { fileDir.mkdirs(); } //驗證 合並后的文件是否存在若 不存在則新建文件 File outFile=new File(outFilePath); if(outFile.exists()){ outFile.createNewFile(); } document = new Document(new PdfReader(files[0]).getPageSize(1)); copy = new PdfCopy(document, new FileOutputStream(outFilePath)); document.open(); //循環導入合並pdf文件 for (int i = 0; i < files.length; i++) { reader = new PdfReader(files[i]); int numberOfPages = reader.getNumberOfPages(); for (int j = 1; j <= numberOfPages; j++) { document.newPage(); PdfImportedPage page = copy.getImportedPage(reader, j); copy.addPage(page); } } } catch (Exception e) { throw e; } finally { if (document != null) document.close(); if (reader != null) reader.close(); if (copy != null) copy.close(); } } }
第三步,測試
public class TestUtil { public static void main(String[] args) { String[] files = {"G:\\pdf\\a.pdf", "G:\\pdf\\b.pdf","G:\\pdf\\c.pdf"}; String outputPath= "G:\\outputPath\\djc"; String outputFileName ="merge.pdf"; try { PdfUtil.mergePDF(files,outputPath,outputFileName); } catch (Exception e) { } } }