目录

Java-PDF文件转图片pdf-to-img操作

Java-PDF文件转图片pdf-to-img操作

PDF文件转图片pdf-to-img操作

一、导入jar包

        <!--生成PDF-->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.11</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.icepdf.os</groupId>
            <artifactId>icepdf-core</artifactId>
            <version>6.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>fontbox</artifactId>
            <version>2.0.12</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.12</version>
        </dependency>

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.11</version>
        </dependency>

二、编写工具类

package com.example.excel.util;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.http.HttpUtil;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author: reshui
 * description:
 * DateTime:2024/12/27-10:41
 */
public class PdfToImgUtil {

    /**
     * 文件暂存地址
     */
    public static final String TEMP_FILE_PATH = System.getProperty("java.io.tmpdir");

    /**
     * pdf文件暂存地址
     */
    private static final String PDF_FILE_PATH = TEMP_FILE_PATH + File.separator + "contact_template_pdf";

    /**
     * pdf图片暂存地址
     */
    private static final String IMG_FILE_PATH = TEMP_FILE_PATH + File.separator + "pdf_to_img";

    /**
     * 时间格式
     */
    public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";

    /**
     * pdf-url转图片
     *
     * @param pdfUrl pdf-url
     */
    public static List<String> pdfToImg(String pdfUrl) throws Exception {
        String pdfFileName = FileNameUtil.getPrefix(pdfUrl);
        String formatDateTimeStamp = DateUtil.format(new Date(), YYYYMMDDHHMMSS);
        String pdfFilePath = PDF_FILE_PATH + File.separator + formatDateTimeStamp + ".pdf";
        String imgFilePath = IMG_FILE_PATH + File.separator + formatDateTimeStamp;
        File pdfFile = FileUtil.touch(pdfFilePath);
        HttpUtil.downloadFile(pdfUrl, pdfFile);
        List<File> imgList = writePdfToImg(pdfFile, imgFilePath, pdfFileName);
        List<String> imgUrlList = new ArrayList<>();
        for (File file : imgList) {
            //String imgUrl = ossFileService.uploadFile(file, null);
            imgUrlList.add(null);
        }
        return imgUrlList;
    }

    public static List<File> writePdfToImg(File pdfFile, String outputImagePath, String pdfFileName) throws IOException {
        List<File> imageFileList = new ArrayList<>();
        try (PDDocument document = PDDocument.load(pdfFile)) {
            PDFRenderer pdfRenderer = new PDFRenderer(document);
            for (int page = 0; page < document.getNumberOfPages(); page++) {
                // 渲染第 page 页的 PDF 为 BufferedImage
                BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 300);
                // 保存渲染后的图像,使用 JPEG 格式,你可以根据需要修改为 PNG 等格式
                String fileName = outputImagePath + File.separator + pdfFileName + "_page_" + (page + 1) + ".jpg";
                File file = FileUtil.touch(fileName);
                ImageIO.write(bim, "jpeg", file);
                imageFileList.add(file);
            }
        }
        return imageFileList;
    }

    public static void main(String[] args) throws Exception {
        List<String> stringList = pdfToImg("https://xxx");
        for (String url : stringList) {
            System.out.println(url);
        }
    }

}