java 使用openoffice 轉換文件,成.pdf,實現線上預覽效果
阿新 • • 發佈:2018-11-26
1. 下載 openoffice 地址
https://pan.baidu.com/s/1dfpoG6zlawoW1pqpDvBL0A 密碼: v4ej
如果上面的地址無法訪問請訪問這個地址:下載地址如下:http://www.openoffice.org/
2. jodconverter-2.2.2.zip 下載地址:
http://sourceforge.net/projects/jodconverter/files/JODConverter/
3. JODConverter 下的jar包訪問專案lib包中。
4. 使用openoffice的工具類
package com.rdkl.utils; import java.io.File; import org.apache.commons.io.FilenameUtils; import org.apache.log4j.Logger; import org.artofsolving.jodconverter.OfficeDocumentConverter; import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration; import org.artofsolving.jodconverter.office.ExternalOfficeManagerConfiguration; import org.artofsolving.jodconverter.office.OfficeException; import org.artofsolving.jodconverter.office.OfficeManager; import com.ddyun.imooc.common.SysConfigManager; public class PdfUtils { private static final Logger logger = Logger.getLogger(PdfUtils.class .getName()); @SuppressWarnings("static-access") private static String officeHome= "這裡寫的是你的openoffice的安裝地址";
@SuppressWarnings("static-access") private static int port = "這裡的內容是根據你的系統選擇不同的埠號,windows系統的埠號是8100"; private static OfficeManager officeManager; // 嘗試連線已存在的伺服器 private static boolean reconnect(){ try {
// 嘗試連線openoffice的已存在的伺服器 ExternalOfficeManagerConfiguration externalProcessOfficeManager = new ExternalOfficeManagerConfiguration(); externalProcessOfficeManager.setConnectOnStart(true); externalProcessOfficeManager.setPortNumber(8100); officeManager = externalProcessOfficeManager.buildOfficeManager(); officeManager.start(); return true; } catch (OfficeException e) { e.printStackTrace(); return false; } }// 開啟新的openoffice的程序 private static void start() { logger.debug("啟動OpenOffice服務"); try { DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration(); configuration.setOfficeHome(officeHome);// 安裝地址 configuration.setPortNumbers(port);// 埠號 configuration.setTaskExecutionTimeout(1000 * 60 * 5);// 設定任務執行超時為5分鐘 configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24);// 設定任務佇列超時為24小時 officeManager = configuration.buildOfficeManager(); officeManager.start(); // 啟動服務 } catch (Exception e) { logger.error("啟動OpenOffice服務出錯" + e); } } // 使用完需要關閉該程序 private static void stop() { logger.debug("關閉OpenOffice服務"); try { if (officeManager != null) officeManager.stop(); } catch (Exception e) { logger.error("關閉OpenOffice服務出錯" + e); } } public static File convertToPdf(String input) { File inputFile = null; File outFile = null; try {
// 如果已存在的服務不能連線或者不存在服務,那麼開啟新的服務 if(!reconnect()){ start();// 開啟服務 }
// filenameUtils是Apache對java io的封裝。 FilenameUtils.separatorsToSystem:轉換分隔符為當前系統分隔符 / FilenameUtils.getFullPath:獲取檔案的完整目錄
// FilenameUtils.getBaseName:取出檔案目錄和字尾名的檔名 String output = FilenameUtils.separatorsToSystem(FilenameUtils.getFullPath(input) + FilenameUtils.getBaseName(input) + ".pdf"); inputFile = new File(input); outFile = new File(output); logger.info("開始轉換文件:" + input + "=>" + output); OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager); converter.convert(inputFile,outFile); // 轉換文件 } catch (Exception e) { logger.error("轉換文件出錯" + e); outFile = null; }finally{ logger.info("結束轉換文件"); stop(); } return outFile; }
// 測試工具類是否成功 public static void main(String[] args) { //PdfUtils.convertToPdf("E:/test.ppt"); File sf = new File("E:/test.ppt"); System.out.println(sf.getPath()); } }