0


Java实现pdf转图片的工具类(三种方法实现PDF转图片的案例)【亲测可用】

提示:有些时候我们需要在项目中展示PDF,所以我们可以将PDF转为图片,然后已图片的方式展示,效果很好。Java使用各种技术将pdf转换成图片格式,并且内容不失帧。清晰可见,该工具类也是开发中常用到的工具类。其中包括单页pdf转换成一张图片、多页pdf转换成多页图片、。 并且本人亲自使用过的。

文章目录


前言

提示:生成图片以后需要将文件流关闭,不然删除文件会删除失败

很多人不知道怎么将pdf的文件转换成图片格式的,而且网上有很例子是跑不通的,同是也是方便自己在用到该需求的时候能够快速度地写出来,所以整理了几种pdf转换成图片的方法工具类,


提示:以下是本篇文章正文内容,下面案例可供参考

一、使用开源库Apache PDFBox将PDF转换为图片

1、引入依赖库

<dependency><groupId>org.apache.pdfbox</groupId><artifactId>fontbox</artifactId><version>2.0.9</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.9</version></dependency><!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency>

2、实现pdf转换图片工具类(多页pdf会生成多页的图片,后缀会生成图片的位置序号)

importorg.apache.pdfbox.pdmodel.PDDocument;importorg.apache.pdfbox.rendering.PDFRenderer;importjavax.imageio.ImageIO;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;publicclassPdf2Png{/**
     * 使用pdfbox将整个pdf转换成图片
     *
     * @param fileAddress 文件地址 如:C:\\Users\\user\\Desktop\\test
     * @param filename    PDF文件名不带后缀名
     * @param type        图片类型 png 和jpg
     */publicstaticvoidpdf2png(String fileAddress,String filename,String type){long startTime =System.currentTimeMillis();// 将文件地址和文件名拼接成路径 注意:线上环境不能使用\\拼接File file =newFile(fileAddress +"\\"+ filename +".pdf");try{// 写入文件PDDocument doc =PDDocument.load(file);PDFRenderer renderer =newPDFRenderer(doc);int pageCount = doc.getNumberOfPages();for(int i =0; i < pageCount; i++){// dpi为144,越高越清晰,转换越慢BufferedImage image = renderer.renderImageWithDPI(i,144);// Windows native DPI// 将图片写出到该路径下ImageIO.write(image, type,newFile(fileAddress +"\\"+ filename +"_"+(i +1)+"."+ type));}long endTime =System.currentTimeMillis();System.out.println("共耗时:"+((endTime - startTime)/1000.0)+"秒");//转化用时}catch(IOException e){
            e.printStackTrace();}}publicstaticvoidmain(String[] args){pdf2png("C:\\Users\\user\\Desktop\\test","测试","png");}}
使用Apache PDFBox将PDF转换为图片成功

在这里插入图片描述

3、按照固定页数来将pdf转换成图片的工具类(自由选择pdf转换图片的页数)

importorg.apache.pdfbox.pdmodel.PDDocument;importorg.apache.pdfbox.rendering.PDFRenderer;importjavax.imageio.ImageIO;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;publicclassPdf2Png{/**
     * 自由确定起始页和终止页
      * @param fileAddress 文件地址 如:C:\\Users\\user\\Desktop\\test
     * @param filename    PDF文件名不带后缀名
     * @param indexOfStart 开始页  开始转换的页码,从0开始
     * @param indexOfEnd 结束页  停止转换的页码,-1为全部
     * @param type        图片类型 png 和jpg
     */publicstaticvoidpdf2png(String fileAddress,String filename,int indexOfStart,int indexOfEnd,String type){long startTime =System.currentTimeMillis();// 将文件地址和文件名拼接成路径 注意:线上环境不能使用\\拼接File file =newFile(fileAddress+"\\"+filename+".pdf");try{PDDocument doc =PDDocument.load(file);PDFRenderer renderer =newPDFRenderer(doc);int pageCount = doc.getNumberOfPages();for(int i = indexOfStart; i < indexOfEnd; i++){// dpi为144,越高越清晰,转换越慢BufferedImage image = renderer.renderImageWithDPI(i,144);// Windows native DPI// 将图片写出到该路径下ImageIO.write(image, type,newFile(fileAddress+"\\"+filename+"_"+(i+1)+"."+type));}long endTime =System.currentTimeMillis();System.out.println("共耗时:"+((endTime - startTime)/1000.0)+"秒");// 转换用时}catch(IOException e){
            e.printStackTrace();}}publicstaticvoidmain(String[] args){pdf2png("C:\\Users\\user\\Desktop\\test","思泰得流式检测报告-00420299-任蛆小-RA202302100117",2,3,"png");}}
自由页数转换成功

在这里插入图片描述

二、使用PDF Box将多页的pdf转换一张长图片的方法

1、引入PDF Box需要的依赖

<dependency><groupId>net.sf.cssbox</groupId><artifactId>pdf2dom</artifactId><version>1.7</version></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.12</version></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox-tools</artifactId><version>2.0.12</version></dependency>

2、编写将多页PDF转换多张图片的工具类

importcom.lowagie.text.pdf.PdfReader;importorg.apache.pdfbox.pdmodel.PDDocument;importorg.apache.pdfbox.rendering.PDFRenderer;importjavax.imageio.ImageIO;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;publicclassPdf2Png{/***
     * PDF文件转PNG图片,全部页数
     * @param pdfFilePath pdf完整路径:C:\\Users\\user\\Desktop\\test\\1234.pdf
     * @param dpi dpi越大转换后越清晰,相对转换速度越慢
     */publicstaticvoidpdf2Image(String pdfFilePath,int dpi){long startTime =System.currentTimeMillis();File file =newFile(pdfFilePath);PDDocument pdDocument;try{String imgPdfPath = file.getParent();int dot = file.getName().lastIndexOf('.');// 获取图片文件名String imagePdfName = file.getName().substring(0, dot);
            pdDocument =PDDocument.load(file);PDFRenderer renderer =newPDFRenderer(pdDocument);/* dpi越大转换后越清晰,相对转换速度越慢 */PdfReader reader =newPdfReader(pdfFilePath);int pages = reader.getNumberOfPages();StringBuffer imgFilePath;for(int i =0; i < pages; i++){String imgFilePathPrefix = imgPdfPath +File.separator + imagePdfName;
                imgFilePath =newStringBuffer();
                imgFilePath.append(imgFilePathPrefix);
                imgFilePath.append("_");
                imgFilePath.append((i +1));
                imgFilePath.append(".png");File dstFile =newFile(imgFilePath.toString());BufferedImage image = renderer.renderImageWithDPI(i, dpi);ImageIO.write(image,"png", dstFile);}long endTime =System.currentTimeMillis();System.out.println("共耗时:"+((endTime - startTime)/1000.0)+"秒");//转化用时}catch(IOException e){
            e.printStackTrace();}}}

三、使用文件流整个pdf转换成图片 (生成图片,并将生成的图片路径返回)

importorg.apache.pdfbox.pdmodel.PDDocument;importorg.apache.pdfbox.rendering.PDFRenderer;importjavax.imageio.ImageIO;importjava.awt.image.BufferedImage;importjava.io.*;importjava.util.*;publicclassPdf2Png{/**
     * 使用文件流整个pdf转换成图片
     * @param fileAddress 文件地址 如:C:\\Users\\user\\Desktop\\test
     * @param filename    PDF文件名不带后缀名
     * @param type        图片类型 png 、jpg
     */publicstaticList<Map<String,String>>pdfToImage(String fileAddress,String filename,String type){long startTime =System.currentTimeMillis();List<Map<String,String>> list =newArrayList<>();Map<String,String> resultMap =null;PDDocument pdDocument =null;String fileName =null;String imgPath =null;try{// 将文件地址和文件名拼接成路径 注意:线上环境不能使用\\拼接FileFilePath=newFile(fileAddress +"\\"+ filename +".pdf");// 文件流FileInputStream inputStream =newFileInputStream(FilePath);int dpi =296;
            pdDocument =PDDocument.load(inputStream);PDFRenderer renderer =newPDFRenderer(pdDocument);int pageCount = pdDocument.getNumberOfPages();/* dpi越大转换后越清晰,相对转换速度越慢 */for(int i =0; i < pageCount; i++){
                resultMap =newHashMap<>();
                fileName = filename +"_"+(i +1)+"."+ type;
                imgPath = fileAddress +"\\"+ fileName;BufferedImage image = renderer.renderImageWithDPI(i, dpi);ImageIO.write(image, type,newFile(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();}}return list;}publicstaticvoidmain(String[] args)throwsFileNotFoundException{pdfToImage("C:\\Users\\user\\Desktop\\test","测试","png");}}

总结

以上好几种pdf转图片的方法,该方法可直接拿过去用,或者按照自己的逻辑进行修改使用。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面就来一起学习学习吧!!!

标签: java pdf spring boot

本文转载自: https://blog.csdn.net/qq_44753710/article/details/129294624
版权归原作者 一纸红尘轻似梦 所有, 如有侵权,请联系我们删除。

“Java实现pdf转图片的工具类(三种方法实现PDF转图片的案例)【亲测可用】”的评论:

还没有评论