日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java环境用openoffice转pdf

發布時間:2025/3/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java环境用openoffice转pdf 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目前版本:?JODConverter?v2.2.1, OpenOffice v3.0.0?
使用需求: JDK1.4以上, 安裝OpenOffice v2.0.3以上?
基本簡介:?
JODConverter?主要的功能是用來做各種檔案的轉換. 目前測試過, Word,Excel,PowerPoint轉PDF都是沒問題的.?
因為JODConverter?是透過OpenOffice來做轉換, 所以使用前需要先安裝OpenOffice, 並且將OpenOffice的Service啟動, 才可以使用.?
使用教學:?
Step1: 安裝OpenOffice?
Step2: 啟動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檔放進專案中的Library, 請檢查你的專案是否包含以下的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: 準備一個word檔放在c:/document.doc?
Step5: 執行以下程式?

?

  • 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");? ?
  • //?connect?to?an?OpenOffice.org?instance?running?on?port?8100? ?
  • OpenOfficeConnection?connection?=?new?SocketOpenOfficeConnection(8100);? ?
  • connection.connect();? ?
  • //?convert? ?
  • DocumentConverter?converter?=?new?OpenOfficeDocumentConverter(connection);? ?
  • converter.convert(inputFile,?outputFile);? ?
  • //?close?the?connection? ?
  • connection.disconnect();? ?
  • }? ?
  • }??

  • 程式說明:?
    程式的部份相當簡潔, 特別要注意的地方是第12行連線的port必須與你啟動OpenOffice的Port相同,?
    另外JODConverter?預設是用副檔名作文件種類的判斷, 所以副檔名必須要正確才行.?
    如果副檔名比較特別的話, 就必須在convert()的時候強制指定Document Type.?

    心得:?
    JODConverter?使用起來相當方便, 官網也提供War檔讓JODConverter?變成Web Service提供給不同的語言來呼叫.
    特別要注意的是, OpenOffice Service並不是ThreadSafe的, 多個Web AP在使用的時候必須要注意.?

    參考資料:?
    http://www.artofsolving.com/opensource/jodconverter?

    那我也來補充一些好了?
    之前也在試這個檔案轉換的程式?
    程式最好加上 try-catch?
    因為之前發現有些檔案 format 不能轉,發生 Exception 後,connection 不會自動切斷,程式會 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 的檔案,卻生不能轉換的問題。例如:*.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){}? ?
  • ????????}? ?
  • ????}??





  • 上面的程式是轉換 STW 到 PDF,如果是 SXD / ODF 則只需要變更 DocumentFormat 的內容即可。?
    ?

  • 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。?

    ?

    轉載于:https://blog.51cto.com/3475174/1078971

    總結

    以上是生活随笔為你收集整理的java环境用openoffice转pdf的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。