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

aspose如何获取PPT放映页“切换”的“持续时间”值

aspose如何获取PPT放映页“切换”的“持续时间”值

  • 项目场景
  • 问题描述
    • 问题1:从官方文档和资料查阅发现并没有对切换的持续时间进行处理的方法
    • 问题2:aspose的依赖包中,所有的关键对象都进行了混淆处理
  • 解决方案
    • 1、找到ppt切换的持续时间对应的混淆对象中的字段
    • 2、获取ppt切换的持续时间
    • 3、设置ppt切换的持续时间
    • 4、处理结果

项目场景

需求:

  • 使用的是版本是:aspose-slides-22.5-jdk16
    使用PowerPoint创建的ppt文件,点击左侧页后,在上面的菜单栏点击"切换" -> “淡出” -> “持续时间”,此时在aspose中如果获取或者修改这个值呢?

在这里插入图片描述


问题描述

  • 在aspose官方接口中“切换”设置的属性是在ISlideShowTransition中获取,以下是官方接口提供的方法:

文档地址:https://reference.aspose.com/slides/java/com.aspose.slides/islideshowtransition/

在这里插入图片描述

问题1:从官方文档和资料查阅发现并没有对切换的持续时间进行处理的方法

在这里插入图片描述
导致的问题

  • 获取困难:无法通过aspose提供的api接口,直接对持续时间进行获取和修改操作

问题2:aspose的依赖包中,所有的关键对象都进行了混淆处理

在这里插入图片描述

图 ISlideShowTransition对象运行中对象属性值

在这里插入图片描述

图 ISlideShowTransition对象方法

在这里插入图片描述

图 gson 对象序列化处理报错

导致的问题

  • 难以调试和维护:混淆后的类名和方法名使得代码难以阅读和理解,增加了调试和维护的复杂度。

  • 反射操作困难:由于类名和方法名被混淆,使用反射操作这些类和方法时需要知道混淆后的名称,这通常是不可预测的。

  • 序列化困难:混淆后直接通过gson、jackson等方式, JSON 解析或对象序列化处理会报错


解决方案

获取混淆后的对象属性值,确实会比未混淆的情况下更为复杂。混淆会改变类名、方法名、字段名等,这可能导致在调试或反射时无法直接访问这些属性。然而,可以通过以下方法尝试访问混淆后的对象属性值:

  • 反射可以绕过混淆的名称变化,直接访问对象的字段和方法。即使字段和方法的名称被混淆,只要知道其访问方式,就可以通过反射获取这些属性的值。

1、找到ppt切换的持续时间对应的混淆对象中的字段

首先需要找到ppt切换的持续时间对应的混淆对象中的哪一个字段。这里是ISlideShowTransition对象 —> else —> if 对应着 持续时间值 20s
在这里插入图片描述

2、获取ppt切换的持续时间

方法描述: 通过反射获取对象中混淆后的字段值。

	/*** @description: 获取ppt切换的持续时间* @param transition* @return: String**/public String getSwitchDuration(ISlideShowTransition transition) {String duration = "0";try {// 获取 'else' 字段的值,它是一个 'com.aspose.slides.aye' 类型的对象Field elseField = transition.getClass().getDeclaredField("else");elseField.setAccessible(true);  // 设置字段可访问Object elseFieldValue = elseField.get(transition);if (elseFieldValue != null) {Class<?> ayeClass = elseFieldValue.getClass();Field[] ayeFields = ayeClass.getDeclaredFields();for (Field ayeField : ayeFields) {ayeField.setAccessible(true);  // 如果字段是私有的,设置为可访问Object fieldValue = ayeField.get(elseFieldValue);  // 获取字段的值if (ayeField.getName().equals("if") && fieldValue != null) {duration = fieldValue.toString();}}}} catch (Exception e) {log.error("获取ppt切换的持续时间失败");}return duration;}

3、设置ppt切换的持续时间

方法描述: 通过反射设置对象中混淆后的字段值。

	/*** @description: 设置ppt切换的持续时间* @param transition* @param duration* @return: void**/public void setSwitchDuration(ISlideShowTransition transition, String duration) {try {// 获取 'else' 字段的值,它是一个 'com.aspose.slides.aye' 类型的对象Field elseField = transition.getClass().getDeclaredField("else");elseField.setAccessible(true);  // 设置字段可访问Object elseFieldValue = elseField.get(transition);if (elseFieldValue != null) {Class<?> ayeClass = elseFieldValue.getClass();Field[] ayeFields = ayeClass.getDeclaredFields();for (Field ayeField : ayeFields) {ayeField.setAccessible(true);  // 如果字段是私有的,设置为可访问if (ayeField.getName().equals("if")) {// 修改字段值ayeField.set(elseFieldValue, duration);System.out.println("PPT切换时间已修改为: " + duration);// 确认修改成功Object updatedValue = ayeField.get(elseFieldValue);System.out.println("更新后的值: " + updatedValue);}}}} catch (Exception e) {log.error("设置ppt切换的持续时间失败", e);}}

4、处理结果

修改为1.5秒

     /*** @description: 测试修改持续时间* @param* @return: void**/@Testpublic void test(){String pptFile = "D:\\Desktop\\anim.pptx";Presentation presentation = new Presentation(pptFile);// 遍历每一张幻灯片for (ISlide slide : presentation.getSlides()) {ISlideShowTransition transition = slide.getSlideShowTransition();String duration = getSwitchDuration(transition);System.out.println(String.format("幻灯片切换的持续时间: %sms", duration));String setTime = "1500";setSwitchDuration(transition, setTime);System.out.println(transition);}// 保存修改后的PPTpresentation.save(pptFile, SaveFormat.Pptx);  // 保存修改后的文件System.out.println("修改后的PPT已保存到: " + pptFile);}

修改前:
在这里插入图片描述

修改后:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

aspose如何获取PPT放映页“切换”的“持续时间”值

aspose如何获取PPT放映页“切换”的“持续时间”值 项目场景问题描述问题1&#xff1a;从官方文档和资料查阅发现并没有对切换的持续时间进行处理的方法问题2&#xff1a;aspose的依赖包中&#xff0c;所有的关键对象都进行了混淆处理 解决方案1、找到ppt切换的持续时间对应的混…...

【MQTT】代理服务比较RabbitMQ、Mosquitto 和 EMQX

前言 目前要处理大量设备同时频繁发送数据的情况&#xff0c;MQTT协议确实是一个更优的选择&#xff0c;因为它特别适合需要低带宽和高效能的物联网应用&#xff0c;下面是对目前主流协议的对比 数据截止日期&#xff1a;2024年11月10日 基础设施 后端&#xff1a; springclo…...

【C#/C++】C++/CL中String^的含义和举例,C++层需要调用C#层对象时...

示例&#xff1a; String^ IDataServer::GetParam(String^ aParamName){ /// }在 C/CLI 中&#xff0c;String^ 和 IDataServer::GetParam(String^ aParamName) 这种写法是一种混合了 C 和 .NET 的语法&#xff0c;用于在 C 中操作 .NET 对象。C/CLI 是微软扩展的 C 语言&…...

Python学习从0到1 day26 第三阶段 Spark ② 数据计算Ⅰ

人总是会执着于失去的&#xff0c;而又不珍惜现在所拥有的 —— 24.11.9 一、map方法 PySpark的数据计算&#xff0c;都是基于RDD对象来进行的&#xff0c;采用依赖进行&#xff0c;RDD对象内置丰富的成员方法&#xff08;算子&#xff09; map算子 功能&#xff1a;map算子…...

【详细】如何优雅地删除 Docker 容器与镜像

内容预览 ≧∀≦ゞ 镜像与容器的区别删除容器和镜像的具体步骤1. 删除容器步骤 1&#xff1a;查看当前运行的容器步骤 2&#xff1a;停止容器步骤 3&#xff1a;删除容器 2. 删除镜像步骤 1&#xff1a;查看镜像列表步骤 2&#xff1a;删除镜像 3. 删除所有容器和镜像 使用 1Pa…...

Spring Spring Boot 常用注解总结

在 Java 开发中&#xff0c;Spring 和 Spring Boot 框架广泛应用于企业级应用开发。这两个框架提供了丰富的注解&#xff0c;使得开发更加高效和便捷。本文将对 Spring 和 Spring Boot 中常用的注解进行总结。 一、Spring 常用注解 1. Component 作用&#xff1a;用于将普通的…...

Flink独立集群+Flink整合yarn

Flink独立集群的搭建&#xff1a; 1、上传解压配置环境变量 # 1、解压 tar -xvf flink-1.15.4-bin-scala_2.12.tgz # 2、修改环境变量 export FLINK_HOME/usr/local/soft/flink-1.15.4 export PATH$PATH:$FLINK_HOME/bin 2、修改配置文件 cd /usr/local/soft/flink-1.15.4/…...

动态规划 之 简单多状态 dp 问题 算法专题

一. 按摩师 按摩师 状态表示 根据经验 题目要求 dp[i] 表示: 选择到i位置时, 此时的最长预约时长 但是根据题目又分成两种情况: f[i] : 选择到 i 位置的时候, nums[i] 必选, 此时的最长预约时长 g[i] : 选择到 i 位置的时候, nums[i] 不选, 此时的最长预约时长状态转移方程 …...

qt QPixmapCache详解

1、概述 QPixmapCache是Qt框架中提供的一个功能强大的图像缓存管理工具类。它允许开发者在全局范围内缓存QPixmap对象&#xff0c;从而有效减少图像的重复加载&#xff0c;提高图像加载和显示的效率。这对于需要频繁加载和显示图像的用户界面应用来说尤为重要&#xff0c;能够…...

Redis中的持久化

什么是 Redis 持久化&#xff1f; Redis 是一个内存数据库&#xff0c;也就是说它主要把数据存储在内存中&#xff0c;这样可以实现非常高的读写速度。通常&#xff0c;内存数据库是非常快速且高效的&#xff0c;但它也有一个很大的问题&#xff1a;数据丢失的风险。因为当 Red…...

Unity 如何优雅的限定文本长度, 包含对特殊字符,汉字,数字的处理。实际的案例包括 用户昵称

常规限定文本长度 ( 通过 UntiyEngine.UI.Inputfiled 附带的长度限定 ) 痛点1 无法对中文&#xff0c;数字&#xff0c;英文进行识别&#xff0c;同样数量的汉字和同样数量的英文像素长度是不一样的&#xff0c;当我们限定固定长度后&#xff0c;在界面上的排版不够美观 痛点2…...

SMO+PLL滑膜观测器、MARS模型参考自适应观测器simulink仿真

模型内容介绍&#xff1a; &#xff08;1&#xff09;SMOPLL滑膜观测器通过SMO估计电机的转速和位置信息&#xff0c;并利用PLL技术对这些信息进行跟踪和校正&#xff0c;以实现高精度的电机控制&#xff1b; &#xff08;2&#xff09;MARS是一种基于模型参考自适应控制理论…...

例题解析:利用异或运算(XOR)找出单独的数

异或运算&#xff08;XOR&#xff09; 异或运算是一种位运算&#xff0c;通常用符号 ^ 表示。它的运算规则如下&#xff1a; 如果两个二进制位相同&#xff0c;结果为 0。如果两个二进制位不同&#xff0c;结果为 1。 具体来说&#xff0c;对于两个二进制位 a 和 b&#xff…...

如何处理微信小程序大量未捕获的异常

1&#xff09;如何处理微信小程序大量未捕获的异常 2&#xff09;如何关闭代码创建的纹理的读写&#xff0c;或者创建不带读写的图片 3&#xff09;回收带有贴图和Collider的Mesh&#xff0c;如何正确用对象池维护 4&#xff09;Cloth组件使用在一个篮筐上&#xff0c;运行后篮…...

C#-StringBuilder

string&#xff1a;特殊的引用 每次重新赋值或者拼接时会分配新的内存空间&#xff0c;如果一个字符串经常改变会非常浪费空间。 StringBuilder&#xff1a;C#提供的一个用于处理字符串的公共类 修改字符串而不创建新的对象&#xff0c;需要频繁修改和拼接的字符串可以使用它…...

SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based

关注这个靶场的其它相关笔记&#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 输入下面的链接进入靶场&#xff08;如果你的地址和我不一样&#xff0c;按照你本地的环境来&#xff09;&#xff1a; http://localhost/sqli-labs/Less-39/ 本关是堆…...

linux安装zookeeper和kafka集群

linux安装zookeeper和kafka集群 一、Zookeeper集群部署安装zookeeper1. 下载2. 上传, 解压3. 配置 Zookeeper 节点4. 创建 myid 文件5. 启动参数更改6. sh文件授权7. 启动集群8. 防火墙开启端口 验证集群 二、kafka集群安装安装Kafka1. 下载Kafka安装包2. 上传到服务器&#xf…...

洞悉 Linux 系统运行细节,使用 atop 监测和回看系统负载状态

Linux系统的资源使用情况&#xff0c;你可以通过使用命令如free、top和netstat来实时监控内存、CPU及端口的使用状态。对于需要追踪历史资源消耗动态的场景&#xff0c;atop命令则能有效帮助用户查看过去的系统负载情况。 本篇教程的灵感源自一位小伙伴的真实经历&#xff1a;…...

“双十一”电商狂欢进行时,在AI的加持下看网易云信IM、RTC如何助力商家!

作为一年一度的消费盛会&#xff0c;2024年“双十一”购物狂欢节早已拉开帷幕。蹲守直播间、在主播热情介绍中点开链接并加购&#xff0c;也已成为大多数人打开“双11”的重要方式。然而&#xff0c;在这火热的购物氛围背后&#xff0c;主播频频“翻车”、优质主播稀缺、客服响…...

Python调用企业微信的扫一扫

在企业微信里面新建了一个应用&#xff0c;指向了搭建服务器上Django写的web应用。 web应用需要使用扫描二维码的功能&#xff0c;就使用了大家都评价效果好的微信的扫一扫&#xff0c;事实也证明微信的扫一扫很好&#xff0c;但实现这个功能还是花了自己不少时间&#xff0c;很…...

Vite多入口页面配置实战:从单页应用到多页项目的平滑升级指南

Vite多入口页面配置实战&#xff1a;从单页应用到多页项目的平滑升级指南 当你已经用Vite构建了一个优雅的单页应用&#xff0c;突然业务需求要求你扩展为多页项目时&#xff0c;是否感到手足无措&#xff1f;别担心&#xff0c;这种架构演进在项目成长过程中再常见不过了。作为…...

从原理到代码:固高GTS控制卡SmartHome回零功能完整开发指南(附C#示例)

从原理到代码&#xff1a;固高GTS控制卡SmartHome回零功能完整开发指南&#xff08;附C#示例&#xff09; 在工业自动化领域&#xff0c;运动控制系统的精度和可靠性往往取决于一个看似简单却至关重要的功能——回零操作。作为固高GTS系列控制卡的核心功能之一&#xff0c;Smar…...

Wan 3D Causal VAE:一篇讲清视觉 token、时间压缩、3D Causal 卷积

从 Emu3.5、Show-o2、Show-o、Chameleon,到 Wan 3D Causal VAE:一篇讲清视觉 token、时间压缩、3D Causal 卷积和数据量估算的入门分析 0. 先说这篇文章要解决什么问题 这篇文章想回答 6 个问题: Emu3.5、Show-o2、Show-o、Chameleon 这几类 UMM,到底是怎么表示图像和视频…...

seo优化机构怎样选择才合适_什么是seo优化机构

SEO优化机构怎样选择才合适_什么是SEO优化机构 在当今的数字化时代&#xff0c;拥有一个高效的网站已经不再是企业竞争力的唯一标准&#xff0c;更重要的是这个网站能够在搜索引擎上获得良好的排名。这就是搜索引擎优化&#xff08;SEO&#xff09;的重要性所在。选择一个合适…...

三星 Infinite AI 葡萄酒冰箱:智能厨房新尝试能否突围?

AI 加持&#xff0c;葡萄酒管理新体验周一&#xff0c;三星推出了 Infinite AI 葡萄酒冰箱&#xff0c;目前仅在韩国有售。这款冰箱采用了“AI 葡萄酒管理器”&#xff0c;借助安装在顶部的“AI 视觉”摄像头&#xff0c;能检测用户放入或取出的酒瓶及位置&#xff0c;还能分析…...

大厂高薪抢手!文科生如何抓住AI时代机遇,实现职业逆袭?

大厂纷纷高薪招聘文科生&#xff0c;引发社会关注。文科生凭借沟通、叙事、逻辑等优势&#xff0c;在大模型理解人类价值观、企业品牌宣传等方面发挥作用。高校也调整专业设置&#xff0c;培养跨学科人才。文章建议文科生根据自身专业&#xff0c;向文案策划、品牌宣传、法务、…...

计算机毕业设计springboot基于web的好文阅读网站的设计与实现 SpringBoot在线文学阅读与创作平台的设计与实现 基于Web的数字化阅读社区系统构建

计算机毕业设计springboot基于web的好文阅读网站的设计与实现xl6429gd &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着互联网技术的飞速发展和数字阅读习惯的普及&#xff0…...

Hunyuan-MT-7B多语种能力:Pixel Language Portal在联合国六种官方语言互译中的表现

Hunyuan-MT-7B多语种能力&#xff1a;Pixel Language Portal在联合国六种官方语言互译中的表现 1. 引言&#xff1a;当像素冒险遇见多语言翻译 在全球化交流日益频繁的今天&#xff0c;语言障碍仍然是横亘在不同文化之间的无形壁垒。传统翻译工具往往给人冰冷、机械的使用体验…...

3步掌握百度网盘效率工具:全平台秒传链接解决方案

3步掌握百度网盘效率工具&#xff1a;全平台秒传链接解决方案 【免费下载链接】baidupan-rapidupload 百度网盘秒传链接转存/生成/转换 网页工具 (全平台可用) 项目地址: https://gitcode.com/gh_mirrors/bai/baidupan-rapidupload 在数字化协作时代&#xff0c;文件传输…...

k8s中部署prometheus并监控k8s集群以及nginx案例

4台主机 node1主机&#xff1a;k8s集群中的master node2主机&#xff1a;搭建了harbor仓库&#xff0c;存储所需的docker镜像 test3、4主机&#xff1a;k8s集群中的woker 搭建prometheus https://github.com/prometheus-operator/kube-prometheus 获取prometheus压缩包的…...