有一个名为AnimationInfo
的类应该从演示中提供动画信息。但我运气不好,我无法得到它。如何从Apache POI演示获取动画信息演示
List<XSLFShape> shapes = slide.getShapes();
for (XSLFShape shape: shapes) {
//Need to get animation of this shape here
}
任何人都可以帮助我吗?谢谢。我使用3.17
版本的POI。
有一个名为AnimationInfo
的类应该从演示中提供动画信息。但我运气不好,我无法得到它。如何从Apache POI演示获取动画信息演示
List<XSLFShape> shapes = slide.getShapes();
for (XSLFShape shape: shapes) {
//Need to get animation of this shape here
}
任何人都可以帮助我吗?谢谢。我使用3.17
版本的POI。
鉴于加入的仅检测动画,片材能够被检查溶液中加入的动画,其很可能识别的动画的存在的定时的信息,即,你可以得到一个假阳性的情况下,然后再除去。此外,您需要检查所有幻灯片,直到找到动画。
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);
}
}
我正在线程中获得'Exception“main”java.io.IOException:java .lang.NoSuchMethodError:org.apache.poi.util.IOUtils.toByteArray(Ljava/io/InputStream; I)[B'是否需要添加任何额外的jar? –
.pptx扩展似乎正在工作,但.ppt扩展得到以上错误。我们能解决这个错误吗? –
哦,这是由于班级道路上的旧罐子。我们是否也可以在Shape对象中检测动画/效果?应该有这样的情况,幻灯片中没有动画,但可能会对Shapes产生影响。我们可以检测到吗? –
AnimationInfo来自HSLF,而不是XSLF - 您可以通过* .getXmlObject()访问转换信息。你想收集哪些信息?查看[更早的示例](https://stackoverflow.com/questions/15197300/apache-poi-xslf-adding-movie-to-the-slide/16322340#16322340)来设置时间信息。 – kiwiwings
@kiwiwings哪个对象在HSLF中有getXmlObject()方法?我也试过HSLF,我知道它只支持PPT扩展,而XSLF支持PPTX扩展。我只想检测演示文稿中是否应用了任何动画,或者不在bot .ppt和.pptx文件中。你能帮我解决吗? –
只有XSLF是基于XML的,因此只有XSLF具有getXmlObject()方法。我会尝试将一些动画检测代码放在一起...基本上我会在HSLF中使用AnimationInfo并在XSLF中查找时间信息... – kiwiwings