近期遇到一个比较棘手的需求,将多个PDF文件合并为一个文件,经过万能的百度,找到了解决方案,记录下相关的信息
引入maven包
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>fontbox</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.1</version>
</dependency>
具体实现逻辑
public class MergePdfTest {
public static void main(String[] args) throws IOException, DocumentException {
List<String> files = new LinkedList();
files.add("C:\\data\\test\\1_XXXX.pdf");
files.add("C:\\data\\test\\2_XXXX.pdf");
files.add("C:\\data\\test\\3_XXXX.pdf");
files.add("C:\\data\\test\\4_XXXX.pdf");
files.add("C:\\data\\test\\5_XXXX.pdf");
String savepath = "C:\\data\\test\\output\\final.pdf";
mergePdfFiles(files, savepath);
}
/**
* 合并原pdf为新文件
*
* @param files pdf绝对路径集
* @param newfile 新pdf绝对路径
* @return
* @throws IOException
* @throws DocumentException
*/
public static void mergePdfFiles(List<String> files, String newfile) throws IOException, DocumentException {
Document document = new Document(new PdfReader(files.get(0)).getPageSize(1));
PdfCopy copy = new PdfCopy(document, new FileOutputStream(newfile));
document.open();
for (int i = 0; i < files.size(); i++) {
System.out.println("合并文件:"+files.get(i));
PdfReader reader = new PdfReader(files.get(i));
int n = reader.getNumberOfPages();
for (int j = 1; j <= n; j++) {
document.newPage();
PdfImportedPage page = copy.getImportedPage(reader, j);
copy.addPage(page);
}
}
document.close();
}
}