将pdf转化为图片的方法

将pdf转化为图片的方法

java 复制代码
package com.pdf.change2img;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.springframework.util.Base64Utils;

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

/**
 * @author 
 * @Description
 * @Date 2021/10/22 下午9:19
 */
public class PdfToImageUtil {
    /**
     * dpi越大转换后越清晰,相对转换速度越慢
     */
    private static final Integer DPI = 100;

    /**
     * 转换后的图片类型
     */
    private static final String IMG_TYPE = "png";

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

    /**
     *
     * @param base64PDF
     * @return
     * @throws IOException
     */
    public static List<String> pdfToImage2(String base64PDF) throws IOException {
        List<String> result = new ArrayList<>();
        byte[] decodePDF = Base64Utils.decode(base64PDF.getBytes());
        try (PDDocument document = PDDocument.load(decodePDF)) {
            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(Base64Utils.encodeToString(out.toByteArray()));
            }
        }
        return result;
    }
}
相关推荐
2601_949816222 小时前
Redis 配置日志
java
遇见你...2 小时前
A01-Spring概述
java·后端·spring
Via_Neo4 小时前
JAVA中以2为底的对数表示方式
java·开发语言
野生技术架构师5 小时前
一线大厂Java面试八股文全栈通关手册(含源码级详解)
java·开发语言·面试
廋到被风吹走6 小时前
【AI】Codex 多语言实测:Python/Java/JS/SQL 效果横评
java·人工智能·python
tERS ERTS6 小时前
MySQL中查看表结构
java
坊钰6 小时前
Java 死锁问题及其解决方案
java·开发语言·数据库
于先生吖6 小时前
SpringBoot+MQTT 无人健身房智能管控系统源码实战
java·spring boot·后端
仍然.7 小时前
算法题目---模拟
java·javascript·算法
wefly20177 小时前
纯前端架构深度解析:jsontop.cn,JSON 格式化与全栈开发效率平台
java·前端·python·架构·正则表达式·json·php