2012-01-17 31 views
1

如何使用java获取.ppt文件中幻灯片的数量。要访问.ppt,我们需要Apache POI API - 尤其是Slide[]类。如何通过Apache POI使用java获取幻灯片编号API

我使用的方法getSlideNumber()here来检索页码,但我仍然收到错误。我想知道如何获得幻灯片编号。

public final class count { 

    public static void main(String args[]) throws Exception { 

    File file= new File("C:/Users/THIYAGARAJAN/Desktop/ppt52.ppt"); 
    FileInputStream is = new FileInputStream(file); 
    SlideShow ppt = new SlideShow(is); 
    is.close(); 
    Slide[] slide = ppt.getSlides(); 
    System.out.println(slide.length); 
    for (int i = 0; i < slide.length; i++) { 
     String title = slide[i].getTitle(); 
     System.out.println("Rendering slide " 
         + slide[i].getSlideNumber() 
         + (title == null ? "" : ": " + title)); 
    } 
    } 

} 

此编码是否正确?

编辑:这是错误我在控制台中看到:

Exception in thread "main" java.lang.NoSuchFieldError: filesystem 
at org.apache.poi.hslf.HSLFSlideShow.getPOIFSFileSystem(HSLFSlideShow.java:79) 
at org.apache.poi.hslf.EncryptedSlideShow.checkIfEncrypted(EncryptedSlideShow.java:‌​51) 
at org.apache.poi.hslf.HSLFSlideShow.<init>(HSLFSlideShow.java:141) 
at org.apache.poi.hslf.HSLFSlideShow.<init>(HSLFSlideShow.java:115) 
at org.apache.poi.hslf.HSLFSlideShow.<init>(HSLFSlideShow.java:103) 
at org.apache.poi.hslf.usermodel.SlideShow.<init>(SlideShow.java:121) 
at count.count.main(count.java:22) 
+0

什么是错误?它在哪里产生?日志帮助.. – 2012-01-17 14:57:20

+0

yup !!谢谢你的建议我发布了错误 – Thiyagu 2012-01-17 15:19:23

+0

其不会改变相同的错误! – Thiyagu 2012-01-17 15:56:12

回答

0

您已发布的异常几乎是直出的POI FAQ

我的代码使用了一些新的功能,编译罚款,但在现场用“MethodNotFoundException”或“IncompatibleClassChangeError

你几乎可以肯定的POI在classpath旧版本的失败。不少运行时间和其他软件包将发布旧版POI,因此这是一个很容易发生的问题,无法实现。

找出违规的早期jar文件的最好方法是用几行java。这些将加载一个核心POI类,并报告它来自哪里。

ClassLoader classloader = 
     org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader(); 
URL res = classloader.getResource(
     "org/apache/poi/poifs/filesystem/POIFSFileSystem.class"); 
String path = res.getPath(); 
System.out.println("Core POI came from " + path); 
+0

我正在使用poi-3.8-beta5。它的新版POI。仍然无法工作 – Thiyagu 2012-01-17 15:53:19

+0

您可能认为您使用的是测试版5,但我相当肯定您的错误是您实际上也拥有较旧版本的POI,并且正在悄悄地使用它。试试上面的代码,它会告诉你你真正使用的是什么! – Gagravarr 2012-01-17 16:05:33

+0

不,它显示poi-3.8-beta5。输出是'核心POI来自文件:/ E:/research/RESEARCH/PPT1/poi/poi-3.8-beta5.jar!/org/apache/poi/poifs/filesystem/POIFSFileSystem.class ' – Thiyagu 2012-01-17 17:13:01

1

你试过

int getSlideCount() 
文档中

其..

0

最近我想算幻灯片我也学习了我考试的次数。这个问题与你的问题非常相似,即使你的问题是3岁,有人可能会觉得它有用。

我给我的程序一个路径,然后获取该文件夹中的所有ppt,并使用getNoOfSlides方法计算所有幻灯片。

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.util.List; 



import org.apache.poi.xslf.usermodel.XMLSlideShow; 
import org.apache.poi.xslf.usermodel.XSLFSlide; 



public final class count { 

    public static int total=0; 

     public static void main(String args[]) throws Exception { 

     File files = new File("F:/Dropbox/KFUPM/Sem 151/IAS/IAS final"); 
     searchInTextFiles(files); 
     System.out.println("Total Slides in IAS are: "); 
     System.out.println(total); 
     } 


public static void getNoOfSlides(String path) throws IOException 
{ 
    File file = new File(path); 
    System.out.println(path); 
    FileInputStream is = new FileInputStream(file); 
    XMLSlideShow pps = new XMLSlideShow(is); 


    is.close(); 



    List<XSLFSlide> slides = pps.getSlides(); 

    total+= slides.size(); 
    System.out.println(slides.size()); 


    // System.out.println(slides.size()); 

    } 


public static void searchInTextFiles(File dir) throws IOException { 
    File[] a = dir.listFiles(); 
    for (File f : a) { 
     if (f.isDirectory()) { 
      searchInTextFiles(f); 
     } else if (f.getName().endsWith(".pptx")) { 
      String path= f.getAbsolutePath(); 
      getNoOfSlides(path); 

     } 
    } 


} 

} 
相关问题