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

java 利用poi读取wps嵌入式图片,自测

  1. 代码

        主要工具类 需要引入依赖:

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嵌入式图片,自测

代码 主要工具类 需要引入依赖&#xff1a; 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 仓库拷贝到本地&#xff0c;让自己能够查看该项目&#xff0c;或者进行修改。 拷贝项目命令格式如下&#xff1a;git clone [u…...

达梦导入导出

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

超级数据查看器 教程pdf 1-31集 百度网盘

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

一、开发环境安装 Avalonia

1、概述 官网中是这么介绍Avalonia的&#xff0c;Avalonia是一个强大的框架&#xff0c;使开发人员能够使用.NET创建跨平台应用程序。它使用自己的渲染引擎绘制UI控件&#xff0c;确保在Windows、macOS、Linux、Android、iOS和WebAssembly等不同平台上具有一致的外观和行为。这…...

融资A轮B轮是什么意思?

环境&#xff1a; 融资 问题描述&#xff1a; 融资A轮B轮是什么意思 解决方案&#xff1a; 在A轮融资之前&#xff0c;通常有以下几轮融资阶段&#xff1a; 种子轮&#xff08;Seed Round&#xff09;&#xff1a;这是企业生命周期中最早的融资阶段&#xff0c;通常发生在…...

开发一个python工具,pdf转图片,并且截成单个图片,然后修整没用的白边

今天推荐一键款本人开发的pdf转单张图片并截取没有用的白边工具 一、开发背景&#xff1a; 业务需要将一个pdf文件展示在前端显示&#xff0c;但是基于各种原因&#xff0c;放弃了h5使用插件展示 原因有多个&#xff0c;文件资源太大加载太慢、pdf展示兼容性问题、pdf展示效果…...

手机网络卡顿,试试飞行模式

当你遇到某个网页刷新慢或者打不开&#xff0c;而通过切换飞行模式就能解决这个问题&#xff0c;可能的原因有以下几种&#xff1a; 1. 网络连接重置 切换飞行模式会导致你的手机断开当前的网络连接&#xff08;包括Wi-Fi和移动数据&#xff09;&#xff0c;然后重新建立连接…...

【退役之重学 AI】Ubuntu 安装 Anaconda

一. 下载 安装文件 https://www.anaconda.com/download/success 二. 安装 bash anaconda****.bash 一路 enter&#xff0c;yes 最后一个问你 要不要 conda init&#xff0c;这里得输入yes&#xff08;默认是no&#xff0c;所以不要直接 enter&#xff09;&#xff0c;否则你…...

flutter 命令

1.查看依赖树 flutter pub deps 2.清理Flutter缓存 flutter clean 3.清理Gradle缓存 ./gradlew cleanBuildCache 4.清理Pub缓存&#xff1a; flutter pub cache repair 5.获取依赖项&#xff1a; flutter pub get 6.更新依赖项&#xff1a; flutter pub upgrade 7.…...

商超仓库管理系统

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

校园疫情防控健康打卡系统

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

关于阿里云效流水线自动部署项目教程

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

食品快消品进销存+门店批发+零售商城整体代码输出

食品快消品行业在当今信息化和数字化浪潮中&#xff0c;建立批发零售的信息化系统已成为一种迫切的必要性。通过信息化&#xff0c;食品快消品企业能够实现从生产到销售的全面优化&#xff0c;提高供应链效率&#xff0c;降低运营成本&#xff0c;增强市场竞争力。通过有效的信…...

cocosCreator获取手机剪切板内容

最近游戏中需要加上复制粘贴的功能&#xff0c;这个时候就涉及到安卓原生层的东西。步骤如下&#xff1a; 公开文章地址&#xff0c;见个人博客 复制功能 ts代码 调用代码&#xff0c;在需要复制的地方调用即可。 public static copyToClipBoard(str) {if (sys.platform sy…...

SAP Web IDE 安装使用

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

Excel 常用技巧(六)

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

微软修复Wi-Fi驱动高危漏洞 影响Windows所有版本 可通过局域网发起攻击

微软修复 WiFi 驱动程序中的高危安全漏洞&#xff0c;该漏洞影响 Windows 所有版本&#xff0c;可以通过公共 WiFi 等发起攻击。如果攻击者能够接入到目标设备所处的网络中&#xff0c;则可以悄无声息完成攻击&#xff0c;不需要用户进行任何交互。 在本月例行安全更新中微软修…...

喜马拉雅项目调整

文章目录 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 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…...

完全掌握Adobe软件激活:5个实用技巧深度解析

完全掌握Adobe软件激活&#xff1a;5个实用技巧深度解析 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 你是否曾经为Adobe Creative Cloud的订阅费用感到困扰&…...

钉钉数字化转型避坑指南:这10个“雷区”90%企业都踩过

钉钉数字化转型避坑指南&#xff1a;这10个“雷区”90%企业都踩过在数字经济浪潮下&#xff0c;企业数字化转型已从“可选项”变为“生存必修课”。而钉钉作为国内领先的企业数字化平台&#xff0c;凭借其开放生态、低代码能力和丰富应用&#xff0c;成为众多企业转型的首选基座…...

Virtual ZPL Printer:5步搭建专业级条码标签开发测试环境

Virtual ZPL Printer&#xff1a;5步搭建专业级条码标签开发测试环境 【免费下载链接】Virtual-ZPL-Printer An ethernet based virtual Zebra Label Printer that can be used to test applications that produce bar code labels. 项目地址: https://gitcode.com/gh_mirror…...

从V1到V3:手把手教你用PyTorch复现MobileNet进化史(附完整代码)

从V1到V3&#xff1a;手把手教你用PyTorch复现MobileNet进化史&#xff08;附完整代码&#xff09; 在移动端和嵌入式设备上部署深度学习模型一直是计算机视觉领域的核心挑战之一。2017年&#xff0c;Google推出的MobileNet系列彻底改变了轻量级卷积神经网络的设计范式&#xf…...

Spectator:云原生可观测性数据采集库的设计与实战

1. 项目概述&#xff1a;从“观众”到“洞察者”的转变在分布式系统和微服务架构成为主流的今天&#xff0c;我们每天面对的不再是单一的、庞大的单体应用&#xff0c;而是由数十甚至上百个服务节点组成的复杂网络。每个服务都在持续地产生日志、指标和追踪数据&#xff0c;这些…...

FinalBurn Neo终极指南:如何轻松搭建经典街机游戏模拟器

FinalBurn Neo终极指南&#xff1a;如何轻松搭建经典街机游戏模拟器 【免费下载链接】FBNeo FinalBurn Neo - We are Team FBNeo. 项目地址: https://gitcode.com/gh_mirrors/fb/FBNeo FinalBurn Neo&#xff08;简称FBNeo&#xff09;是一款开源街机游戏模拟器&#xf…...

如何用LinkSwift解锁九大网盘下载新姿势?完整攻略揭秘

如何用LinkSwift解锁九大网盘下载新姿势&#xff1f;完整攻略揭秘 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...

2025 上海 GEO 优化公司最新权威推荐:技术领航者与合作指南

一、核心关键词GEO 优化、生成式引擎优化、AI 搜索流量、上海 GEO 公司、本地服务 GEO、跨境 GEO、DeepSeek 排名优化、豆包排名优化、装修行业 GEO、B2B 获客优化、全域 AI 营销、合规 GEO 服务二、GEO 简介及上海市场现状分析1. GEO 核心定义GEO&#xff08;Generative Engin…...

Translumo终极指南:5步掌握实时屏幕翻译与OCR识别技术

Translumo终极指南&#xff1a;5步掌握实时屏幕翻译与OCR识别技术 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo 你是否曾…...

Windows驱动签名实战:从证书获取到安装包封装的完整指南

1. 项目概述&#xff1a;为什么驱动签名是硬件开发者的“必修课” 如果你做过硬件开发&#xff0c;尤其是涉及USB、串口这类需要与Windows系统深度交互的设备&#xff0c;那你一定对那个黄色的“Windows安全”警告弹窗不陌生。用户插上你的设备&#xff0c;系统提示“正在安装…...