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 为 BufferedImageBufferedImage 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);}}}