从PDF中提取图片
由于工作需要,要从pdf文件中提取出图片保存到本地,项目中就引用到了Apache PDFBox库。
1 什么是Apache PDFBox?
Apache PDFBox库,一个用于处理PDF文档的开源Java工具。它允许用户创建全新的PDF文件,操作现有的PDF文档,以及从PDF文件中提取内容等。

1.1 Apache PDFBox的主要功能
- Extract Text:从PDF文件中提取Unicode文本。
- Split & Merge:将单个PDF拆分成多个文件,或将多个PDF文件合并为一个文件。
- Fill Forms:从PDF表单中提取数据或填写PDF表单。
- Preflight:根据PDF/A-1b标准验证PDF文件。
- Print:使用标准Java打印API打印PDF文件。
- Save as Image:将pdf文件保存为图像文件,如PNG或JPEG。
- Create PDFs:从头开始创建新的PDF文件,包含嵌入字体和图像。
- Signing:对PDF文件进行数字签名。
1.2 Apache PDFBox的组件

1.3 Apache PDFBox相关依赖
| PDFBox版本 | JDK最低版本 | Maven版本 |
|---|---|---|
| PDFBox4.0.0-SNAPSHOT | JDK 11 | Maven 3 |
| PDFBox 3.0.x | JDK 8 (目前测试进行到Java 19) | Maven 3 |
| PDFBox 2.0.x | JDK 7 | Maven 3 |
2 从pdf中提取图片代码实现
2.1 SpringBoot工程引入依赖
该SpringBoot项目使用Java8。
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.21</version>
</dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.29</version>
</dependency>
2.2 测试代码
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;public class PdfGetJpg {public static void main(String[] args) {// 创建文件对象File file = new File("C:\\test.pdf");export(file);}private static void export(File file) {String fileName = file.getName().substring(0, file.getName().indexOf('.'));PDDocument document = null;try {//解析PDF并加载document = PDDocument.load(file);//获取索引为0的页面(也就是获取第一页)PDPage page = document.getPage(0); // 可以通过获取页数进行循环每一页//获取页面所需的任何资源的字典PDResources resources = page.getResources();//返回XObject资源的名称Iterable<COSName> cosNames = resources.getXObjectNames();if(cosNames != null) {Iterator<COSName> cosNameIterator = cosNames.iterator();while (cosNameIterator.hasNext()) {COSName cosName = cosNameIterator.next();//判断给定名称的XObject资源是否为图像if(resources.isImageXObject(cosName)) {PDImageXObject pdImage = (PDImageXObject) resources.getXObject(cosName);BufferedImage image = pdImage.getImage();try(FileOutputStream fileOutputStream = new FileOutputStream(file.getParentFile().getAbsolutePath()+ File.separator + fileName + ".jpg")) {//输出图片到指定位置ImageIO.write(image, "jpg", fileOutputStream);fileOutputStream.flush();} catch (IOException e) {System.out.println("输出文件失败:" + fileName + e.getMessage());}}}}} catch (IOException e) {System.out.println("提取失败:" + fileName);} finally {try {document.close();} catch (IOException e) {e.printStackTrace();}}}}
PDFBox的其他操作具体可查看API文档:

感谢你看到了现在,最后别忘了点个赞哦!
相关文章:
从PDF中提取图片
由于工作需要,要从pdf文件中提取出图片保存到本地,项目中就引用到了Apache PDFBox库。 1 什么是Apache PDFBox? Apache PDFBox库,一个用于处理PDF文档的开源Java工具。它允许用户创建全新的PDF文件,操作现有的PDF文档࿰…...
推荐:一个不错的介绍Apache Doris的PPT
原来Apache Doris居然是百度开源出来的,不错。部分节选:完整下载地址网盘: 链接: https://pan.baidu.com/s/18WR70R_f72GxCjh0lykStQ 提取码: umd3 复制这段内容后打开百度网盘手机App,操作更方便哦 --来自百度网盘超级会员v7的分…...
【Python_PySide2学习笔记(二十二)】进度对话框QProgressDialog类的基本用法
进度对话框QProgressDialog类的基本用法 进度对话框QProgressDialog类的基本用法前言一、QProgressDialog 的常用方法1、创建进度对话框2、进度对话框设置窗口标题3、进度对话框隐藏"最大化"、"最小化"、"关闭"4、进度对话框设置是否自动关闭5、…...
使用rust读取usb设备ACR122U的nfc卡片id
rust及其高效和安全著称,而且支持跨平台,所以就想使用这个rust开发一个桌面端程序,来读取nfc设备的nfc卡片的id信息,下面就做一个最简单的入门教程吧,也是我写的第三个rust应用。 当你电脑上安装好了rust环境之后&…...
servlet总结
目录 1.生命周期 2.线程总结 3.配置 4.请求和响应 5.会话管理 6.过滤和监听器 7.处理表单数据 8.与JSP集成 9.异常处理 10.安全性和认证 Servlet是一种基于Java的Web组件,用于处理客户端请求并生成动态Web内容。以下是关于Servlet的一些总结 1.生命周期 …...
Nacos2.1.2改造适配达梦数据库7.0
出于业务需求,现将Nacos改造适配达梦数据库7.0,记录本次改造过程。 文章目录 一、前期准备二、适配流程1、项目初始化2、引入驱动3、源码修改 三、启动测试四、打包测试 一、前期准备 Nacos源码,版本:2.1.2:源码下载…...
TPRI-DMP平台介绍
TPRI-DMP平台介绍 1 TPRI-DMP平台概述 TPRI-DMP为华能集团西安热工院自主产权的工业云PaaS平台,已经过13年的发展和迭代,其具备大规模能源电力行业生产应用软件开发和运行能力。提供TPRI-DMP平台主数据管理、业务系统开发与运行、应用资源管理…...
oracle-存储结构
文件包括 控制文件.ctl、数据文件.dbf、日志文件.log这三类放在存储上。 参数文件:空间的划分,进程的选用(.ora) oracle启动的时候需要读一下,数据库启动后,参数文件并不关闭,但即使文件丢了&a…...
获取PG库 database与 user 创建时间以及cluster初始化时间
代码实现 echo "获取数据库创建时间" data_dir$(psql -U postgres -d postgres -X -qAt -c "show data_directory" ) db_dirs$(ls $data_dir/base |grep -v pgsql_tmp) for db_oid in $db_dirs dodb_exists$(psql -U postgres -d postgres -X -qAt -c &qu…...
【12.29】转行小白历险记-刷算法05
242.有效的字母异位词 数组、set、map,数组是比较高效查找的 函数功能 判断字符串 s 和 t 是否互为字母异位词。如果它们包含相同的字符且每个字符出现的次数也相同,那么它们互为字母异位词。 代码逻辑 长度检查: if (s.length ! t.lengt…...
docker部署kafka zookeeper模式集群
单机模式链接:https://blog.csdn.net/wsdhla/article/details/133032238 kraft集群模式链接:部署Kafka_kafka 部署-CSDN博客 zookeeper选举机制举例: 目前有5台服务器,每台服务器均没有数据,它们的编号分别是1,2,3,4,5…...
Apache Flink连载(二十一):Flink On Yarn运行原理-Yarn Application模式
🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. 任务提交命令...
《深入理解C++11:C++11新特性解析与应用》笔记五
第五章 提高类型安全 5.1 强类型枚举 5.1.1 枚举:分门别类与数值的名字 具名枚举类型一般声明类似:enum Gender { Male, Female }。 匿名枚举类型可以使用三种方式实现: 第一种方式时宏,比如 #define Male 0 #define Femal…...
Y9000P + ubuntu22.04 配置Anaconda+pycharm +pytorch
Anaconda3 的安装及使用方法安装 Anaconda3 Anaconda3 是 Anaconda 的具体版本 Anaconda3 中的 Python 解释器默认使用的是 Python3.x 版本,而不是 Python2.x 版本 Python2.x 版本中,字符串是以 ASCII 编码处理的,而在 Python3.x 版本中&am…...
使用Ubuntu编译FFmpeg生成Android动态库/静态库
环境 我这里使用windows里的wsl2的ubuntu,使用物理机或者vmware,vbox之类的安装的ubuntu理论上也可以. gcc编译使用的环境如下: Ndk使用17 FFmpeg使用4.0.2. clang编译使用的环境如下: Ndk使用21.4 FFmpeg使用6.1 FFmpeg下载地址:https://ffmpeg.org/…...
【AIGC-图片生成视频系列-2】八仙过海,各显神通:AI生成视频相关汇总剖析
最近「图片生成视频系列」层出不穷,我拜读并结合实践(对,就是手撕代码,有开源就撕),并对以下几篇文章的相似点以及关键点稍微做个总结: 一. 生成视频中图像的一致性 在图像生成视频的这个过程…...
SpringBoot集成RabbitMq消息队列【附源码】
1. 项目背景 要啥项目背景,就是干!!! SpringBoot版本:2.7.12 2. Rabbit MQ安装 这里讲解使用docker安装RabbitMQ,如果在windows下面安装RabbitMQ,参考下文 【笑小枫的按步照搬系列】Window…...
MySQL数据库的安装与环境配置
下载 下载MySQL8 安装 解压 配置MySQL环境变量 系统环境变量path D:\ProgramFiles\mysql-8.0.20-winx64\bin 1.点击属性 2.点击高级系统设置 3.点击环境变量 4.在系统变量中找到path 注意这里不是用户变量 5.新建后输入解压的地址 MySQL初始化和启动 以管理员身份运行cmd…...
【广州华锐互动】VR科技科普展厅平台:快速、便捷地创建出属于自己的虚拟展馆
随着科技的不断进步,虚拟现实(VR)技术已经在许多领域取得了显著的成果。尤其是在展馆设计领域,VR科技科普展厅平台已经实现了许多令人瞩目的新突破。 VR科技科普展厅平台是广州华锐互动专门为企业和机构提供虚拟展馆设计和制作的在线平台。通过这个平台&…...
XML Extension Supplement
LEGAL ISSUES, COMPANY POLICIES AND STANDARDS Web Services A Web service is a software system designed to support interoperable machine-to-machine interaction over a network. URI和URL URI,全称是统一资源标识符(Uniform Resource Ident…...
别再只懂BDF了!手把手教你理解PCIe ARI如何将Function数量扩展到256个
突破PCIe传统限制:深入解析ARI如何实现256个功能扩展 在数据中心和云计算架构快速发展的今天,虚拟化技术对硬件资源分配提出了更高要求。传统PCIe设备的8个功能限制已成为制约虚拟功能扩展的瓶颈,特别是在SR-IOV(单根I/O虚拟化&am…...
命令行与IM桥接工具:适配器模式实现统一消息通知
1. 项目概述与核心价值最近在折腾一个挺有意思的东西,一个叫tmwgsicp/im-cli-bridge的项目。光看这个名字,可能有点摸不着头脑,我来拆解一下。tmwgsicp大概率是作者的用户名或者组织名,im-cli-bridge才是核心。im是即时通讯&#…...
caffeine+redis实现多级缓存解决缓存雪崩
废话不多说直接上代码:1.依赖<dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId><version>2.9.3</version></dependency>这里版本java8所以用的2.9.32.配置类&#…...
开源游戏串流革命:Sunshine如何重新定义家庭游戏共享体验
开源游戏串流革命:Sunshine如何重新定义家庭游戏共享体验 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 在游戏设备日益多样化的今天,你是否曾想过将高性能…...
从零部署noVNC:一次完整的远程桌面服务搭建与排错实录
1. 为什么选择noVNC? 最近在帮朋友部署远程桌面服务时,发现很多传统VNC方案都需要安装客户端,操作复杂不说,兼容性还差。直到发现了noVNC这个神器,它直接用浏览器就能访问远程桌面,彻底解决了跨平台访问的痛…...
终极音乐解锁指南:让加密音频在浏览器中重获自由
终极音乐解锁指南:让加密音频在浏览器中重获自由 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gi…...
如何用拯救者工具箱完全掌控联想笔记本:开源硬件管理终极指南
如何用拯救者工具箱完全掌控联想笔记本:开源硬件管理终极指南 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 你…...
告别数据焦虑:WeChatExporter如何重塑你的数字记忆管理体验
告别数据焦虑:WeChatExporter如何重塑你的数字记忆管理体验 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 当你深夜翻看三年前的聊天记录,却发现…...
前后端分离林业产品推荐系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
摘要 随着信息技术的快速发展,林业产品的销售和推广方式逐渐从传统线下模式转向数字化和智能化。林业产品种类繁多,消费者在选购时往往面临信息不对称的问题,难以高效匹配自身需求。同时,林业企业也缺乏精准的用户画像和推荐机制&…...
Power Automate调用Azure Foundry智能体
Power Automate调用Azure Foundry智能体一、创建Foundry智能体二、发送HTTP请求,调用Foundry智能体三、拓展一、创建Foundry智能体 先从创建开始吧 填好,然后直接审阅并创建就行了。一个资源下可以创建多个项目 转到资源 转到门户 这里有API密钥&…...
