使用pdfbox将pdf转换成图片

导入pom文件

 		<dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>fontbox</artifactId>
            <version>2.0.22</version>
        </dependency>

        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.31</version>
            <!--3.0及以上没有load方法,PDDocument.load(file);-->
        </dependency>

        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>net.sf.cssbox</groupId>
            <artifactId>pdf2dom</artifactId>
            <version>2.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox-tools</artifactId>
            <version>2.0.22</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.10.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
            <version>2.0.49</version>
        </dependency>

整个pdf转换成图片

package pdfToPng;

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;

public class Pdf2Png {

    /**
     * 使用pdfbox将整个pdf转换成图片
     * 多页pdf会生成多页的图片,后缀会生成图片的位置序号
     *
     * @param fileAddress 文件地址 如:C:\\Users\\user\\Desktop\\test
     * @param filename    PDF文件名不带后缀名
     * @param type        图片类型 png和jpg
     */
    public static void pdf2png(String fileAddress, String filename, String type) {
        long startTime = System.currentTimeMillis();
        // 将文件地址和文件名拼接成路径 注意:线上环境不能使用\\拼接
        File file = new File(fileAddress + "\\" + filename + ".pdf");
        try {
            // 写入文件
            PDDocument doc = PDDocument.load(file);
            PDFRenderer renderer = new PDFRenderer(doc);
            int pageCount = doc.getNumberOfPages();
            for (int i = 0; i < pageCount; i++) {
                // dpi为144,越高越清晰,转换越慢  Windows native DPI
                BufferedImage image = renderer.renderImageWithDPI(i, 144);
                // 将图片写出到该路径下
                ImageIO.write(image, type, new File(fileAddress + "\\" + filename + "_" + (i + 1) + "." + type));
            }
            long endTime = System.currentTimeMillis();
            System.out.println("共耗时:" + ((endTime - startTime) / 1000.0) + "秒");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        pdf2png("C:\\Users\\MES\\Desktop\\test1", "1", "png");
    }
}


自由确定起始页和终止页

package pdfToPng;

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;

public class Pdf3Png {

    /**
     * 自由确定起始页和终止页
     *
     * @param fileAddress  文件地址 如:C:\\Users\\user\\Desktop\\test
     * @param filename     PDF文件名不带后缀名
     * @param indexOfStart 开始页  开始转换的页码,从0开始
     * @param indexOfEnd   结束页  停止转换的页码,-1为全部
     * @param type         图片类型 png 和jpg
     */
    public static void pdf3png(String fileAddress, String filename, int indexOfStart, int indexOfEnd, String type) {
        long startTime = System.currentTimeMillis();
        // 将文件地址和文件名拼接成路径 注意:线上环境不能使用\\拼接
        File file = new File(fileAddress + "\\" + filename + ".pdf");
        try {
            PDDocument doc = PDDocument.load(file);
            PDFRenderer renderer = new PDFRenderer(doc);
            int pageCount = doc.getNumberOfPages();
            for (int i = indexOfStart; i < indexOfEnd; i++) {
                // dpi为144,越高越清晰,转换越慢
                BufferedImage image = renderer.renderImageWithDPI(i, 144);
                // 将图片写出到该路径下
                ImageIO.write(image, type, new File(fileAddress + "\\" + filename + "_" + (i + 1) + "." + type));
            }
            long endTime = System.currentTimeMillis();
            System.out.println("共耗时:" + ((endTime - startTime) / 1000.0) + "秒");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static void main(String[] args) {
        pdf3png("C:\\Users\\MES\\Desktop\\", "1", 1, 1, "png");
    }

}


使用文件流整个pdf转换成图片

package pdfToPng;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.*;

public class Pdf4Png {

    /**
     * 使用文件流整个pdf转换成图片
     *
     * @param fileAddress 文件地址 如:C:\\Users\\user\\Desktop\\test
     * @param filename    PDF文件名不带后缀名
     * @param type        图片类型 png 、jpg
     */
    public static void pdfToImage(String fileAddress, String filename, String type) {
        long startTime = System.currentTimeMillis();

        List<Map<String, String>> list = new ArrayList<>();
        Map<String, String> resultMap = null;
        PDDocument pdDocument = null;

        String fileName = null;
        String imgPath = null;

        try {
            // 将文件地址和文件名拼接成路径 注意:线上环境不能使用\\拼接
            File FilePath = new File(fileAddress + "\\" + filename + ".pdf");
            // 文件流
            FileInputStream inputStream = new FileInputStream(FilePath);

            int dpi = 296;
            pdDocument = PDDocument.load(inputStream);
            PDFRenderer renderer = new PDFRenderer(pdDocument);
            int pageCount = pdDocument.getNumberOfPages();
            /* dpi越大转换后越清晰,相对转换速度越慢 */
            for (int i = 0; i < pageCount; i++) {
                resultMap = new HashMap<>();
                fileName = filename + "_" + (i + 1) + "." + type;
                imgPath = fileAddress + "\\" + fileName;
                BufferedImage image = renderer.renderImageWithDPI(i, dpi);
                ImageIO.write(image, type, new File(imgPath));
                resultMap.put("fileName", fileName);
                resultMap.put("filePath", imgPath); // 图片路径

                list.add(resultMap);
            }
            long endTime = System.currentTimeMillis();
            System.out.println("共耗时:" + ((endTime - startTime) / 1000.0) + "秒");  //转化用时
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // 这里需要关闭PDDocument,不然如果想要删除pdf文件时会提示文件正在使用,无法删除的情况
                pdDocument.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }


    public static void main(String[] args) throws FileNotFoundException {
        pdfToImage("C:\\Users\\MES\\Desktop\\", "1", "png");
    }
}

相关推荐

  1. 使用pdfboxpdf转换图片

    2024-04-21 11:02:01       12 阅读
  2. pythonpdf转换图片

    2024-04-21 11:02:01       28 阅读
  3. 【工具】使用asciidoctor-pdfadoc文件转换pdf

    2024-04-21 11:02:01       33 阅读
  4. 使用PythonHTML快速转换PDF

    2024-04-21 11:02:01       43 阅读
  5. 轻松使用pythonPDF转换图片(成功)

    2024-04-21 11:02:01       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-21 11:02:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-21 11:02:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-21 11:02:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-21 11:02:01       20 阅读

热门阅读

  1. 公司项目协作Git的使用

    2024-04-21 11:02:01       14 阅读
  2. 数据库慢SQL排查及优化问题

    2024-04-21 11:02:01       12 阅读
  3. DAY29| 491.递增子序列 ,46.全排列 ,47.全排列II

    2024-04-21 11:02:01       14 阅读
  4. 发票查验详情、C票据识别、发票ocr

    2024-04-21 11:02:01       14 阅读
  5. OCR API、文字识别接口、文字录入

    2024-04-21 11:02:01       15 阅读
  6. RTT设备驱动框架学习(GPIO)

    2024-04-21 11:02:01       15 阅读
  7. 23种设计模式之创建型模式篇

    2024-04-21 11:02:01       17 阅读
  8. 解惑深度学习中的困惑度Perplexity

    2024-04-21 11:02:01       16 阅读
  9. 《设计模式之美》第二章总结

    2024-04-21 11:02:01       15 阅读