当前位置: 首页 > news >正文

pdf转png工具类

pdf转图片的工具类

1、需要引入的包

<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.4</version></dependency>

2、工具类

public static void main(String[] args) {String path="D://test/21.pdf";String outpath="D://filesdata/21.png";pdfToImage(path,outpath);
}public static List<String> pdfToImage(String path, String outpath) {int DPI = 130;try {Path pdfPath = Paths.get(path);byte[] bytes = Files.readAllBytes(pdfPath);PDDocument doc = PDDocument.load(bytes);int pageCount = doc.getNumberOfPages();/* log.info("PDF转图片流,总页数:{}", pageCount);*/PDFRenderer pdfRenderer = new PDFRenderer(doc);// 不知道图片的宽和高,所以先定义个nullBufferedImage pdfImage = null;// pdf有多少页int y = 0;List<BufferedImage> list = new ArrayList<>(pageCount);// 所有页高度综合int totalHeight = 0;if (pageCount > 0) {for (int i = 0; i < pageCount; i++) {// 每页pdf内容BufferedImage bim = pdfRenderer.renderImageWithDPI(i, DPI, ImageType.RGB);totalHeight += bim.getHeight();list.add(bim);}}System.out.println(list.size());List<String> picList = new ArrayList<>();int i = 1;for (BufferedImage bim : list) {// 如果是第一页需要初始化 BufferedImageif (bim != null) {String out = outpath + i + ".png";ByteArrayOutputStream baos = new ByteArrayOutputStream();ImageIO.write(bim, "png", baos);baos.flush();byte[] imageInByte = baos.toByteArray();File file = new File(out);//打开输入流FileImageOutputStream imageOutput = new FileImageOutputStream(file);//将byte写入硬盘imageOutput.write(imageInByte, 0, imageInByte.length);imageOutput.flush();imageOutput.close();picList.add(out);i++;}}doc.close();return picList;} catch (Exception e) {return null;}
}

相关文章:

  • 【力扣面试经典150题】(链表)K 个一组翻转链表
  • bug场景记录
  • C/C++ 实现Windows注册表操作
  • 华为obs上传下载-Java版 2023-11-23
  • vue3父组件提交校验多个子组件
  • Python通过selenium调用IE11浏览器报错解决方法
  • 网络知识学习(笔记二)
  • KaiwuDB 监控组件及辅助 SQL 调优介绍
  • 04.webpack中css的压缩和抽离
  • 数据结构【栈】
  • Boost获取当前时间并格式化为字符串
  • 宏集新闻 | 虹科传感器事业部正式更名为宏集科技
  • 虚拟摇杆OnJoystickMove未被调用,角色不移动
  • PaddleDetection训练目标检测模型
  • 科技的成就(五十三)
  • [ JavaScript ] 数据结构与算法 —— 链表
  • ES6 ...操作符
  • flutter的key在widget list的作用以及必要性
  • laravel 用artisan创建自己的模板
  • 分类模型——Logistics Regression
  • 回顾 Swift 多平台移植进度 #2
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 两列自适应布局方案整理
  • 前嗅ForeSpider中数据浏览界面介绍
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 微信小程序填坑清单
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​configparser --- 配置文件解析器​
  • # 透过事物看本质的能力怎么培养?
  • #NOIP 2014# day.2 T2 寻找道路
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (2)(2.10) LTM telemetry
  • (arch)linux 转换文件编码格式
  • (poj1.2.1)1970(筛选法模拟)
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (算法)前K大的和
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (学习日记)2024.01.09
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • ./configure,make,make install的作用
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [20140403]查询是否产生日志
  • [2016.7 day.5] T2
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians
  • [Android Pro] Notification的使用
  • [Excel] vlookup函数
  • [Git].gitignore失效的原因
  • [halcon案例2] 足球场的提取和射影变换
  • [HTML]Web前端开发技术7(HTML5、CSS3、JavaScript )CSS的定位机制——喵喵画网页
  • [iOS]iOS获取设备信息经常用法