PDF和图片互转,pdf转图片(二)

109 阅读1分钟

以下是pdf转图片的逻辑代码,性能还没有测试,不过小系统使用还可以,没有卡顿

老规矩先上pom.xml

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>fontbox</artifactId>
    <version>2.0.1</version>
</dependency>
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.1</version>
</dependency>
<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>2.1.7</version>
</dependency>

核心代码:

package com.yfhx.tools;

import com.lowagie.text.pdf.PdfReader;
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;

/**
 * pdf文档解析为图片工具类
 */
public class Pdf2Image {

    /***
     * PDF文件转PNG图片,全部页数
     *
     * @param PdfFilePath pdf完整路径
     *  imgFilePath 图片存放的文件夹
     * @param dpi dpi越大转换后越清晰,相对转换速度越慢
     * @return
     */
    public static int pdf2Image(String PdfFilePath, String dstImgFolder, String imagePDFName, int dpi) throws IOException {
        File file = new File(PdfFilePath);
        PDDocument pdDocument;
        String imgPDFPath = file.getParent();
        int dot = file.getName().lastIndexOf('.');
        //String imagePDFName = file.getName().substring(0, dot); // 获取图片文件名
        String imgFolderPath = null;
        if (dstImgFolder.equals("")) {
            imgFolderPath = imgPDFPath + File.separator + imagePDFName;// 获取图片存放的文件夹路径
        } else {
            imgFolderPath = dstImgFolder + File.separator + imagePDFName;
        }

        if (createDirectory(imgFolderPath)) {

            pdDocument = PDDocument.load(file);
            PDFRenderer renderer = new PDFRenderer(pdDocument);
            /* dpi越大转换后越清晰,相对转换速度越慢 */
            PdfReader reader = new PdfReader(PdfFilePath);
            int pages = reader.getNumberOfPages();
            StringBuffer imgFilePath = null;
            for (int i = 0; i < pages; i++) {
                String imgFilePathPrefix = imgFolderPath + File.separator + imagePDFName;
                imgFilePath = new StringBuffer();
                imgFilePath.append(imgFilePathPrefix);
                imgFilePath.append("_");
                imgFilePath.append(String.valueOf(i + 1));
                imgFilePath.append(".png");
                File dstFile = new File(imgFilePath.toString());
                BufferedImage image = renderer.renderImageWithDPI(i, dpi);
                ImageIO.write(image, "png", dstFile);
            }
            pdDocument.close();
            return pages;
        }
        return 0;
    }

    /**
     * 创建文件夹
     *
     * @param folder
     * @return
     */
    private static boolean createDirectory(String folder) {
        File dir = new File(folder);
        if (dir.exists()) {
            return true;
        } else {
            return dir.mkdirs();
        }
    }


}