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)行
-
/**
-
* 將Office文檔轉(zhuǎn)換為PDF. 運(yùn)行該函數(shù)需要用到OpenOffice, OpenOffice下載地址為
-
* http://www./
-
*
-
* <pre>
-
* 方法示例:
-
* String sourcePath = "F:\\office\\source.doc";
-
* String destFile = "F:\\pdf\\dest.pdf";
-
* Converter.office2PDF(sourcePath, destFile);
-
* </pre>
-
*
-
* @param sourceFile
-
* 源文件, 絕對(duì)路徑. 可以是Office2003-2007全部格式的文檔, Office2010的沒(méi)測(cè)試. 包括.doc,
-
* .docx, .xls, .xlsx, .ppt, .pptx等. 示例: F:\\office\\source.doc
-
* @param destFile
-
* 目標(biāo)文件. 絕對(duì)路徑. 示例: F:\\pdf\\dest.pdf
-
* @return 操作成功與否的提示信息. 如果返回 -1, 表示找不到源文件, 或url.properties配置錯(cuò)誤; 如果返回 0,
-
* 則表示操作成功; 返回1, 則表示轉(zhuǎn)換失敗
-
*/
-
public static int office2PDF(String sourceFile, String destFile) {
-
try {
-
File inputFile = new File(sourceFile);
-
if (!inputFile.exists()) {
-
return -1;// 找不到源文件, 則返回-1
-
}
-
-
// 如果目標(biāo)路徑不存在, 則新建該路徑
-
File outputFile = new File(destFile);
-
if (!outputFile.getParentFile().exists()) {
-
outputFile.getParentFile().mkdirs();
-
}
-
-
String OpenOffice_HOME = "D:\\Program Files\\OpenOffice.org 3";//這里是OpenOffice的安裝目錄, 在我的項(xiàng)目中,為了便于拓展接口,沒(méi)有直接寫(xiě)成這個(gè)樣子,但是這樣是絕對(duì)沒(méi)問(wèn)題的
-
// 如果從文件中讀取的URL地址最后一個(gè)字符不是 '\',則添加'\'
-
if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '\\') {
-
OpenOffice_HOME += "\\";
-
}
-
// 啟動(dòng)OpenOffice的服務(wù)
-
String command = OpenOffice_HOME
-
+ "program\\soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
-
Process pro = Runtime.getRuntime().exec(command);
-
// connect to an OpenOffice.org instance running on port 8100
-
OpenOfficeConnection connection = new SocketOpenOfficeConnection(
-
"127.0.0.1", 8100);
-
connection.connect();
-
-
// convert
-
DocumentConverter converter = new OpenOfficeDocumentConverter(
-
connection);
-
converter.convert(inputFile, outputFile);
-
-
// close the connection
-
connection.disconnect();
-
// 關(guān)閉OpenOffice服務(wù)的進(jìn)程
-
pro.destroy();
-
-
return 0;
-
} catch (FileNotFoundException e) {
-
e.printStackTrace();
-
return -1;
-
} catch (ConnectException e) {
-
e.printStackTrace();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
-
return 1;
-
}
|