2017-08-12 43 views
0

有一個名爲AnimationInfo的類應該從演示中提供動畫信息。但我運氣不好,我無法得到它。如何從Apache POI演示獲取動畫信息演示

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

任何人都可以幫助我嗎?謝謝。我使用3.17版本的POI。

+1

AnimationInfo來自HSLF,而不是XSLF - 您可以通過* .getXmlObject()訪問轉換信息。你想收集哪些信息?查看[更早的示例](https://stackoverflow.com/questions/15197300/apache-poi-xslf-adding-movie-to-the-slide/16322340#16322340)來設置時間信息。 – kiwiwings

+0

@kiwiwings哪個對象在HSLF中有getXmlObject()方法?我也試過HSLF,我知道它只支持PPT擴展,而XSLF支持PPTX擴展。我只想檢測演示文稿中是否應用了任何動畫,或者不在bot .ppt和.pptx文件中。你能幫我解決嗎? –

+0

只有XSLF是基於XML的,因此只有XSLF具有getXmlObject()方法。我會嘗試將一些動畫檢測代碼放在一起...基本上我會在HSLF中使用AnimationInfo並在XSLF中查找時間信息... – kiwiwings

回答

2

鑑於加入的僅檢測動畫,片材能夠被檢查溶液中加入的動畫,其很可能識別的動畫的存在的定時的信息,即,你可以得到一個假陽性的情況下,然後再除去。此外,您需要檢查所有幻燈片,直到找到動畫。

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); 
    } 
} 
+0

我正在線程中獲得'Exception「main」java.io.IOException:java .lang.NoSuchMethodError:org.apache.poi.util.IOUtils.toByteArray(Ljava/io/InputStream; I)[B'是否需要添加任何額外的jar? –

+0

.pptx擴展似乎正在工作,但.ppt擴展得到以上錯誤。我們能解決這個錯誤嗎? –

+0

哦,這是由於班級道路上的舊罐子。我們是否也可以在Shape對象中檢測動畫/效果?應該有這樣的情況,幻燈片中沒有動畫,但可能會對Shapes產生影響。我們可以檢測到嗎? –