<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
<!-- 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>
import lombok.extern.slf4j.Slf4j;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageFitDestination;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem;
import org.jeecg.modules.manage.dto.FilePageContentsDto;
import java.io.File;
import java.util.List;
@Slf4j
public class ImagesToPdfSort {
/**
* 将图片转换成PDF并添加标签
* @param filePageContents 图片地址以及标签名称
* @param storagePath PDF文件存储路径
* @param fileName PDF文件名称
* @param imagesPath 图片地址
* @throws Exception
* @return
*/
public static String imagesToPdfSort(List<FilePageContentsDto> filePageContents , String storagePath, String fileName, String imagesPath) {
try{
// pdf文件存储路径
fileName = storagePath + "/" + fileName + ".pdf";
File file = new File(fileName);
if (!file.exists()) {
file.createNewFile();
}
// 创建PDF文档
PDDocument document = new PDDocument();
// 获取书签结构
PDDocumentOutline documentOutline = new PDDocumentOutline();
document.getDocumentCatalog().setDocumentOutline(documentOutline);
// 保存当前书签名称
String currentBookmarkName = "";
for (FilePageContentsDto flePageContents : filePageContents) {
// 添加一个页面
PDPage page = new PDPage(PDRectangle.A4);
document.addPage(page);
if(!flePageContents.getFileContentName().equals(currentBookmarkName)){
currentBookmarkName = flePageContents.getFileContentName();
// 创建书签
PDOutlineItem bookmark = new PDOutlineItem();
bookmark.setTitle(flePageContents.getFileContentName());
// bookmark.setDestination(page);
documentOutline.addLast(bookmark);
// 设置书签的位置
PDPageFitDestination destination = new PDPageFitDestination();
destination.setPage(page);
bookmark.setDestination(destination);
}
// 写入内容
PDImageXObject pdImage = PDImageXObject.createFromFile(imagesPath + "\\" + flePageContents.getFileName(), document);
try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
contentStream.drawImage(pdImage, 0, 0, page.getMediaBox().getWidth(), page.getMediaBox().getHeight());
}
}
document.save(fileName);
}catch (Exception e){
e.printStackTrace();
}
return storagePath;
}
}