当前位置: 首页 > 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…...

Unity资源引用:FileID+GUID的秘密

两个不起眼的数字,撑起了整个项目的引用大厦 一、开篇:一次差点毁掉项目的"手滑" 周三下午三点。 你的美术同事小王在整理项目文件夹。他觉得Assets目录太乱了——贴图、模型、材质散落在各处,像一个没人收拾的房间。 于是他开始整理: 把 Assets/player_text…...

TinyXML2性能优化终极指南:10个技巧让XML处理速度飙升

TinyXML2性能优化终极指南&#xff1a;10个技巧让XML处理速度飙升 【免费下载链接】tinyxml2 TinyXML2 is a simple, small, efficient, C XML parser that can be easily integrated into other programs. 项目地址: https://gitcode.com/gh_mirrors/ti/tinyxml2 TinyX…...

Bud错误处理终极指南:构建健壮Web应用的10个最佳实践

Bud错误处理终极指南&#xff1a;构建健壮Web应用的10个最佳实践 【免费下载链接】bud The Full-Stack Web Framework for Go 项目地址: https://gitcode.com/gh_mirrors/bu/bud Bud作为Go语言的全栈Web框架&#xff0c;其错误处理机制直接影响应用的稳定性和用户体验。…...

突破百度网盘限速限制:baidu-wangpan-parse工具的技术实现与应用指南

突破百度网盘限速限制&#xff1a;baidu-wangpan-parse工具的技术实现与应用指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 在数字资源获取日益频繁的今天&#xff0c;许…...

Cowabunga Lite完全指南:从入门到精通的iOS个性化解决方案

Cowabunga Lite完全指南&#xff1a;从入门到精通的iOS个性化解决方案 【免费下载链接】CowabungaLite iOS 15 Customization Toolbox 项目地址: https://gitcode.com/gh_mirrors/co/CowabungaLite iOS设备的封闭性常常让用户在个性化定制时感到束手束脚&#xff0c;既想…...

QtPlaskin实战指南:从HDF5数据解析到等离子体动力学可视化

1. QtPlaskin与等离子体动力学分析入门 第一次接触QtPlaskin时&#xff0c;我被它处理复杂等离子体数据的能力惊艳到了。这个基于Python和Qt开发的图形工具&#xff0c;专门用于解析ZDPlasKin等等离子体动力学程序生成的HDF5格式数据。想象一下&#xff0c;你刚完成了一个长达…...

python高校大学生家教平台的设计与开发

目录需求分析与功能规划技术栈选型数据库设计关键功能实现测试与部署持续迭代项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作需求分析与功能规划 明确平台核心需求&#xff0c;包括用户角色划分&#xff08;学生、教师、管理员…...

春节不用愁对联:春联生成模型实战,3步生成专属春联

春节不用愁对联&#xff1a;春联生成模型实战&#xff0c;3步生成专属春联 1. 传统年味遇上AI科技 每到春节&#xff0c;家家户户贴春联是延续千年的传统习俗。一副好春联既要对仗工整&#xff0c;又要寓意吉祥&#xff0c;还要符合自家特色&#xff0c;这让不少人为之头疼。…...

EcomGPT-7B系统部署排坑指南:常见错误403 Forbidden等分析与解决

EcomGPT-7B系统部署排坑指南&#xff1a;常见错误403 Forbidden等分析与解决 1. 引言 最近在折腾EcomGPT-7B这个模型&#xff0c;发现不少朋友在部署和调用的时候会遇到各种“坑”。我自己也踩过不少&#xff0c;特别是那个让人头疼的“403 Forbidden”错误&#xff0c;有时候…...

解读大数据领域 OLAP 的分布式计算特性

解读大数据领域 OLAP 的分布式计算特性 关键词:OLAP、分布式计算、大数据、MPP架构、列式存储、查询优化、数据仓库 摘要:本文深入探讨OLAP(联机分析处理)在大数据环境下的分布式计算特性。我们将从OLAP的核心概念出发,分析其分布式架构设计原理,包括MPP架构、列式存储和并…...