【问题标题】:How to get the Slide number using java via Apache POI API如何通过 Apache POI API 使用 java 获取幻灯片编号
【发布时间】:2012-02-12 06:25:39
【问题描述】:

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

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

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) 

【问题讨论】:

  • 错误是什么?它是在哪里生成的?日志帮助..
  • 是的!谢谢你的建议我已经发布了错误
  • 它没有改变同样的错误!!
  • count.java:22 对应于您的count 类中的哪一行?
  • SlideShow ppt = new SlideShow(is);

标签: java android slideshow apache-poi slide


【解决方案1】:

你试过了吗

int getSlideCount()

它在文档中..

【讨论】:

    【解决方案2】:

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

    我的代码使用了一些新功能,可以正常编译,但在出现“MethodNotFoundException”或“IncompatibleClassChangeError”时会失败

    几乎可以肯定,您的类路径中有旧版本的 POI。相当多的运行时和其他软件包会提供旧版本的 POI,所以这是一个很容易在您没有意识到的情况下遇到的问题。

    识别有问题的早期 jar 文件的最佳方法是使用几行 java.util.jar 文件。这些将加载核心 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);
    

    【讨论】:

    • 我正在使用 poi-3.8-beta5 。其新版本的 POI。还是不行
    • 您可能认为您使用的是 beta 5,但我从您的错误中相当确定您实际上也有旧版本的 POI,并且正在默默地使用它。试试上面的代码,它会告诉你你真正在使用什么!
    • 不,它显示 poi-3.8-beta5 。输出为Core POI came from file:/E:/research/RESEARCH/PPT1/poi/poi-3.8-beta5.jar!/org/apache/poi/poifs/filesystem/POIFSFileSystem.class
    • 暂存器 jar 怎么样?您得到的异常是由不匹配的 jar 引起的
    • 我终于得到了答案 谢谢大家。我用了poi-scratchpad-3.8-beta4-20110826.jar,我明白了。
    【解决方案3】:

    最近我想数一数我为考试而学习的幻灯片数量。该问题与您的问题非常相似,尽管您的问题已经存在 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);
    
            }
        }
    
    
    }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      相关资源
      最近更新 更多