7.4 使用Jacob來處理Word文檔

7.4  使用Jacob來處理Word文檔

Word或Excel程序是以一種COM組件形式存在的。如果能夠在Java中調用Word的COM組件,就能使用它的方法來獲取Word文檔中的文本信息。目前網上有許多提供這樣的工具。

7.4.1  Jacob的下載

Jacob 是Java-COM Bridge的縮寫,它在Java與微軟的COM組件之間構建一座橋樑。使用Jacob自帶的DLL動態鏈接庫,並通過JNI的方式實現了在Java平臺上對COM程序的調用。Jacob下載的地址爲:

http://sourceforge.net/project/showfiles.php? group_id=109543&package_id=118368。本書採用的是jacob_1.11_zip。解壓下載的 Jacob_1.11_zip文件後,如圖7-17所示。

圖7-17  Jacob包解壓後的內容

7.4.2  在Eclipse中配置

(1)將jacob.jar導入工程的Build Path,然後確認自己機器的CPU類型(X86或AMD64),並選擇不同目錄下的jacob.dll文件。

(2)將jacob.dll放到% JAVA_HOME%/jre/bin目錄下,其中,%JAVA_HOME%就是JDK的安裝目錄。注意這個的jre目錄必須是Eclipse當前正在使 用的目錄,在Eclipse中選擇“window->Preferences”菜單,在彈出的對話框中選擇“Java->Installed JREs”項,如圖7-18所示。

圖7-18  Eclipse中JRE設置的對話框

(3)當前選擇的JRE是“C:/Program Files/Java/jdk1.5.0_07/jre”目錄下的,所以需要把jacob.dll複製到“C:/Program Files/Java/jdk1.5.0_07/jre/bin”目錄下面。

(4)在工程中新建一個ch7.jacob包, 並在包中創建WordReader類。該類將提供一個靜態的extractDoc()方法。它接收兩個參數,一個是要處理的DOC文件名,另一個則是輸出 的文件名,然後通過JNI調用Word的API轉換內容,該函數的代碼如下。

代碼7.10

public static void extractDoc(String inputFIle, String outputFile) {

   boolean flag = false;

  

   // 打開Word應用程序

   ActiveXComponent app = new ActiveXComponent("Word.Application");

   try {

      // 設置word不可見

      app.setProperty("Visible", new Variant(false));

      // 打開word文件

      Dispatch doc1 = app.getProperty("Documents").toDispatch();

      Dispatch doc2 = Dispatch.invoke(

            doc1,

            "Open",

            Dispatch.Method,

            new Object[] { inputFIle, new Variant(false),

                  new Variant(true) }, new int[1]).toDispatch();

      // 作爲txt格式保存到臨時文件

      Dispatch.invoke(doc2, "SaveAs", Dispatch.Method, new Object[] {

            outputFile, new Variant(7) }, new int[1]);

      // 關閉word

      Variant f = new Variant(false);

      Dispatch.call(doc2, "Close", f);

      flag = true;

   } catch (Exception e) {

      e.printStackTrace();

   } finally {

      app.invoke("Quit", new Variant[] {});

   }

   if (flag == true) {

      System.out.println("Transformed Successfully");

   } else {

      System.out.println("Transform Failed");

   }

}

(5)創建一個main函數來測試WordReader類,該main函數代碼如下。

public static void main(String[] args) {

        WordReader.extractDoc("c:/test.doc","c:/jacob.txt");

}

(6)新生成的txt文件被保存到c:/jacob.txt下,如圖7-19所示。

圖7-19  使用Jacob處理的效果

在使用Jacob時,很重要的一點是,用戶本地系統中必須安裝有Word的應用程序。否則也就無法建立Java-COM橋,進而無法解析了。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章