2012-01-17 22 views
1

javaを使用して.pptファイルのスライド数を取得するにはどうすればよいですか。 .pptにアクセスするには、Apache POI API、特にSlide[]クラスが必要です。Apache POI API経由でJavaを使用してスライド番号を取得する方法

私は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

エラーとは何ですか?それはどこに生成されますか?ログは.. –

+0

うん!!私はエラー – Thiyagu

+0

を投稿しているその提案をあなたに感謝その同じエラーを変更しないでください! – Thiyagu

答えて

0

をそのを試してみましたPOI FAQ

私のコードは、いくつかの新しい機能を使用しています罰金コンパイルするが、あなたはほぼ確実にあなたのクラスパス上のPOIの古いバージョンを持っているときライブ「MethodNotFoundException」または「でIncompatibleClassChangeError

と失敗します。かなりの数のランタイムと他のパッケージがPOIの古いバージョンを出荷するので、これはあなたの実現なしにヒットするのは簡単な問題です。

問題の以前のjarファイルを特定する最善の方法は、数行のjavaを使用することです。これらは、コアPOIクラスの1つをロードし、それがどこから来たかを報告します。

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

+0

あなたはベータ5を使用していると思うかもしれませんが、実際に古いバージョンのPOIもあることは間違いなく確かです。上のコードを試してみてください。実際に使っているものが表示されます! – Gagravarr

+0

いいえ、そのpoi-3.8-beta5を示します。出力は 'コアPOIはファイルから来ました:/ E:/research/RESEARCH/PPT1/poi/poi-3.8-beta5.jar!/org/apache/poi/poifs/filesystem/POIFSFileSystem.class ' – Thiyagu

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); 

     } 
    } 


} 

} 
関連する問題