OpenOffice.org 是一套跨平台的辦公室軟件套件,能在Windows、Linux、MacOS X (X11)和 Solaris 等操作系統上執行。它與各個主要的辦公室軟件套件兼容。OpenOffice.org 是自由軟件,任何人都可以免費下載、使用及推廣它。
目前我已經測試過excel轉換pdf已測試成功,word暫時沒去測試,理論上是可以轉換。因為原理都是調用openoffice的轉換pdf功能。
openoffice會自動判斷源文件類型和目標文件類型。
工具類支持本地轉換和遠程調用轉換。!!! 建議使用本地轉換,本地轉換比遠程調用性能更高,遠程調用網絡延遲100ms以上,主要消耗在(網絡延遲、文件傳遞速度)
並且支持本地文件轉換和內存文件(文件已在內存中)兩種轉換方式
使用時,需要在被調用的機器上安裝openoffice,java中導入openoffice相關jar包 jodconverter-2.2.1.jar 即可
代碼如下
1 package com.cigna.hmc.groupinsurance.utils.excel; 2 3 import java.io.File; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.net.ConnectException; 7 8 import org.apache.commons.lang.StringUtils; 9 10 import com.artofsolving.jodconverter.DefaultDocumentFormatRegistry; 11 import com.artofsolving.jodconverter.DocumentConverter; 12 import com.artofsolving.jodconverter.DocumentFormatRegistry; 13 import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection; 14 import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection; 15 import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter; 16 import com.artofsolving.jodconverter.openoffice.converter.StreamOpenOfficeDocumentConverter; 17 18 /** 19 * 20 * @author josnow 21 * @date 2017年5月9日 下午12:38:39 22 * @version 1.0.0 23 * @desc openoffice轉換工具 24 */ 25 public class OpenOfficeUtils { 26 27 public static final String LOCAL_HOST = "localhost"; 28 public static final int LOCAL_PORT = 8100; 29 30 // Format 31 public static DocumentFormatRegistry formatFactory = new DefaultDocumentFormatRegistry(); 32 33 /** 34 * 35 * @desc 36 * @auth josnow 37 * @date 2017年6月9日 下午4:11:04 38 * @param inputFilePath 39 * 待轉換的文件路徑 40 * @param outputFilePath 41 * 輸出文件路徑 42 */ 43 public static void convert(String inputFilePath, String outputFilePath) throws ConnectException { 44 convert(inputFilePath, outputFilePath, LOCAL_HOST, LOCAL_PORT); 45 } 46 47 /** 48 * 49 * @desc 50 * @auth josnow 51 * @date 2017年6月9日 下午4:12:29 52 * @param inputFilePath 53 * 待轉換的文件路徑 54 * @param outputFilePath 55 * 輸出文件路徑 56 * @param connectIp 57 * 遠程調用ip 58 * @param connectPort 59 * 遠程調用端口 60 */ 61 public static void convert(String inputFilePath, String outputFilePath, String connectIp, int connectPort) 62 throws ConnectException { 63 if (StringUtils.isEmpty(inputFilePath) || StringUtils.isEmpty(outputFilePath) 64 || StringUtils.isEmpty(connectIp)) { 65 throw new IllegalArgumentException("參數異常!!"); 66 } 67 OpenOfficeConnection connection = new SocketOpenOfficeConnection(connectIp, connectPort); 68 connection.connect(); 69 70 DocumentConverter converter = getConverter(connectIp, connection); 71 72 converter.convert(new File(inputFilePath), new File(outputFilePath)); 73 connection.disconnect(); 74 } 75 76 /** 77 * 78 * @desc 79 * @auth josnow 80 * @date 2017年6月9日 下午4:08:26 81 * @param inputStream 82 * @param inputFileExtension 83 * 待轉換文件的擴展名,例如: xls,doc 84 * @param outputStream 85 * @param outputFileExtension 86 * 輸出文件擴展名,例如:pdf 87 */ 88 public static void convert(InputStream inputStream, String inputFileExtension, OutputStream outputStream, 89 String outputFileExtension) throws ConnectException { 90 convert(inputStream, inputFileExtension, outputStream, outputFileExtension, LOCAL_HOST, LOCAL_PORT); 91 } 92 93 /** 94 * 95 * @desc 96 * @auth josnow 97 * @date 2017年6月9日 下午4:10:21 98 * @param inputStream 99 * @param inputFileExtension 100 * 待轉換文件的擴展名,例如: xls,doc 101 * @param outputStream 102 * @param outputFileExtension 103 * 輸出文件擴展名,例如:pdf 104 * @param connectIp 105 * 遠程調用ip 106 * @param connectPort 107 * 遠程調用端口 108 */ 109 public static void convert(InputStream inputStream, String inputFileExtension, OutputStream outputStream, 110 String outputFileExtension, String connectIp, int connectPort) throws ConnectException { 111 112 if (inputStream == null || StringUtils.isEmpty(inputFileExtension) || outputStream == null 113 || StringUtils.isEmpty(outputFileExtension) || StringUtils.isEmpty(connectIp)) { 114 throw new IllegalArgumentException("參數異常!!"); 115 } 116 117 OpenOfficeConnection connection = new SocketOpenOfficeConnection(connectIp, connectPort); 118 connection.connect(); 119 DocumentConverter converter = getConverter(connectIp, connection); 120 121 converter.convert(inputStream, formatFactory.getFormatByFileExtension(inputFileExtension), outputStream, 122 formatFactory.getFormatByFileExtension(outputFileExtension)); 123 connection.disconnect(); 124 } 125 126 private static DocumentConverter getConverter(String connectIp, OpenOfficeConnection connection) { 127 DocumentConverter converter = "localhost".equals(connectIp) || "127.0.0.1".equals(connectIp) 128 || "0:0:0:0:0:0:0:1".equals(connectIp) ? new OpenOfficeDocumentConverter(connection) 129 : new StreamOpenOfficeDocumentConverter(connection); 130 return converter; 131 } 132 133 }
轉載請標明來源:http://www.cnblogs.com/wulm/p/6962199.html
