openoffice實現office文件轉換爲pdf實現文件預覽



在工作中用到這功能,找了好多方法,都出現不同的問題,故整合下,隨意看看。

轉載:點擊打開鏈接

拿出一個例子。。

1.下載安裝openoffice:點擊打開鏈接

2.openoffice啓動服務兩種:

1.在安裝目錄下的program文件夾中:D:\installs\OpenOffice 4\program按住shift並右擊,打開命令窗口:

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard  

缺點就是長期打開服務,佔用資源

2.java代碼中調用,調用結束服務就關閉(我採用的就是這種方式)

詳見代碼

3.jar包:Jodconverter 2.2.2 我放在了百度雲盤上了:http://pan.baidu.com/s/1o8eTV3G

其中Jodconverter 2.2.2,在maven庫上只有2.2.1,到不支持docx等07版文件格式,所以要自己導入2.2.2;其他都能在maven公共庫上依賴到

代碼如下:



import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.StreamOpenOfficeDocumentConverter;
import com.beyondsoft.hz.bysworkprd.common.util.ErrorCodeConstants;

/**
 * 
 * @author Administrator
 * @version $Id: FileConverter.java, v 0.1 2016年4月14日 上午10:52:54 Administrator Exp $
 */
public class FileConverter {

    private static final String FILEURL = "E:/workspace/bkprd_20160315/bprd/webapp/src/main/webapp";

    private String fileString;     //需要預覽的目標文件地址
    private String outputPath = "";// 輸入路徑,如果不設置就輸出在默認位置  
    private String fileName;
    private File   pdfFile;
    private File   docFile;

    static String loadStream(InputStream in) throws IOException {
        int ptr = 0;
        //把InputStream字節流 替換爲BufferedReader字符流 2013-07-17修改  
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        StringBuilder buffer = new StringBuilder();
        while ((ptr = reader.read()) != -1) {
            buffer.append((char) ptr);
        }
        return buffer.toString();
    }

    public FileConverter(String fileString) {
        ini(fileString);
    }

    /*初始化
    @param fileString 
    */
    private void ini(String fileurl) {
        //拼接文件地址
        this.fileString = FileConverter.FILEURL + fileurl;
        //截取文件名(去掉點以後的文件後綴)
        fileName = fileString.substring(0, fileString.lastIndexOf("."));
        //        System.out.println("截取文件名[fileName]:" + fileName);
        docFile = new File(fileString);
        pdfFile = new File(fileName + ".pdf");
    }

    /*轉換主方法
     * true:轉換完成
     * false:
     */
    public String conver() {
        if (fileString.endsWith(".pdf")) {
            return ErrorCodeConstants.PDF_EXIST;
        }
        String rsult = file2pdf();
        return rsult;
    }

    /*轉爲PDF
    
    @param file 
    */
    private String file2pdf() {
        /**
          * 檢測目標文件是否存在
          * exists:true:存在   false:不存在
          */
        if (!docFile.exists()) {
            //            System.out.println("****doc2pdf()-swf轉換器異常,需要轉換的文檔不存在,無法轉換****");
            return ErrorCodeConstants.NO_AIM_FILE;
        }
        /**
         *  pdf文檔已存在
         */
        if (pdfFile.exists()) {
            return ErrorCodeConstants.PDF_EXIST;
        }
        /**********************自動啓動服務************************/
        try {
            //OpenOffice的安裝目錄
            String OpenOffice_HOME = "D:\\installs\\OpenOffice 4";
            // 如果從文件中讀取的URL地址最後一個字符不是 '\',則添加'\'
            if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '\\') {
                OpenOffice_HOME += "\\";
            }
            // 啓動OpenOffice的服務
            String command = OpenOffice_HOME
                             + "program\\soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
            //            System.out.println("-------服務開始啓動-----------");
            Process pro = Runtime.getRuntime().exec(command);
            OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);
            connection.connect();
            DocumentConverter converter = new StreamOpenOfficeDocumentConverter(connection);
            //            System.out.println("-------服務已啓動-----------");
            converter.convert(docFile, pdfFile);
            // close the connection
            connection.disconnect();
            // 關閉OpenOffice服務的進程  
            pro.destroy();
            //            System.out.println("-------服務已停止-----------");
            //                    System.out.println("****doc2pdf()-pdf轉換成功,PDF輸出:" + pdfFile.getPath() + "****");
        } catch (java.net.ConnectException e) {
            return ErrorCodeConstants.SERVER_ERROR;
            //                    System.out.println("****doc2pdf()-swf轉換異常,openoffice服務未啓動!****");
        } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
            return ErrorCodeConstants.LOAD_FILE_FAIL;
            //                    System.out.println("****doc2pdf()-swf轉換器異常,讀取轉換文件失敗****");
        } catch (Exception e) {
            return ErrorCodeConstants.UNKNOWN_ERROR;
        }
        return ErrorCodeConstants.SUCCESS;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章