将图片转换成PDF并添加标签

<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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值