首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过Apache POI API使用java获取幻灯片编号

如何通过Apache POI API使用java获取幻灯片编号
EN

Stack Overflow用户
提问于 2012-01-17 20:44:10
回答 3查看 2.6K关注 0票数 1

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

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

代码语言:javascript
复制
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));
    }
  }

}

这段代码正确吗?

编辑:以下是我在控制台中得到的错误:

代码语言:javascript
复制
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) 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-17 23:30:13

您发布的异常几乎直接来自POI FAQ

我的代码使用了一些新功能,编译得很好,但在使用"MethodNotFoundException“或"IncompatibleClassChangeError”时会失败

您的类路径中几乎肯定有一个旧版本的POI。相当多的运行时和其他包将发布旧版本的POI,所以这是一个很容易遇到的问题,而您没有意识到这一点。

识别有问题的早期jar文件的最好方法是使用几行java代码。它们将加载一个核心POI类,并报告它的来源。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-01-17 21:08:06

你试过了吗?

代码语言:javascript
复制
int getSlideCount()

它在文档中..

票数 1
EN

Stack Overflow用户

发布于 2015-12-23 04:25:51

最近我想数一数我也为了考试而学习的幻灯片的数量。这个问题和你的非常相似,即使你的问题是3年前的,有人可能会发现它很有用。

我给我的程序一个路径,然后它会得到文件夹中的所有ppt,并使用getNoOfSlides方法来计算所有幻灯片的数量。

代码语言:javascript
复制
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);

        }
    }


}

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8894810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档