一次修改jar包中字节码文件内容的尝试

news2024/9/20 5:40:54

目录

    • 背景
    • 解决办法
      • 确定修改位置
      • 得到字节码文件
      • 修改字节码文件
      • 组合jar包

背景

最近想实现按照分节符拆分doc / docx文档的功能,然后就找到了这篇文章Java 按节拆分 Word 文档,用的依赖是:

<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.doc.free</artifactId>
    <version>5.2.0</version>
</dependency>

但是在使用过程中,出现了以下问题:

在这里插入图片描述

很明显的看到报错信息是段落数不能超过500行,否则就会报错,我们从网络上找到了该依赖所属公司的介绍,从下图可以看到报错的原因是加载该文档的时候段落数目超过了500行,然后就报错了

在这里插入图片描述

但是我不想被限制,那应该怎么办呢,我尝试了多种方式,发现最终的解决方案是更改jar包中
字节码文件中的数量限制来临时性解决该问题

解决办法

确定修改位置

首先分享给大家的第一个工具是:jd-gui(Java反编译工具).exe,链接在下面,如下:

链接:https://pan.baidu.com/s/1OMW_m20ylmamucckbh7pMQ?pwd=l5ao

提取码:l5ao

然后我们可以通过该工具将jar包打开,之后我们点击File,在点击Save All Sources按钮将源码下载下来,如下:

在这里插入图片描述
之后我们在代码中搜索报错中的限制条件,搜索结果如下:

在这里插入图片描述
这种位置一共有四处,上面说明了对段落数量和表格数量的限制分别是500和25

现在我们已经确定了需要修改的代码是:

com.spire.doc.collections.DocumentObjectCollection#add

com.spire.doc.collections.DocumentObjectCollection#insert

得到字节码文件

由于jar包类似于zip,所以可以使用压缩工具进行解压缩,比如“360压缩”,解压完成之后,我们找到DocumentObjectCollection.class字节码文件

修改字节码文件

JavaBite下载信息如下所示:

链接:https://pan.baidu.com/s/162a_Mi-nmIeH42ZkLqFAgw?pwd=a4v9

提取码:a4v9

使用JavaBite工具打开字节码文件,然后找到add()和insert()方法,然后把里面的段落限制500和表格限制25改大一点,我们只说一下add()方法吧,如下:

在这里插入图片描述

之后找到数量500的位置,然后把数据修改成32766,原因是sipush类似的最大值就是32767,所以我们该校一位,可能你会有疑问,为什么不在改大一点,原因是在ldc指令的数据需要放在常量池,这就比较麻烦了;可能也有同学会问到,为什么不删除athrow指令,原因是删除之后执行方法会报错,错误是本地变量表不一致,原因是我删除athrow指令的话,那么行数减少,但是本地变量表数量没少,这就造成了数量不一致,所以我们只能通过修改数量的方法来临时解决

然后对于表格最大数量25的限制,我们可以把数量25前面的指令改成sipush,并且数量写成32767即可

组合jar包

DocumentObjectCollection.class字节码文件放回原来的位置,然后选中comMETA-INF目录,之后打成zip包即可,最终把zip包的后缀名改成jar即可,如下:

在这里插入图片描述
之后jar包就可以正常使用了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/466816.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Arduno ESP8266接入OneNET实时显示DHT11数据

Arduno ESP8266接入OneNET实时显示DHT11数据 📌相关篇《OneNET云平台数据APP端查看说明》📍《Arduno ESP8266接入中移OneNet动态显示实时数据》✨上面一篇主要是验证数据上传可行性,这次采用DHT11温湿度传感器上传真实数据到云平台进行检测,同时使用SSD1306屏幕进行数据显…

简单聊聊目标检测新范式RT-DETR的骨干:HGNetv2

【前言】 本文版权属于GiantPandaCV&#xff0c;未经许可&#xff0c;请勿转账&#xff01; 前几天疯狂刷屏的RT-DETR赚足了眼球&#xff0c;在精度和速度上体现的优势和性价比远远高于YOLO&#xff0c;而今年ChatGPT、Sam的出现&#xff0c;也让一些吃瓜群众知乎CNN没有未来了…

第8章:树

1.树是什么 一种分层数据的抽象模型前端工作中常见的树包括&#xff1a;DOM树&#xff0c;级联选择(省市区)&#xff0c;树形控件&#xff0c;…javascript中没有树&#xff0c;但是可以用Object和Array构建树 4.树的常用操作&#xff1a;深度/广度优先遍历&#xff0c;先中后…

【传统方式部署zookeeper集群与迁移至k8s】

zookeeper简介&#xff1a; zk主要服务于分布式系统、配置管理、注册中心、集群管理等&#xff1b;为什么要迁移Zookeeper集群&#xff1b;存储kafka什么数据&#xff1a;kafka有多少节点、topic名称、协调kafka正常运行。ELKKafka收集k8s日志&#xff1b;一、传统方式部署zook…

浙江省区块链数字资产登记中心筹备会议顺利举行

4月25日下午&#xff0c;由浙江省区块链技术应用协会主办、西溪谷管委会、西湖区网联会协办的“浙江省区块链数字资产登记中心筹备会议”在西湖蚂蚁小镇多功能厅顺利举行。 出席本次筹备会议的有中国电子技术标准化研究院区块链研究室主任、IEEE 计算机 协会区块链和分布式记帐…

设计模式--桥接模式

传统方案解决手机操作问题分析 (1) 扩展性问题(类爆炸) 如果我们再增加手机的样式(全面屏) 就需要增加各个品牌手机的类 同样如果我们增加一个手机品牌 也要在各个手机样式类下增加 (2) 违反了单一职责原则 当我们增加手机样式时 要同时增加所有品牌的手机 增大了代码维护成本…

【STM32】基础知识 第九课 STM32启动

【STM32】基础知识 第九课 STM32启动 MAP 文件MAP 文件浅析MAP 文件组成atk_f103.map 文件 启动模式STM32 启动模式 (F1) STM32 启动过程启动文件介绍Reset_Handler 函数介绍堆栈简介 MAP 文件 MAP 文件是 MDK 编译代码后, 产生的集程序, 数据及 IO 空间的一种映射列表文件. 简…

谁是液冷行业真龙头?疯狂的液冷技术!

“人工智能领域AIGC”、“ChatGPT”、“数据特区”、“东数西算”、“数据中心”&#xff0c;可以说是2023年最热的概念&#xff0c;算力提升的背后&#xff0c;处理器的功耗越来越高&#xff0c;想发挥出处理器的最高性能&#xff0c;需要更高的散热效率。 算力井喷之下&…

Blender 建模案例一(1)

目录 1. 指环1.1 创建一个柱体1.2 柱体微调1.3 缩放1.4 应用缩放1.5 物体属性回归默认1.6 进入编辑模式1.7 内插面1.8 桥接循环边1.9 添加表面细分修改器1.10 平滑着色1.11 添加环切 2. 卷轴2.1 添加曲线2.2 进入正交前视图2.3 添加节点2.4 曲线转3D 1. 指环 1.1 创建一个柱体…

Wifi ESL方案介绍

革新点&#xff1a; 7.5寸墨水屏显示WIFI无线通信&#xff0c;极简部署&#xff0c;远程控制按键及LED指示灯指示640*384点阵屏幕锂电池供电&#xff0c;支持USB充电DIY界面支持文本/条码/二维码/图片超低功耗/超长寿命&#xff0c;一次充电可用一年基于现有Wifi环境&#xff…

APS54083 深度调光降压恒流驱动IC 8A LED摩托汽车舞台工作灯IC PWM调光 优化线路图

APS54083 是一款 PWM 工作模式,高效率、外 围简单、外置功率 MOS 管&#xff0c;适用于 5-220V 输入高精度降压 LED 恒流驱动芯片。输出最大 功率150W最大电流 6A。APS54083 可实现线 性调光和 PWM 调光&#xff0c;线性调光脚有效电压 范围 0.5-2.5V.PWM 调光频率范围 1…

第一天 :虚拟机的安装、Centos的安装、FinalShell的安装

Linux学习之虚拟机的安装 一、虚拟机的下载二、虚拟机的安装三、Centos的安装四、vm中安装centos五、finalShell安装 一、虚拟机的下载 1、进入安装官网https://www.vmware.com/cn/products/workstation-pro.html 2、下滑点击试用版下载 3、点击后在新页面下滑&#xff0c;找…

CnOpenData中国汽车能源消耗量数据

一、数据简介 工业和信息化部组织制定的《乘用车燃料消耗量限值》强制性国家标准&#xff08;GB19578-2021&#xff09;于2021年7月1日起正式实施&#xff0c;该标准规定了燃用汽油或柴油燃料、最大设计总质量不超过3500kg的M1类车辆在今后一段时期的燃料消耗量限值要求&#x…

瑞芯微RK3568智慧视频录像机NVR设备解决方案

NVR技术应用功能模式&#xff0c;较为灵活且能够在很大程度上满足当今视频监控系统功能需求。以NVR技术为核心的小型NVR方案&#xff0c;具有规模较小、操作灵活、使用方便、经济实用等优点&#xff0c;其前端主要配合高清视频摄像机支持8路720P的高清视频图像接入&#xff0c;…

刚进公司就负责项目,把老弟整蒙了!

刚进公司就负责项目&#xff0c;把老弟整蒙了&#xff01; 大家好&#xff0c;我是鱼皮&#xff0c;先把封面图送给大家&#xff1a; 又快到周末了&#xff0c;今天分享一些轻松的编程经验~ 还记得我学编程的老弟小阿巴么&#xff1f;他目前大二&#xff0c;听说最近刚刚找到…

java 版本企业电子招投标采购系统源码之登录页面

​ 信息数智化招采系统 服务框架&#xff1a;Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构&#xff1a;VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术&#xff1a;Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…

基于python的socket网络通信【1】

一、Socket原理 学习了大佬的知识&#xff0c;简单记一些笔记 https://www.jianshu.com/p/066d99da7cbd http://c.biancheng.net/view/2351.html 1.1什么是Socket 在计算机通信领域&#xff0c;socket 被翻译为“套接字”&#xff0c;它是计算机之间进行通信的一种约定或一种…

Speech and Language Processing-之最小化编辑距离

今天讲编辑距离。 编辑距离为我们提供了一种量化这两种关于字符串相似度的直觉的方法。更正式地说&#xff0c;两个字符串之间的最小编辑距离定义为将一个字符串转换为另一个字符串所需的最小编辑操作(插入、删除、替换等操作)数量。 如上&#xff0c;图中第一行字符串和第二行…

Java-代码生成器的实现

文章目录 前言一、概述二、手写代码1. 简要说明2. 代码编写3. 完整代码4. 测试效果 三、项目源码 前言 最近看了一个开源的项目&#xff0c;jfinal-layui&#xff0c;然后这个项目里面有一个 代码生成器 的功能 之前虽然有用过代码生成器&#xff0c;但是从来没有看过相关的源…

【react从入门到精通】react入门这一篇就够了

文章目录 前言什么是 React&#xff1f;安装和配置 React创建 React 组件渲染 React 组件使用 JSX传递属性&#xff08;Props&#xff09;处理组件状态&#xff08;State&#xff09;处理用户输入&#xff08;事件处理&#xff09;组合和嵌套组件写在最后 前言 React 是一种由 …