一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Java利用OpenOffice將word等office文檔轉(zhuǎn)換成PDF

 liuguichuan 2014-04-24

  OpenOffice.org 是一套跨平臺(tái)的辦公室軟件套件,能在 Windows、Linux、MacOS X (X11)、和 Solaris 等操作系統(tǒng)上執(zhí)行。它與各個(gè)主要的辦公室軟件套件兼容。OpenOffice.org 是自由軟件,任何人都可以免費(fèi)下載、使用、及推廣它。


OpenOffice org 的 API 以 UNO (UniversalNetwork Object) 寫(xiě)成,所以本身是電腦語(yǔ)言中立的?,F(xiàn)在來(lái)說(shuō),OpenOffice org主要是以 C++ 撰寫(xiě)的,但也能以 Java(TM) 來(lái)撰寫(xiě)。

1. 需要用的軟件

    OpenOffice 下載地址http://www./

    JodConverter 下載地址http:///projects/jodconverter/files/JODConverter/,也可以直接從附件里面下載

 

 

2.啟動(dòng)OpenOffice的服務(wù)

    我到網(wǎng)上查如何利用OpenOffice進(jìn)行轉(zhuǎn)碼的時(shí)候,都是需要先用cmd啟動(dòng)一個(gè)soffice服務(wù),啟動(dòng)的命令是:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;"。

    但是實(shí)際上,對(duì)于我的項(xiàng)目,進(jìn)行轉(zhuǎn)碼只是偶爾進(jìn)行,然而當(dāng)OpenOffice的轉(zhuǎn)碼服務(wù)啟動(dòng)以后,該進(jìn)程(進(jìn)程名稱是soffice.exe)會(huì)一直存在,并且大約占100M的內(nèi)存,感覺(jué)非常浪費(fèi)。于是我就想了一個(gè)辦法,可以將執(zhí)行該服務(wù)的命令直接在JAVA代碼里面調(diào)用,然后當(dāng)轉(zhuǎn)碼完成的時(shí)候,直接干掉這個(gè)進(jìn)程。在后面的JAVA代碼里面會(huì)有解釋。

    所以,實(shí)際上,這第2步可以直接跳過(guò)

 

 

3.將JodConverter相關(guān)的jar包添加到項(xiàng)目中

    將JodConverter解壓縮以后,把lib下面的jar包全部添加到項(xiàng)目中

 

 

4. 下面就是重點(diǎn)嘍,詳見(jiàn)Java代碼解析

 

附件里面有現(xiàn)成的可以用的項(xiàng)目示例,直接導(dǎo)入eclipse就可以運(yùn)行

 

Java代碼 
  1. /** 
  2.      * 將Office文檔轉(zhuǎn)換為PDF. 運(yùn)行該函數(shù)需要用到OpenOffice, OpenOffice下載地址為 
  3.      * http://www./ 
  4.      *  
  5.      * <pre> 
  6.      * 方法示例: 
  7.      * String sourcePath = "F:\\office\\source.doc"; 
  8.      * String destFile = "F:\\pdf\\dest.pdf"; 
  9.      * Converter.office2PDF(sourcePath, destFile); 
  10.      * </pre> 
  11.      *  
  12.      * @param sourceFile 
  13.      *            源文件, 絕對(duì)路徑. 可以是Office2003-2007全部格式的文檔, Office2010的沒(méi)測(cè)試. 包括.doc, 
  14.      *            .docx, .xls, .xlsx, .ppt, .pptx等. 示例: F:\\office\\source.doc 
  15.      * @param destFile 
  16.      *            目標(biāo)文件. 絕對(duì)路徑. 示例: F:\\pdf\\dest.pdf 
  17.      * @return 操作成功與否的提示信息. 如果返回 -1, 表示找不到源文件, 或url.properties配置錯(cuò)誤; 如果返回 0, 
  18.      *         則表示操作成功; 返回1, 則表示轉(zhuǎn)換失敗 
  19.      */  
  20.     public static int office2PDF(String sourceFile, String destFile) {  
  21.         try {  
  22.             File inputFile = new File(sourceFile);  
  23.             if (!inputFile.exists()) {  
  24.                 return -1;// 找不到源文件, 則返回-1  
  25.             }  
  26.   
  27.             // 如果目標(biāo)路徑不存在, 則新建該路徑  
  28.             File outputFile = new File(destFile);  
  29.             if (!outputFile.getParentFile().exists()) {  
  30.                 outputFile.getParentFile().mkdirs();  
  31.             }  
  32.   
  33.             String OpenOffice_HOME = "D:\\Program Files\\OpenOffice.org 3";//這里是OpenOffice的安裝目錄, 在我的項(xiàng)目中,為了便于拓展接口,沒(méi)有直接寫(xiě)成這個(gè)樣子,但是這樣是絕對(duì)沒(méi)問(wèn)題的  
  34.             // 如果從文件中讀取的URL地址最后一個(gè)字符不是 '\',則添加'\'  
  35.             if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '\\') {  
  36.                 OpenOffice_HOME += "\\";  
  37.             }  
  38.             // 啟動(dòng)OpenOffice的服務(wù)  
  39.             String command = OpenOffice_HOME  
  40.                     + "program\\soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";  
  41.             Process pro = Runtime.getRuntime().exec(command);  
  42.             // connect to an OpenOffice.org instance running on port 8100  
  43.             OpenOfficeConnection connection = new SocketOpenOfficeConnection(  
  44.                     "127.0.0.1", 8100);  
  45.             connection.connect();  
  46.   
  47.             // convert  
  48.             DocumentConverter converter = new OpenOfficeDocumentConverter(  
  49.                     connection);  
  50.             converter.convert(inputFile, outputFile);  
  51.   
  52.             // close the connection  
  53.             connection.disconnect();  
  54.             // 關(guān)閉OpenOffice服務(wù)的進(jìn)程  
  55.             pro.destroy();  
  56.   
  57.             return 0;  
  58.         } catch (FileNotFoundException e) {  
  59.             e.printStackTrace();  
  60.             return -1;  
  61.         } catch (ConnectException e) {  
  62.             e.printStackTrace();  
  63.         } catch (IOException e) {  
  64.             e.printStackTrace();  
  65.         }  
  66.   
  67.         return 1;  
  68.     }  

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产剧情欧美日韩中文在线| 日本本亚洲三级在线播放| 日本高清不卡一二三区| 国产亚洲视频香蕉一区| 少妇人妻中出中文字幕| 久久精视频免费视频观看| 高清不卡一卡二卡区在线| 国产三级黄片在线免费看| 亚洲第一视频少妇人妻系列 | 亚洲一区二区福利在线| 日韩欧美一区二区不卡看片| 亚洲综合色在线视频香蕉视频 | 久久国产成人精品国产成人亚洲| 年轻女房东2中文字幕| 国内精品美女福利av在线| 日本免费一级黄色录像| 欧美不卡高清一区二区三区| 国产精品涩涩成人一区二区三区| 嫩呦国产一区二区三区av| 日本高清视频在线播放| 国产麻豆视频一二三区| 久久精品久久久精品久久| 91久久精品在这里色伊人| 91欧美日韩精品在线| 久久国产精品熟女一区二区三区| 久久精品中文扫妇内射| 九九热精彩视频在线播放| 人妻偷人精品一区二区三区不卡| 欧美日韩一区二区三区色拉拉| 亚洲精品黄色片中文字幕| 亚洲男女性生活免费视频| 黄色污污在线免费观看| 久久黄片免费播放大全 | 日韩无套内射免费精品| 午夜精品福利视频观看| 男人和女人黄 色大片| 99久免费精品视频在线观| 久久综合九色综合欧美| 国产一区二区不卡在线播放| 儿媳妇的诱惑中文字幕| 久久热中文字幕在线视频|