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