目录
pom文件
<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.28</version> </dependency><!--hutool工具--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.19</version> </dependency>
工具类
import cn.hutool.core.date.DateUtil; import lombok.extern.slf4j.Slf4j; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; import java.util.List; /** * @描述: * @Date: 2023/6/3 15:05 * @Description: // PC002 * @Author: Duys **/ @Slf4j public class PdfToImageUtil { /** * dpi越大转换后越清晰,相对转换速度越慢 */ private static final Integer DPI = 100; /** * 转换后的图片类型 */ private static final String IMG_TYPE = "jpg"; /** * PDF转图片 * * @param fileContent PDF文件的二进制流 * @return 图片文件的二进制流 */ public static List<byte[]> pdfToImage(byte[] fileContent) throws IOException { List<byte[]> result = new ArrayList<>(); try (PDDocument document = PDDocument.load(fileContent)) { PDFRenderer renderer = new PDFRenderer(document); for (int i = 0; i < document.getNumberOfPages(); ++i) { BufferedImage bufferedImage = renderer.renderImageWithDPI(i, DPI); ByteArrayOutputStream out = new ByteArrayOutputStream(); ImageIO.write(bufferedImage, IMG_TYPE, out); result.add(out.toByteArray()); } } return result; } /** * PDF转图片 * * @param fileContent PDF文件的二进制流 * @return 图片文件的二进制流 */ public static byte[] pdfToImage2(byte[] fileContent) throws IOException { byte[] result = null; try (PDDocument document = PDDocument.load(fileContent)) { PDFRenderer renderer = new PDFRenderer(document); BufferedImage bufferedImage = renderer.renderImageWithDPI(0, DPI); ByteArrayOutputStream out = new ByteArrayOutputStream(); ImageIO.write(bufferedImage, IMG_TYPE, out); result = out.toByteArray(); } return result; } /** * @param imageBytes: 二进制数据 * @param savePath: 保存的路径 * @param imageName: 报告名称 * @描述: **/ public static Boolean saveImage(byte[] imageBytes, String savePath, String imageName) throws IOException { try { BufferedImage image = ImageIO.read(new ByteArrayInputStream(imageBytes)); File directory = new File(savePath); if (!directory.exists()) { directory.mkdirs(); } File outputFile = new File(directory, imageName); return ImageIO.write(image, "jpg", outputFile); } catch (Exception e) { log.error("保存图片报错", e); return false; } } public static String createDateDir(String basePath) throws Exception { String dayStr = DateUtil.format(DateUtil.date(Calendar.getInstance()), "yyyy-MM-dd"); String[] dayArr = dayStr.split("-"); String year = dayArr[0]; String month = dayArr[1]; String day = dayArr[2]; String yearDir = basePath + File.separator + year; File yearFile = new File(yearDir); if (!yearFile.exists()) { yearFile.mkdirs(); } String monthDir = yearDir + File.separator + month; File monthFile = new File(monthDir); if (!monthFile.exists()) { monthFile.mkdirs(); } String dayDir = monthDir + File.separator + day; File dayFile = new File(dayDir); if (!dayFile.exists()) { dayFile.mkdirs(); } //2020\10\15\ return year + File.separator + month + File.separator + day + File.separator; } }
测试代码
public static void main(String[] args) throws IOException { byte[] pdfBytes = HttpUtil.downloadBytes("http://127.0.0.1:8080/static/123.pdf"); byte[] imgBytes = PdfToImageUtil.pdfToImage2(pdfBytes); String savePath = "D:\\jfapp\\pdf"; String imageName = "12121313.jpg"; try { //saveImage(imgBytes, savePath, imageName); String path = createDateDir(savePath.concat("/pdf")); PdfToImageUtil.saveImage(imgBytes, savePath.concat("\\pdf\\").concat(path), "123.jpg"); } catch (Exception e) { e.printStackTrace(); } }