生活随笔
收集整理的這篇文章主要介紹了
java环境用openoffice转pdf
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目前版本:? JODConverter ? v2.2.1, OpenOffice v3.0.0? 使用需求: JDK1.4以上, 安裝OpenOffice v2.0.3以上? 基本簡介:? JODConverter ? 主要的功能是用來做各種檔案的轉(zhuǎn)換. 目前測試過, Word,Excel,PowerPoint轉(zhuǎn)PDF都是沒問題的.? 因?yàn)?/span>JODConverter ? 是透過OpenOffice來做轉(zhuǎn)換, 所以使用前需要先安裝OpenOffice, 並且將OpenOffice的Service啟動(dòng), 才可以使用.? 使用教學(xué):? Step1: 安裝OpenOffice? Step2: 啟動(dòng)OpenOffice Service? 1 cd C:\Program Files\OpenOffice.org 3\program? 2 soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard? Step3:將 JODConverter ? 的Jar檔放進(jìn)專案中的Library, 請(qǐng)檢查你的專案是否包含以下的Jar檔:? jodconverter ? -2.2.1.jar? jurt-2.3.0.jar? xstream-1.2.2.jar? ridl-2.3.0.jar? commons-io-1.3.1.jar? juh-2.3.0.jar? slf4j-api-1.4.3.jar? unoil-2.3.0.jar? slf4j-jdk14-1.4.3.jar? Step4: 準(zhǔn)備一個(gè)word檔放在c:/document.doc? Step5: 執(zhí)行以下程式? ?
import ?java.io.File;? ?import ?com.artofsolving.jodconverter?.DocumentConverter;? ?import ?com.artofsolving.jodconverter?.openoffice.connection.OpenOfficeConnection;? ?import ?com.artofsolving.jodconverter?.openoffice.connection.SocketOpenOfficeConnection;? ?import ?com.artofsolving.jodconverter?.openoffice.converter.OpenOfficeDocumentConverter;? ?? public ?class ?JodDemo?{? ?public ?static ?void ?main(String[]?args)?throws ?Exception{? ?File?inputFile?=?new ?File("c:/document.doc" );? ? File?outputFile?=?new ?File("c:/document.pdf" );? ? ? OpenOfficeConnection?connection?=?new ?SocketOpenOfficeConnection(8100 );? ? connection.connect();? ? ? DocumentConverter?converter?=?new ?OpenOfficeDocumentConverter(connection);? ? converter.convert(inputFile,?outputFile);? ? ? connection.disconnect();? ? }? ? }?? 程式說明:? 程式的部份相當(dāng)簡潔, 特別要注意的地方是第12行連線的port必須與你啟動(dòng)OpenOffice的Port相同,? 另外 JODConverter ? 預(yù)設(shè)是用副檔名作文件種類的判斷, 所以副檔名必須要正確才行.? 如果副檔名比較特別的話, 就必須在convert()的時(shí)候強(qiáng)制指定Document Type.? 心得:? JODConverter ? 使用起來相當(dāng)方便, 官網(wǎng)也提供War檔讓JODConverter ? 變成Web Service提供給不同的語言來呼叫.特別要注意的是, OpenOffice Service並不是ThreadSafe的, 多個(gè)Web AP在使用的時(shí)候必須要注意.? 參考資料:? http://www.artofsolving.com/opensource/ jodconverter ? 那我也來補(bǔ)充一些好了? 之前也在試這個(gè)檔案轉(zhuǎn)換的程式? 程式最好加上 try-catch? 因?yàn)橹鞍l(fā)現(xiàn)有些檔案 format 不能轉(zhuǎn),發(fā)生 Exception 後,connection 不會(huì)自動(dòng)切斷,程式會(huì) hand 住? 所以改成如下方式:? ?
public ?void ?convert(String?input,?String?output){? ?????????File?inputFile?=?new ?File(input);? ? ????????File?outputFile?=?new ?File(output);? ? ????????OpenOfficeConnection?connection?=?new ?SocketOpenOfficeConnection(8100 );? ? ????????try ?{? ? ????????????connection.connect();? ? ????????????DocumentConverter?converter?=?new ?OpenOfficeDocumentConverter(connection);? ? ????????????converter.convert(inputFile,?outputFile);? ? ????????}?catch (Exception?e)?{? ? ????????????e.printStackTrace();? ? ????????}?finally ?{? ? ????????????try {?if (connection?!=?null ){connection.disconnect();?connection?=?null ;}}catch (Exception?e){}? ? ????????}? ? ????}?? 再來,明明就是 open office 的檔案,卻生不能轉(zhuǎn)換的問題。例如:*.STW, *.SXD, *.ODF 等,後來才知道可以自行指定來源檔和輸出檔的 mime-type,程式如下:? ?
public ?void ?convertSTW(String?input,?String?output){? ?????????DocumentFormat?stw?=?new ?DocumentFormat("OpenOffice.org?1.0?Template" ,?DocumentFamily.TEXT,?"application/vnd.sun.xml.writer" ,?"stw" );? ? ????????DefaultDocumentFormatRegistry?formatReg?=?new ?DefaultDocumentFormatRegistry();? ? ????????DocumentFormat?pdf?=?formatReg.getFormatByFileExtension("pdf" );? ? ????????File?inputFile?=?new ?File(input);? ? ????????File?outputFile?=?new ?File(output);? ? ????????OpenOfficeConnection?connection?=?new ?SocketOpenOfficeConnection(8100 );? ? ????????try ?{? ? ????????????connection.connect();? ? ????????????DocumentConverter?converter?=?new ?OpenOfficeDocumentConverter(connection);? ? ????????????converter.convert(inputFile,?stw,?outputFile,?pdf);? ? ????????}?catch (Exception?e)?{? ? ????????????e.printStackTrace();? ? ????????}?finally ?{? ? ????????????try {?if (connection?!=?null ){connection.disconnect();?connection?=?null ;}}catch (Exception?e){}? ? ????????}? ? ????}?? 上面的程式是轉(zhuǎn)換 STW 到 PDF,如果是 SXD / ODF 則只需要變更 DocumentFormat 的內(nèi)容即可。? ?
DocumentFormat?sxd?=?new ?DocumentFormat("OpenOffice.org?1.0?Drawing" ,?DocumentFamily.DRAWING,?"application/vnd.sun.xml.sraw" ,?"sxd" );? ? ? DocumentFormat?odf?=?new ?DocumentFormat("OpenDocument?Math" ,?DocumentFamily.TEXT,?"application/vnd.oasis.opendocument.formula" ,?"odf" );? ? 所有 default support 的 DocumentFormat 都在 com.artofsolving. jodconverter ? .DefaultDocumentFormatRegistry 裡,但並非所有 open office 支援的 file format 都有,所以要像上面的方法自行去定義 DocumentFormat。? ?
轉(zhuǎn)載于:https://blog.51cto.com/3475174/1078971
總結(jié)
以上是生活随笔 為你收集整理的java环境用openoffice转pdf 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。