2014-01-31 75 views
0

任何人都可以告訴我如何使用iText庫以編程方式從電子書(PDF)中提取目錄,章節和索引的內容?使用iText庫提取目錄,章節和索引的內容

+1

你或許應該增加更多的細節,比如你嘗試過什麼,到目前爲止,它爲什麼不工作等。這將鼓勵其他用戶來幫助你。 – nKn

+1

此外,有問題的電子書是否包含TOC等也作爲結構化數據或僅作爲可查看內容? – mkl

+0

問題是http://article.gmane.org/gmane.comp.java.lib.itext.general/66086的雙重職位請注意,通常不讚賞重複發佈問題。人們在不同的論壇上看到同一個問題的人可能不願意回答。 –

回答

0

我已經通過解析書籤來實現這一點。下面是我寫的代碼,用iText解析PDF中的書籤。

public void ParseBookMarkToLevel(List<HashMap<String,Object>> listBookmarks,Integer intLevel) 
{ 

    //if intLevel == 999 Parse the full bookmarks recursively to all levels 
    //System.out.println("Bookmarks Count: "+listBookmarks.size()); 
    if(intLevel != 999) 
     intLevel--; 
    else 
     intLevel=999; 

    //System.out.println("Bookmarks Count: "+listBookmarks.size()); 
    String title =""; 
    String pageStr =""; 
    String[] pageStrArr; 
    Integer pageNumber; 

    try{ 
     for (HashMap<String,Object> bookmark: listBookmarks) { 

      //System.out.println("Page Type: "+bookmark.get("Page").getClass()); 

      title = (bookmark.containsKey("Title")?bookmark.get("Title").toString() :""); 

      if(bookmark.containsKey("Page")){ 
       pageStr = bookmark.get("Page").toString(); 
       pageStrArr = pageStr.split(" ");   
       pageNumber = Integer.valueOf(pageStrArr[0]); 
       //System.out.println(""+title+"\t :"+pageNumber); 
       this.lhmBookMarks.put(title, pageNumber); 
       System.out.println(this.lhmBookMarks.toString()); 
      } 
      else{ 
       //System.out.println(title); 
       this.lhmBookMarks.put(title, 0); 
      }   
      if(bookmark.containsKey("Kids") && intLevel != 0){ 
       this.ParseBookMarkToLevel((List<HashMap<String, Object>>) bookmark.get("Kids"),intLevel); 
      } 
     } 
    } 
    catch(Exception i){ 
     System.out.println(i); 
    } 
}