openoffice excel word 轉換pdf 支持本地調用和遠程調用


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM