1. 程式人生 > >java 使用openoffice 轉換文件,成.pdf,實現線上預覽效果

java 使用openoffice 轉換文件,成.pdf,實現線上預覽效果

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()); } }