java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java PDF转图片

Java快速实现PDF转图片功能实例代码

作者:知识浅谈

PDFBox是一个开源Java类库,用于读取和创建PDF文档,它支持文本提取、表单处理、文档加密解密、合并分割、内容覆盖追加、文档打印和转换等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

PDFBox是一个BSD许可下的源码开放项目,它是一个专门为开发人员读取和创建PDF文档而准备的纯Java类库。

引入依赖

<!--pdf转图片-->
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.29</version>
</dependency>

编写PdfToImageUtil 工具类

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.List;

/**
 * @Author: 公众号:知识浅谈
 * @Description: pdf转图片工具类
 * @Version: 1.0
 */
@Slf4j
public class PdfToImageUtil {
    /*dpi 越大图片越清晰*/
    private static final Integer DPI = 100;

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

    /**
     * PDF转图片(多页)
     * @param fileContent pdf文件的二进制流
     * @return 图片文件的二进制流
     * @throws Exception
     */
    public static List<byte[]> pdfToImage(byte[] fileContent) throws Exception {
        List<byte[]> imageList = new ArrayList<byte[]>();
        PDDocument document=null;
        try{
            document = PDDocument.load(fileContent);
            PDFRenderer pdfRenderer = new PDFRenderer(document);
            for (int i = 0; i < document.getNumberOfPages(); i++) {
                BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(i, DPI);
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                ImageIO.write(bufferedImage, IMG_TYPE, out);
                imageList.add(out.toByteArray());
            }
        }finally {
            document.close();
        }
        return imageList;
    }


    /**
     * PDF转图片(单页)
     * @param fileContent pdf文件的二进制流
     * @return 图片文件的二进制流
     * @throws Exception
     */
    public static byte[] pdfToImageOne(byte[] fileContent) throws Exception {
        byte[] image = null;
        PDDocument document=null;
        try{
            document = PDDocument.load(fileContent);
            PDFRenderer pdfRenderer = new PDFRenderer(document);
            BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(0, DPI);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ImageIO.write(bufferedImage, IMG_TYPE, out);
            image = out.toByteArray();
        }finally {
            document.close();
        }
        return image;
    }

    public static Boolean saveImage(byte[] imageBytes, String savePath,String fileName) throws Exception {
        try {
            BufferedImage image = ImageIO.read(new ByteArrayInputStream(imageBytes));
            File directory = new File(savePath);
            if(!directory.exists()){
                directory.mkdirs();
            }
            File file1 = new File(directory,fileName);
            return ImageIO.write(image, IMG_TYPE, file1);
        } catch (IOException e) {
            log.error("保存文件错误");
            return false;
        }
    }
}

方法实现

 * pdf转图片
 */
@GetMapping(value = "/pdfToPng")
@Log(title = "证件模板", businessType = BusinessType.OTHER)
public void pdfToPng(HttpServletRequest request,HttpServletResponse response) {
    try {
        File file = new File("D:\\pdf\\test.pdf");
        FileInputStream fileInputStream = new FileInputStream(file);
        byte[] pdfBytes = new byte[(int) file.length()];
        fileInputStream.read(pdfBytes);
        fileInputStream.close();

        byte[] bytes = PdfToImageUtil.pdfToImageOne(pdfBytes);
        ServletOutputStream outputStream = response.getOutputStream();
        response.setContentType("image/jpeg");
        response.setContentLength(bytes.length);
        outputStream.write(bytes);
    }catch (Exception e){
        log.error("pdf转图片异常{}", e.getMessage());
    }
}

运行之后显示的结果如下

总结 

到此这篇关于Java快速实现PDF转图片功能的文章就介绍到这了,更多相关Java PDF转图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文