簡體   English   中英

如何通過Apache POI API使用Java獲取幻燈片編號

[英]How to get the Slide number using java via Apache POI API

如何使用Java獲取.ppt文件中的幻燈片數量。 要訪問.ppt我們需要Apache POI API-尤其是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) 

你有沒有嘗試過

int getSlideCount()

它在文檔中。

最近,我想統計自己為考試准備的幻燈片數量。 該問題與您的問題非常相似,即使您的問題是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);

        }
    }


}

}

您發布的異常幾乎完全不是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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM