引入包
<!-- PDFBox -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.24</version>
</dependency>
<!-- iText -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.1.15</version>
<type>pom</type>
</dependency>
// 参数是文件路径 C:\Users\86158\Desktop\常用工具图标\1\2\3\4
public void imagesToPdf(String pdfFolderPath) {
if (StringUtils.isEmpty(pdfFolderPath)) {
return;
}
try {
// pdf文件名称前缀 可以根据自己要求自定义
List<String> pdfNameList = Arrays.asList(pdfFolderPath.split("\\\\"));
String pdfPrefixName = pdfNameList.get(pdfNameList.size() -4)+"-"+pdfNameList.get(pdfNameList.size() -3)
+"-"+pdfNameList.get(pdfNameList.size() -2)+"-"+pdfNameList.get(pdfNameList.size() -1);
// 获取所有文件名称
File[] files = new File(pdfFolderPath).listFiles();
// 遍历文件
for (File file : files) {
// pdf文件存储路径
String pdfPath = pdfFolderPath + "\\" + file.getName()+"\\"+ pdfPrefixName+"-"+file.getName() + ".pdf";
// 获取文件夹中的所有图片
List<File> imageFiles = getImageFiles(pdfFolderPath + "\\" + file.getName());
// 创建PDF文档
PDDocument document = new PDDocument();
imageFiles.forEach(imageFile -> {
PDPage page = new PDPage(PDRectangle.A4);
document.addPage(page);
// 写入内容
PDImageXObject pdImage = null;
try {
// 第一个参数是,照片的原始路径
pdImage = PDImageXObject.createFromFile(pdfFolderPath + "\\" +file.getName()+"\\"+ imageFile.getName(), document);
try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
contentStream.drawImage(pdImage, 0, 0, page.getMediaBox().getWidth(), page.getMediaBox().getHeight());
}
} catch (IOException e) {
throw new RuntimeException(e);
}
});
document.save(pdfPath);
document.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取文件夹中的所有图片文件
* 参数是照片所在文件夹路径
* @return
*/
private List<File> getImageFiles(String imageFolderPath) {
File folder = new File(imageFolderPath);
List<File> imageFiles = new ArrayList<>();
// 定义图片文件的后缀名
String[] imageExtensions = new String[]{"jpg"};
// 创建一个文件名过滤器
FilenameFilter imageFilter = (dir, name) -> {
for (String extension : imageExtensions) {
if (name.toLowerCase().endsWith("." + extension)) {
return true;
}
}
return false;
};
// 获取文件夹中的所有文件
File[] files = folder.listFiles(imageFilter);
// 如果文件不为空,则添加到列表中
if (files != null) {
Collections.addAll(imageFiles, files);
}
return imageFiles;
}