当前位置: 首页 > 知识库问答 >
问题:

如何从Apache POI演示中获取动画信息

闾丘玮
2023-03-14

有一个名为AnimationInfo的类,它应该提供演示中的动画信息。但我运气不好,我没能得到它。

List<XSLFShape> shapes = slide.getShapes();
for (XSLFShape shape: shapes) {
  //Need to get animation of this shape here
}

有人能帮我吗?谢谢。

PS:我正在使用POI的3.17版本。

共有1个答案

归翔
2023-03-14

考虑到只检测动画的添加,可以检查工作表的计时信息,该信息很可能识别动画的存在,即,如果添加动画,然后再次删除,则可能会得到假阳性。此外,您需要检查所有幻灯片,直到找到动画。

import java.io.FileInputStream;

import org.apache.poi.hslf.record.Record;
import org.apache.poi.hslf.record.RecordContainer;
import org.apache.poi.hslf.record.RecordTypes;
import org.apache.poi.hslf.usermodel.HSLFSlide;
import org.apache.poi.sl.usermodel.Slide;
import org.apache.poi.sl.usermodel.SlideShow;
import org.apache.poi.sl.usermodel.SlideShowFactory;
import org.apache.poi.xslf.usermodel.XSLFSlide;

public class AnimCheck {
    private static final int timingRecordPath[] = {
        RecordTypes.ProgTags.typeID,
        RecordTypes.ProgBinaryTag.typeID,
        RecordTypes.BinaryTagData.typeID,
        0xf144
    };


    public static void main(String[] args) throws Exception {
        SlideShow<?,?> ppt = SlideShowFactory.create(new FileInputStream("no_anim.pptx"));
        Slide<?,?> slide = ppt.getSlides().get(0);
        boolean hasTiming;
        if (slide instanceof XSLFSlide) {
            XSLFSlide xsld = (XSLFSlide)slide;
            hasTiming = xsld.getXmlObject().isSetTiming();
        } else {
            HSLFSlide hsld = (HSLFSlide)slide;
            Record lastRecord = hsld.getSheetContainer();
            boolean found = true;
            for (int ri : timingRecordPath) {
                lastRecord = ((RecordContainer)lastRecord).findFirstOfType(ri);
                if (lastRecord == null) {
                    found = false;
                    break;
                }
            }
            hasTiming = found;
        }
        ppt.close();
        System.out.println(hasTiming);
    }
}
 类似资料:
  • 我会尽力将 LeetCode 上所有的题目都用动画的形式演示出来。

  • 我正在评估将AdMob Interstitual纳入iOS应用程序的可能性。有一件事我不确定,那就是我们是否能以一种生动的方式呈现间隙。从文档中可以看出,显示间隙的唯一方法是使用 方法,因为GadInterstival不是视图,而是NSObject。是否有任何方法可以在动画中显示它,例如滑动/滚动? 谢啦!

  • 问题内容: 当我发现有些奇怪的东西时,我正在学习如何使用Java 8流。 除了浮点数组外,其他所有方法都有: 类似地,也有用于int,double等的Stream实现,但没有float: 有什么理由吗? 推荐使用浮动流的方法是什么? 问题答案: 来自Cay S.Horstmann: 2.12。基本类型流 …如果要存储short,char,byte和boolean,请使用IntStream,对于fl

  • 问题内容: 我正在编写一个在x86-32和x86-64 Linux中使用和进行反汇编的工具。问题是,尽管我能够分解libopcode,但无法获得任何指令信息。为了演示起见,我举了一个最小的例子来重现我的问题。该程序应从入口点反汇编到第一个/ 。 该代码有点被全局变量所破坏,为简洁起见,省略了错误检查等,但是应该清楚地说明问题。 可以使用以下内容构建此源。要执行成功的链接,需要将该软件包安装在本地计

  • 问题内容: 我试图用HTML,jQuery和JavaScript进行一些简单的数学计算,所以我想从用户那里得到输入。 对于输入,我尝试这样做: 但是我无法执行任何类型的计算,因为这些值是字符串。 请任何人告诉我如何将它们转换为整数。 问题答案: parseInt() 或 parseFloat() 是JavaScript中的函数,可以帮助您将值分别转换为整数或浮点数。 句法: string :要解析

  • 实际上,我有一个,它是(在和),现在我需要创建另一个(在该的下方),一开始必须不可见。 当我的活动运行时,我想对隐藏的布局进行动画处理。 隐藏的必须自下而上。我不知道如何实现这个动画??我不知道如何创建一个最初不可见的布局,经过一段时间的延迟后,它必须从屏幕下方显示并从侧面显示??? 这是我的xml文件代码