總體來說,雖然OOo并沒有提供優(yōu)雅的API,但是它的主要“套路”還是比較容易摸索出來的:加載文檔,使用UnoRuntime.queryInterface方法獲取各種操作接口,而各種參數(shù)都通過PropertyValue數(shù)組來提供。如果您像我一樣感覺不爽,重新作一層簡單的封裝也是十分容易的。
運(yùn)行中的問題
到目前為止,我們只是重新整理了示例代碼,還沒有開始運(yùn)行。當(dāng)?shù)谝淮芜\(yùn)行的時(shí)候便發(fā)現(xiàn)有異常拋出:
com.sun.star.comp.helper.BootstrapException: no office executable found! at com.sun.star.comp.helper.Bootstrap.bootstrap(Bootstrap.java:246) at jeffz.practices.AnyToDoc.createContext(AnyToDoc.java:19) at jeffz.practices.AnyToDoc.main(AnyToDoc.java:87)
不過有異常信息之后,查找解決方案一般也很容易(但就我個(gè)人經(jīng)驗(yàn)來說,還是有很多朋友會問“拋出XX異常該怎么辦”之類的問題)。經(jīng)過搜索,發(fā)現(xiàn)遇到這個(gè)問題的人還不少,他們把juh.jar等文件復(fù)制到OOo安裝目錄外(這在生產(chǎn)環(huán)境中幾乎是必然的)之后便會產(chǎn)生這個(gè)異常,但如果直接引用OOo安裝目錄內(nèi)的jar便不會有問題了——但是我目前是直接引用OOo安裝目錄的jar包,不是嗎?但我轉(zhuǎn)念一想,我當(dāng)時(shí)為編譯通過而掙扎的原因,不就是“juh.jar”等文件不在它本該在的位置嗎?既然這個(gè)問題和jar包與OOo程序的相對路徑有關(guān),那么如果我把jar包放回“原來”的位置,這個(gè)問題可能就不存在了。
不過這些只是推測,我沒有去進(jìn)行嘗試。因?yàn)榧热辉谏a(chǎn)環(huán)境中還是會破壞路徑問題,那我還是找一下這個(gè)問題的解決方案吧。最終在OOo的論壇上找到了答案:有人提供了一個(gè)補(bǔ)充包bootstrapconnector.jar,其中提供了一個(gè)方法可以讓我們指定OOo的程序目錄。也就是說,我們需要把之前的createContext改寫成:
private static XComponentContext createContext() throws Exception { // get the remote office component context // return Bootstrap.bootstrap(); String oooExeFolder = "C:/Program Files/OpenOffice.org 3/program/"; return BootstrapSocketConnector.bootstrap(oooExeFolder); }
當(dāng)然,生產(chǎn)環(huán)境中您一般不會使用硬編碼的方式制定路徑,您可以把它放在配置文件或是系統(tǒng)變量里。再次運(yùn)行即告成功。這段代碼會將一個(gè)txt文件轉(zhuǎn)化成舊有的Word格式,事實(shí)上您可以將txt替換成OOo所支持的任何一種格式,比如rtf,docs,odt等等。
那么接下來的問題便是,如何將目標(biāo)格式改為PDF文件?很顯然,目標(biāo)格式是Word文件,是因?yàn)槲覀儗㈩愋妥址付椤皊writer: MS Word 97”,那么PDF格式是多少?這靠猜測是沒法得出結(jié)果的,最后還是從一篇文檔中得到了答案:writer_pdf_Export。事實(shí)上,這么做還是不夠,代碼還是會在storeAsURL方法中拋出異常,而且這是一個(gè)泛泛的ErrorCodeIOException,沒有具體信息(message為空)。又一陣好找,才發(fā)現(xiàn)storeAsURL對應(yīng)著OOo的“Save as”功能,而如果是“Export”功能,則應(yīng)該調(diào)用storeToURL方法。
最后,我們終于成功地將其他格式轉(zhuǎn)化為PDF文件了。
出處:老趙點(diǎn)滴
責(zé)任編輯:bluehearts
上一頁 使用OpenOffice.org將各類文檔轉(zhuǎn)為PDF [2] 下一頁 使用OpenOffice.org將各類文檔轉(zhuǎn)為PDF [4]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|