java实现合并目录下所有pdf文件
我们使用PDFBox工具来实现
加入依赖:
<!-- PDFBox -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.28</version>
</dependency>
首先我们需要一个方法去找出该目录下的所有pdf
public static List<File> listPDFFiles(String directoryPath) {
List<File> pdfFiles = new ArrayList<>();
File directory = new File(directoryPath);
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isFile() && file.getName().toLowerCase().endsWith(".pdf")) {
pdfFiles.add(file);
}
}
} else {
System.out.println("Directory not found: " + directoryPath);
}
return pdfFiles;
}
真正逻辑在MergeFile方法
public static File MergeFile(List<File> files, String targetPath) throws IOException {
PDFMergerUtility mergePdf = new PDFMergerUtility();
for (File file : files) {
if (file.exists() && file.isFile()) {
mergePdf.addSource(file);
}
}
// 设置名称
mergePdf.setDestinationFileName(targetPath);
// 合并pdf
mergePdf.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());
return new File(targetPath);
}首先PDFMergerUtility mergePdf = new PDFMergerUtility();
创建一个 PDFMergerUtility 对象,这是 Apache PDFBox 提供的用于合并PDF文件的实用工具类。mergePdf.setDestinationFileName(targetPath);
设置合并后生成的PDF文件的路径和名称为 targetPath。
mergePdf.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());
执行PDF文件的合并操作。
MemoryUsageSetting.setupMainMemoryOnly() 设置内存使用设置为主内存,这意味着合并操作将尽量使用主内存来执行。
然后main方法调用即可:
public static void main(String[] args) throws IOException {
List<File> files = new ArrayList<File>();
String directoryPath = "E:\\Baidu\\";
String pdf = directoryPath + "merged.pdf";
List<File> pdfFiles = listPDFFiles(directoryPath);
for (File pdfFile : pdfFiles) {
files.add(pdfFile);
}
File f = MergeFile(files, pdf);
System.out.println(f.length());
}
全部代码如下:
package com.dreams;
import org.apache.pdfbox.io.MemoryUsageSetting;
import org.apache.pdfbox.multipdf.PDFMergerUtility;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class MergePdfFile {
public static File MergeFile(List<File> files, String targetPath) throws IOException {
PDFMergerUtility mergePdf = new PDFMergerUtility();
for (File file : files) {
if (file.exists() && file.isFile()) {
mergePdf.addSource(file);
}
}
// 设置名称
mergePdf.setDestinationFileName(targetPath);
// 合并pdf
mergePdf.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());
return new File(targetPath);
}
public static List<File> listPDFFiles(String directoryPath) {
List<File> pdfFiles = new ArrayList<>();
File directory = new File(directoryPath);
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isFile() && file.getName().toLowerCase().endsWith(".pdf")) {
pdfFiles.add(file);
}
}
} else {
System.out.println("Directory not found: " + directoryPath);
}
return pdfFiles;
}
public static void main(String[] args) throws IOException {
List<File> files = new ArrayList<File>();
String directoryPath = "E:\\Baidu\\";
String pdf = directoryPath + "merged.pdf";
List<File> pdfFiles = listPDFFiles(directoryPath);
for (File pdfFile : pdfFiles) {
files.add(pdfFile);
}
File f = MergeFile(files, pdf);
System.out.println(f.length());
}
}


