Как получить номер слайда с помощью Java через API Apache POI - PullRequest
1 голос
/ 17 января 2012

Как узнать количество слайдов в файле .ppt, используя java.Для доступа к .ppt нам требуется API POI Apache - особенно класс Slide[].

Я использую метод 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) 

Ответы [ 3 ]

1 голос
/ 17 января 2012

вы пробовали

int getSlideCount()

это в документации ..

0 голосов
/ 22 декабря 2015

Недавно я хотел посчитать количество слайдов, которые я тоже изучаю для своего экзамена.Эта проблема очень похожа на вашу, хотя вашей проблеме уже 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);

        }
    }


}

}
0 голосов
/ 17 января 2012

Исключение, которое вы опубликовали, почти прямо из FAQ по POI :

Мой код использует некоторую новую функцию, прекрасно компилируется, но завершается неудачно, когда работает с "MethodNotFoundException"или "IncompatibleClassChangeError

У вас почти наверняка есть старая версия POI на вашем пути к классам. Довольно много времени выполнения и другие пакеты будут поставлять более старую версию 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);
...