Java实现pdf文件转图片

文章顺序是按照测试类- -Service- -Service实现类- -工具类- - POM依赖。

  • test测试类里
    pdfPath:存放pdf源文件的地方
    imgfloder:存放生成的图片的地方,(我这次是把pdf每页都转成了一张图, 然后把一个pdf里生成的图们,都统一放到了一个文件夹里)
    dpi:好像是清晰度之类的,设置成这个150就可以
    /*** 将pdf切成图片* */@Testpublic void test2() throws IOException {String pdfPath="F:\\花鸢儿\\闪送科技电子发票.pdf";String imgfloder="F:\\OcrHtmlPath\\imgfolderpath";int dpi=150;List<PdfFileVo> pdfFileVo = pdftoimgService.PdfToImages(pdfPath, imgfloder, dpi);}
  • service类
public interface PdfChangeToImagesService {public List<PdfFileVo> PdfToImages(String pdfPath, String ImgFolderPath, int dpi) throws IOException;
}
  • Service实现类
package com.example.service;import com.example.vo.PdfFileVo;
import com.example.util.PdfToImageUtil;
import org.springframework.stereotype.Service;import java.io.File;
import java.util.ArrayList;
import java.util.List;/*** @program: pdftoimage* @description:* @author: Yuaner Hua* @create: 2021-02-25 14:26**/
@Service("/PdfToImage")
public class PdfChangeToImagesServiceImpl implements PdfChangeToImagesService {@Overridepublic List<PdfFileVo> PdfToImages(String pdfPath, String ImgFolderPath, int dpi) {PdfToImageUtil pdfToImageUtil = new PdfToImageUtil();List<File> files = pdfToImageUtil.pdfToImage(pdfPath, ImgFolderPath, dpi);int pagenum=1;//StringBuilder ImagenameAll =  new StringBuilder();System.out.println("开始输出=========");// 文件夹名称:foldername   文件夹地址:ImgFolderPath   总共多少页:pageNum  图片名称:imgnameList<PdfFileVo> pdfFileVos = new ArrayList<>();for (File file : files) {PdfFileVo pdfFileVo = new PdfFileVo();String AbsolutePath=file.getAbsolutePath();System.out.println("得到AbsolutePath:"+AbsolutePath);String[] strings = AbsolutePath.split("\\\\");//文件夹路径pdfFileVo.setImgFolderPath(strings[0]+"\\"+strings[1]+"\\"+strings[2]);//文件夹名称pdfFileVo.setFoldername(strings[3]);//文件名pdfFileVo.setImgnames(file.getName());//当前页码pdfFileVo.setPageNum(pagenum);System.out.println("pdfFileVo循环结束:"+pdfFileVo);//存入集合中pdfFileVos.add(pdfFileVo);pagenum++;}for (PdfFileVo  pdfFile : pdfFileVos) {System.out.println("想要的实体"+pdfFile);}return pdfFileVos;}
}
  • ServiceImpl里涉及的 pdfToImageUtil类
package com.example.util;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import com.lowagie.text.pdf.PdfReader;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;/*** @program: PdfToImageUtil* @description:PDF转图片的工具类* @author: Yuaner Hua* @create: 2021-02-25 14:26**/
public class PdfToImageUtil {/*** PDF文件转PNG图片,全部页数** @param PdfFilePath  pdf完整路径* @param dstImgFolder 图片存放的文件夹* @param dpi dpi越大转换后越清晰,相对转换速度越慢* @return 返回转换后图片集合list*/public static List<File> pdfToImage(String PdfFilePath, String dstImgFolder, int dpi) {UUID uuid = UUID.randomUUID();String uuId = uuid.toString();System.out.println(uuId);File file = new File(PdfFilePath);//定义集合保存返回图片数据List<File> fileList = new ArrayList<File>();@SuppressWarnings("resource")//抑制警告PDDocument pdDocument = new PDDocument();try {//String imagePDFName = file.getName().substring(0, dot); // 获取图片文件名String imgFolderPath = null;if (dstImgFolder.equals("")) {imgFolderPath = dstImgFolder + File.separator + uuId;// 获取图片存放的文件夹路径} else {imgFolderPath = dstImgFolder + File.separator + uuId;}if (createDirectory(imgFolderPath)) {pdDocument = PDDocument.load(file);PDFRenderer renderer = new PDFRenderer(pdDocument);/* dpi越大转换后越清晰,相对转换速度越慢 */PdfReader reader = new PdfReader(PdfFilePath);int pages = reader.getNumberOfPages();//System.out.println("pdf总共多少页-----" + pages);StringBuffer imgFilePath = null;for (int i = 0; i < pages; i++) {String imgFilePathPrefix = imgFolderPath + File.separator + "study";//System.out.println("文件夹地址imgFilePathPrefix=====" + imgFilePathPrefix);imgFilePath = new StringBuffer();imgFilePath.append(imgFilePathPrefix);imgFilePath.append("-");imgFilePath.append(String.valueOf(i+1));imgFilePath.append(".jpg");File dstFile = new File(imgFilePath.toString());BufferedImage image = renderer.renderImageWithDPI(i, dpi);ImageIO.write(image, "png", dstFile);fileList.add(dstFile);}System.out.println("PDF文档转PNG图片成功!");return fileList;} else {System.out.println("PDF文档转PNG图片失败:" + "创建" + imgFolderPath + "失败");return null;}} catch (IOException e) {e.printStackTrace();return null;}}//创建文件夹private static boolean createDirectory(String folder) {File dir = new File(folder);if (dir.exists()) {return true;} else {return dir.mkdirs();}}//删除文件夹//param folderPath 文件夹完整绝对路径public static void delFolder(String folderPath) {try {delAllFile(folderPath); //删除完里面所有内容String filePath = folderPath;filePath = filePath.toString();java.io.File myFilePath = new java.io.File(filePath);myFilePath.delete(); //删除空文件夹} catch (Exception e) {e.printStackTrace();}}//删除指定文件夹下所有文件//param path 文件夹完整绝对路径public static boolean delAllFile(String path) {boolean flag = false;File file = new File(path);if (!file.exists()) {return flag;}if (!file.isDirectory()) {return flag;}String[] tempList = file.list();File temp = null;for (int i = 0; i < tempList.length; i++) {if (path.endsWith(File.separator)) {temp = new File(path + tempList[i]);} else {temp = new File(path + File.separator + tempList[i]);}if (temp.isFile()) {temp.delete();}if (temp.isDirectory()) {delAllFile(path + "/" + tempList[i]);//先删除文件夹里面的文件delFolder(path + "/" + tempList[i]);//再删除空文件夹flag = true;}}return flag;}
}
  • pdf涉及的pom依赖 --pdfbox
     <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.12</version></dependency>
  • 运行结果

    !!觉得有用的小伙伴别忘了给博主一份关注和点赞哦,有问题可以给博主留言哦,我觉得应该是贴全了。

Java实现pdf文件转图片相关推荐

  1. Java实现PDF文件转图片(支持单页和多页)

    目录 一.背景 二.maven环境 2.1.依赖 2.2.插件 三.PDF工具类 四.实践 4.1.单页PDF形式的发票转为图片 4.2.多页PDF文档转为图片 结语 一.背景   很多小伙伴们不知道 ...

  2. java获取pdf文件首页图片,用来当做封面

    目录 1.Maven依赖 2.代码 3.执行结果 4.图片效果 1.Maven依赖 <dependency><groupId>org.apache.pdfbox</gro ...

  3. java 生成pdf文件,添加图片

    所需要的包: 1.  iText    下载地址:  http://nchc.dl.sourceforge.net/sourceforge/itext/itext-2.0.3.jar 2.  iTex ...

  4. java导出各种PDF文件(图片、表格、字体)

    java导出PDF文件(插入图片,表格,字体) 业务需求:需要根据系统里的各种数据动态生成PDF会议材料. 最终呈现图 思路 因为会议材料涉及各种数据,图片.同时还要有表格及字体样式的要求,所以需要用 ...

  5. java实现给PDF文件添加图片水印,java实现给PDF文件添加文字水印

    接上一篇,pdf跟tif 是一起做的 java实现 1.给PDF文件添加图片水印: public static void waterMark1(String inputFile,String outp ...

  6. Java去除PDF文件中的图片

    场景:调用第三方的接口取得的PDF文件流中有个不想要的图片,跟第三方接口沟通无果的情况下,自己想办法去掉吧. 解决思路:打算用PDFBox去掉PDF中的图片,但是在代码中resources.getIm ...

  7. 咖啡汪日志——JAVA导出pdf文件加水印 文字+图片、文字

    咖啡汪日志--JAVA导出pdf文件加水印 文字和图片.文字 hello,又大家见面了! 作为一只不是在戏精就是在戏精路上的哈士奇,今天要展示给大家的就是如何快捷地给pdf文件增加各种水印.嗷呜呜,前 ...

  8. java调用pdfbox转pdf文件为图片文件,有中文时在windows上正常,部署到linux下乱码

    最近遇到了一个很头疼的问题,我们的项目移动端需要一个读pdf的功能,但是手机端开发人员说移动端是用jquerymobile做的,不能直接甩pdf文件过去(原因是pdf文件太大),于是乎我们想到了2个解 ...

  9. JAVA根据PDF文件生成图片

    PDF文件生成图片 实现功能 根据上传的PDF文件,生成图片文件, 单页PDF,生成图片文件. 多页PDF,则生成zip压缩包. 一 : 文件生成效果 二 : 引入所需maven依赖 项目采用spri ...

最新文章

  1. PyTorch 数据并行处理
  2. ntp服务器响应每秒请求数量,批量、增量接口并发问题和NTP协议
  3. ajax post对象参数,ajax用post方法传递参数
  4. 滴滴数据挖掘竞赛题目
  5. 金融业如何更好地利用大数据实现突破性变革?(实例解读)
  6. hdu 1757 矩阵连乘
  7. C/Cpp / string 截取、替换、查找
  8. 轻松搞定对容器实例日志设置定期清理和回卷
  9. 浅谈微信smali注入
  10. 斗地主AI算法——第六章の牌型判断
  11. C#学习常用方法(3000)---Foreach ,in
  12. Charles抓包-解决显示乱码问题
  13. sql配置管理器服务是空的_Sql Server ReportingServices(SSRS)报表配置
  14. python相册特效模块_PIL包中Image模块的convert()函数的具体使用
  15. .net知识和学习方法系列(二十三)嵌套类
  16. 网络机顶盒刷机linux,手机、网络机顶盒刷机recovery教程[整理].doc
  17. 在nginx中编写html,码头不会在nginx html根目录中创建文件夹
  18. 阿里双十一数据库技术
  19. golang后端php前端,意外的golang(2018新年后端框架简单对比)
  20. Python实现截图?一文带你入门

热门文章

  1. crc错误 modbus poll_请教个MODBUS RTU的CRC校验问题?-工业支持中心-西门子中国
  2. 【避坑指“难”】react-dnd引入后,.mjs文件解析错误
  3. VMware16的安装及VMware配置Linux虚拟机(详解版)
  4. 四级网络工程师试题九
  5. android 4g ram够么,4G还不够,安卓手机内存极限是多少
  6. HDU 6069 Counting Divisors
  7. OC语言学习——继承和多态的一些随笔记
  8. 智能驾驶全产业链梳理
  9. A段架构设计_隽语集(Business Thinking _1201)
  10. 技术经理成长复盘-大重构