本部落格 jacob 列文章導讀
Java操作Microsoft Word之jacob
jacob使用入門及問題解析
使用Jacob將Word轉為Html或txt
使用Jacob將Word轉為PDF
java通過jacob調用word (根據Word模板產生動態內容)
首先,大家先要瞭解一下jacob ,官方的解釋是Java COM Bridge,即java和com組件間的橋樑(進一步瞭解com/dcom: http://docs.huihoo.com/com/)
com一般表現為dll或exe等二進位檔案,像我們呆會會用到的jacob.dll檔案,這裡說說為什麼我們用java去操縱office(如:word)要使用com,而不直接使用java去做?
首先,我們清楚office是建立在windows平台之上的,本身是一個軟體,除了他自己提供的宏似乎沒有什麼能對他進行直接的操作;在windows平台上為瞭解決像這樣的不同應用軟體,通訊缺乏通用api問題,推出了com的解決方案;
其次,我們使用dll中的一組或多組相關的函數存取組件資料,總的合稱為介面具體到每個細節的實現稱為方法;如果我們要調用介面裡的方法,唯一的途徑就是調用指向介面的指標;
所以總的來說使用就是dll完成api的轉換;
不懂沒關係,會用就好,用久自然懂了, 好了com講完,我們開始我們的主要內容吧!
大家先到這裡下載jacob.jar
裡面的jacob.jar是我們要用的包
jacob.dll就是我前面說的com組件
把包裡的jacob.dll放到c:/windows/system32下
講解麻煩,畫個圖大家看 好
值得注意的是,不同的版本的系統使用不同的dll檔案
所以如果你編譯成功,但運行失敗一般是dll檔案問題
遇到這種情況,可以到
http://downloads.sourceforge.net/jacob-project/jacob_1.9.zip?modtime=1109437002&big_mirror=0
下載其他的版本的 dll 檔案。
先給大家個word的測試代碼(經過更改該代碼在我的機器上運行正常)
import com.jacob.activeX.ActiveXComponent;<br />import com.jacob.com.ComException;<br />import com.jacob.com.Dispatch;<br />import com.jacob.com.Variant;</p><p>public class WordDocumentProperties {<br />/** 聲明一個word對象*/<br />private ActiveXComponent objWord;</p><p>/** 聲明四個word組件*/<br />private Dispatch custDocprops;</p><p>private Dispatch builtInDocProps;</p><p>private Dispatch document;</p><p>private Dispatch wordObject;</p><p>public WordDocumentProperties() {<br />}</p><p>/**<br /> * 開啟word文擋<br /> */<br />public void open(String filename) {<br />// 建立一個word對象<br />objWord = new ActiveXComponent(" Word.Application ");<br />// 為wordobject組件附值<br />wordObject = (Dispatch) (objWord.getObject()); // 改了這裡<br />// 產生一個唯讀方式的word文擋組件<br />Dispatch.put(wordObject, " Visible ", new Variant(false));<br />// 擷取文擋屬性<br />Dispatch documents = objWord.getProperty(" Documents ").toDispatch();<br />// 開啟啟用文擋<br />document = Dispatch.call(documents, " Open ", filename).toDispatch();<br />}</p><p>public void selectCustomDocumentProperitiesMode() {<br />custDocprops = Dispatch.get(document, " CustomDocumentProperties ").toDispatch();<br />}</p><p>public void selectBuiltinPropertiesMode() {<br />builtInDocProps = Dispatch.get(document, " BuiltInDocumentProperties ").toDispatch();<br />}</p><p>/**<br /> * 關閉文擋<br /> */<br />public void close() {<br />Dispatch.call(document, " Close ");<br />}</p><p>public String getCustomProperty(String cusPropName) {<br />try {<br />cusPropName = Dispatch.call((Dispatch) custDocprops, " Item ", cusPropName).toString();<br />} catch (ComException e) {<br />cusPropName = null;<br />}<br />return cusPropName;<br />}</p><p>public String getBuiltInProperty(String builtInPropName) {<br />try {<br />builtInPropName = Dispatch.call((Dispatch) builtInDocProps, " Item ", builtInPropName).toString();<br />} catch (ComException e) {<br />builtInPropName = null;<br />}<br />return builtInPropName;<br />}</p><p>public static void main(String[] args) {<br />try {<br />WordDocumentProperties jacTest = new WordDocumentProperties();<br />jacTest.open(" s.doc ");<br />jacTest.selectCustomDocumentProperitiesMode();<br />jacTest.selectBuiltinPropertiesMode();<br />String custValue = jacTest.getCustomProperty(" Information Source ");<br />String builtInValue = jacTest.getBuiltInProperty(" Author ");<br />jacTest.close();<br />System.out.println(" Document Val One: " + custValue);<br />System.out.println(" Document Author: " + builtInValue);<br />} catch (Exception e) {<br />System.out.println(e);<br />}<br />}<br />}
博文來源:http://www.blogjava.net/lusm/archive/2007/03/27/106737.html