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

从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-SNAPSHOTJDK 11Maven 3
PDFBox 3.0.xJDK 8
(目前测试进行到Java 19)
Maven 3
PDFBox 2.0.xJDK 7Maven 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文档:

感谢你看到了现在,最后别忘了点个赞哦!

http://www.lryc.cn/news/269914.html

相关文章:

  • 推荐:一个不错的介绍Apache Doris的PPT
  • 【Python_PySide2学习笔记(二十二)】进度对话框QProgressDialog类的基本用法
  • 使用rust读取usb设备ACR122U的nfc卡片id
  • servlet总结
  • Nacos2.1.2改造适配达梦数据库7.0
  • TPRI-DMP平台介绍
  • oracle-存储结构
  • 获取PG库 database与 user 创建时间以及cluster初始化时间
  • 【12.29】转行小白历险记-刷算法05
  • docker部署kafka zookeeper模式集群
  • Apache Flink连载(二十一):Flink On Yarn运行原理-Yarn Application模式
  • 《深入理解C++11:C++11新特性解析与应用》笔记五
  • Y9000P + ubuntu22.04 配置Anaconda+pycharm +pytorch
  • 使用Ubuntu编译FFmpeg生成Android动态库/静态库
  • 【AIGC-图片生成视频系列-2】八仙过海,各显神通:AI生成视频相关汇总剖析
  • SpringBoot集成RabbitMq消息队列【附源码】
  • MySQL数据库的安装与环境配置
  • 【广州华锐互动】VR科技科普展厅平台:快速、便捷地创建出属于自己的虚拟展馆
  • XML Extension Supplement
  • 手拉手Springboot获取yml配置文件信息
  • 行人重识别(ReID)基础知识入门
  • 【音视频 ffmpeg 学习】 跑示例程序 持续更新中
  • 前端axios与python库requests的区别
  • 达梦数据库文档
  • CorelDRAW2024新功能有哪些?CorelDRAW2024最新版本更新怎么样?
  • 基于Mapify的在线艺术地图设计
  • mxxWechatBot微信机器人V2版本文档说明
  • 红队打靶练习:MISDIRECTION: 1
  • Jmeter吞吐量控制器总结
  • 【XML】TinyXML 详解(二):接口详解