java 利用poi读取wps嵌入式图片,自测
-
代码
主要工具类 需要引入依赖:
package com.chenkang.demo.util;import cn.wps.officeDocument.x2017.etCustomData.CellImagesDocument;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
import org.apache.poi.xssf.usermodel.XSSFPictureData;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;/*** @author chenkang* @since 2024/6/20 21:34*/
public class WpsImageUtil {/***图片ID和 XSSFPictureData** @param workbook workbook* @return List<Map < String, String>>* @throws Exception 异常*/public static Map<String, XSSFPictureData> getPictureMap(XSSFWorkbook workbook) throws Exception {OPCPackage opcPackage = workbook.getPackage();Map<String,XSSFPictureData> result = new HashMap<>(4);List<PackagePart> partsByContentType = opcPackage.getPartsByContentType("application/vnd.wps-officedocument.cellimage+xml");if(partsByContentType.isEmpty()){return result;}PackagePart packagePart = partsByContentType.get(0);List<XSSFPictureData> allPictures = workbook.getAllPictures();Map<String, String> ridAndPidMap = getRidAndPidMap(packagePart);Map<String, String> ridAndPathMap = getRidAndPathMap(packagePart);ridAndPidMap.forEach((key, value) -> {String path = ridAndPathMap.get(value);Optional<XSSFPictureData> first = allPictures.stream().filter(pictureData -> pictureData.getPackagePart().getPartName().getName().equals(path)).findFirst();result.put(key,first.orElse(null));});return result;}/*** //relationships 绑定了rid 和 图片 路径得地址* 获取rid和path的关系* @param packagePart cellImagePart* @return Map* @throws Exception 异常*/public static Map<String, String> getRidAndPathMap(PackagePart packagePart) throws Exception {Map<String, String> ridAndPathMap = new HashMap<>(4);PackageRelationshipCollection relationships = packagePart.getRelationships();relationships.forEach(relationship -> ridAndPathMap.put(relationship.getId(), relationship.getTargetURI().getPath()));return ridAndPathMap;}/*** {ID_581F75328A584939A51CC44E17945975:rid1,ID_6702DEA2ADBA44AE8C65065BD13FF23D:rid1}* 行rid 以及图片id关系** @param cellImagePart cellImagePart* @return Map* @throws Exception 异常*/public static Map<String, String> getRidAndPidMap(PackagePart cellImagePart) throws Exception {CellImagesDocument cellImagesDocument = CellImagesDocument.Factory.parse(cellImagePart.getInputStream());CellImagesDocument.CellImages cellImages = cellImagesDocument.getCellImages();Map<String, String> result = new HashMap<>(4);cellImages.getCellImageList().forEach(cellImage -> {result.put(cellImage.getPic().getNvPicPr().getCNvPr().getName().getStringValue(), cellImage.getPic().getBlipFill().getBlip().getEmbed());});return result;}}
package com.chenkang.demo.util;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class StringExtractor {public static String extractID(String input) {// 定义正则表达式模式String pattern = "ID_[A-Z0-9]+";Pattern compiledPattern = Pattern.compile(pattern);Matcher matcher = compiledPattern.matcher(input);// 查找匹配的字符串if (matcher.find()) {return matcher.group();} else {return null;}}
}
测试:
package com.chenkang.demo.learn;import com.chenkang.demo.util.StringExtractor;
import com.chenkang.demo.util.WpsImageUtil;
import org.apache.poi.xssf.usermodel.XSSFPictureData;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.File;
import java.util.Map;/*** @author chenkang* @since 2024/6/6 14:09*/
public class LockLearn {public static void main(String[] args) throws Exception {File file = new File("C:\\Users\\18151\\Desktop\\test.xlsx");XSSFWorkbook sheets = new XSSFWorkbook(file);XSSFSheet sheetAt = sheets.getSheetAt(0);String id=sheetAt.getRow(1).getCell(1).getStringCellValue();Map<String, XSSFPictureData> pictureMap = WpsImageUtil.getPictureMap(sheets);System.out.println(pictureMap);System.out.println(pictureMap.get(StringExtractor.extractID(id)));}}
项目需要引入依赖, 可以手动打入maven仓库帮助解析wps图片信息
链接:https://pan.baidu.com/s/1CVf0kArBevXJ23q0q5y01Q?pwd=tc3h
提取码:tc3h
--来自百度网盘超级会员V6的分享
具体思路详见文章java读取wps嵌入式图片思路-CSDN博客
相关文章:
java 利用poi读取wps嵌入式图片,自测
代码 主要工具类 需要引入依赖: package com.chenkang.demo.util;import cn.wps.officeDocument.x2017.etCustomData.CellImagesDocument; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.…...

git 常用操作指令
文章目录 git clonegit configgit addgit commitgit rmgit branch/checkoutgit pull/pushgit rebash/merge git clone git clone 可以将一个远程 Git 仓库拷贝到本地,让自己能够查看该项目,或者进行修改。 拷贝项目命令格式如下:git clone [u…...

达梦导入导出
针对导出数据库表结构通常有 3 种方法: 使用 DTS 导出 打开 DTS 迁移工具,选择【DM-->SQL】并链接到数据库中,如下图所示: 添加定义脚本,并选择【迁移范围】(仅迁移对象定义),如…...

超级数据查看器 教程pdf 1-31集 百度网盘
百度网盘链接 提取码1234https://pan.baidu.com/s/1s_2lbwZ2_Su83vDElv76ag?pwd1234 通过百度网盘分享的文件:超级数据查看器 … 链接:https://pan.baidu.com/s/1s_2lbwZ2_Su83vDElv76ag?pwd1234 提取码:1234 复制这段内容打开「百度网盘APP 即可获取」...

一、开发环境安装 Avalonia
1、概述 官网中是这么介绍Avalonia的,Avalonia是一个强大的框架,使开发人员能够使用.NET创建跨平台应用程序。它使用自己的渲染引擎绘制UI控件,确保在Windows、macOS、Linux、Android、iOS和WebAssembly等不同平台上具有一致的外观和行为。这…...
融资A轮B轮是什么意思?
环境: 融资 问题描述: 融资A轮B轮是什么意思 解决方案: 在A轮融资之前,通常有以下几轮融资阶段: 种子轮(Seed Round):这是企业生命周期中最早的融资阶段,通常发生在…...

开发一个python工具,pdf转图片,并且截成单个图片,然后修整没用的白边
今天推荐一键款本人开发的pdf转单张图片并截取没有用的白边工具 一、开发背景: 业务需要将一个pdf文件展示在前端显示,但是基于各种原因,放弃了h5使用插件展示 原因有多个,文件资源太大加载太慢、pdf展示兼容性问题、pdf展示效果…...
手机网络卡顿,试试飞行模式
当你遇到某个网页刷新慢或者打不开,而通过切换飞行模式就能解决这个问题,可能的原因有以下几种: 1. 网络连接重置 切换飞行模式会导致你的手机断开当前的网络连接(包括Wi-Fi和移动数据),然后重新建立连接…...
【退役之重学 AI】Ubuntu 安装 Anaconda
一. 下载 安装文件 https://www.anaconda.com/download/success 二. 安装 bash anaconda****.bash 一路 enter,yes 最后一个问你 要不要 conda init,这里得输入yes(默认是no,所以不要直接 enter),否则你…...
flutter 命令
1.查看依赖树 flutter pub deps 2.清理Flutter缓存 flutter clean 3.清理Gradle缓存 ./gradlew cleanBuildCache 4.清理Pub缓存: flutter pub cache repair 5.获取依赖项: flutter pub get 6.更新依赖项: flutter pub upgrade 7.…...

商超仓库管理系统
摘要 随着全球经济和互联网技术的快速发展,依靠互联网技术的各种管理系统逐渐应用到社会的方方面面。各行业的有识之士都逐渐开始意识到过去传统的人工管理模式已经逐渐成为企业发展的绊脚石,不再适应现代企业的发展需要。企业想要得到更好的发展&#…...

校园疫情防控健康打卡系统
摘 要 自疫情出现以来,全世界人民的生命安全和健康都面临着严重威胁。高校是我国培养人才的重要基地,其安全和稳定影响着社会的发展和进步。因此,各高校高度重视疫情防控工作,并在校园疫情防控中引入了健康打卡系统。本论文主要研…...

关于阿里云效流水线自动部署项目教程
1、登录阿里云效:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 2、点击左侧流水线: 3、在流水线界面,新建流水线 4、我的是php代码,因此选择php模版 5、创建之后添加流程线源,如下图 6、选择相应的源头。比…...

食品快消品进销存+门店批发+零售商城整体代码输出
食品快消品行业在当今信息化和数字化浪潮中,建立批发零售的信息化系统已成为一种迫切的必要性。通过信息化,食品快消品企业能够实现从生产到销售的全面优化,提高供应链效率,降低运营成本,增强市场竞争力。通过有效的信…...
cocosCreator获取手机剪切板内容
最近游戏中需要加上复制粘贴的功能,这个时候就涉及到安卓原生层的东西。步骤如下: 公开文章地址,见个人博客 复制功能 ts代码 调用代码,在需要复制的地方调用即可。 public static copyToClipBoard(str) {if (sys.platform sy…...

SAP Web IDE 安装使用
For training SAP Web IDE 是基于 Eclipse 内核的在线开发 IDE,可以使用在线的试用版本,但服务器在德国,访问的网速特别慢。也可以使用 Personal Edition,在本机启动和编写代码。 打开官网下载WEBIDE工具包,包含 Tri…...

Excel 常用技巧(六)
Microsoft Excel 是微软为 Windows、macOS、Android 和 iOS 开发的电子表格软件,可以用来制作电子表格、完成许多复杂的数据运算,进行数据的分析和预测,并且具有强大的制作图表的功能。由于 Excel 具有十分友好的人机界面和强大的计算功能&am…...

微软修复Wi-Fi驱动高危漏洞 影响Windows所有版本 可通过局域网发起攻击
微软修复 WiFi 驱动程序中的高危安全漏洞,该漏洞影响 Windows 所有版本,可以通过公共 WiFi 等发起攻击。如果攻击者能够接入到目标设备所处的网络中,则可以悄无声息完成攻击,不需要用户进行任何交互。 在本月例行安全更新中微软修…...
喜马拉雅项目调整
文章目录 1 频道部分下标旋转频道列表平移 2 渐变按钮搜索放大镜登录按钮径向渐变 3 左右图片缩小左边右边 4 猜你喜欢区域播放按钮和遮罩图片缩放 1 频道部分 下标旋转 .x-header-nav .nav-item:hover .icon-down {transform: rotate(-180deg); }频道列表平移 .channel-lay…...

【C++】基础知识--inline(内联)关键字以及与宏的区别
c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
嵌入式面试常问问题
以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...