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…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
