java實現類似百度文庫功能

jopen 12年前發布 | 102K 次閱讀 文檔管理 Java

公司需要開發一個類似百度文庫功能的管理站,在網上找了好久,主要有兩種實現方法,我在這里根據網上一篇文章,總結了一下具體的實現。

首先下載必要的文件。

1、SWF顯示組件 flexpaper  下載地址 http://flexpaper.devaldi.com/

2、DOC文件轉換為PDF文件 openoffice3.2

3、PDF文件轉換SWF文件  pdf2swf.exe

4、實現在java類中操作openoffice3.2 的類包  jodconverter-2.2.2


flexpaper可以去上面的官網地址下載,但直接下載的組件會有廣告和一些不需要用到的功能,所以最好是自己下載Flex源碼進行修改

接下來要通過java類來實現文件類型的轉換,在網上直接找到該類的代碼。

package com;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;

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.OpenOfficeDocumentConverter;

/**
 * doc docx格式轉換
 * 
 * @author Administrator
 * 
 */
public class DocConverter {
    private static final int environment = 1;// 環境 1:windows 2:linux
                                                // (只涉及pdf2swf路徑問題)
    private String fileString;
    private String outputPath = "";// 輸入路徑 ,如果不設置就輸出在默認的位置
    private String fileName;
    private File pdfFile;
    private File swfFile;
    private File docFile;

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

    /**
     * 重新設置file
     * 
     * @param fileString
     */
    public void setFile(String fileString) {
        ini(fileString);
    }

    /**
     * 初始化
     * 
     * @param fileString
     */
    private void ini(String fileString) {
        this.fileString = fileString;
        fileName = fileString.substring(0, fileString.lastIndexOf("."));
        docFile = new File(fileString);
        pdfFile = new File(fileName + ".pdf");
        swfFile = new File(fileName + ".swf");
    }

    /**
     * 轉為PDF
     * 
     * @param file
     */
    private void doc2pdf() throws Exception {
        if (docFile.exists()) {
            if (!pdfFile.exists()) {
                OpenOfficeConnection connection = new SocketOpenOfficeConnection(
                        8100);
                try {
                    connection.connect();
                    DocumentConverter converter = new OpenOfficeDocumentConverter(
                            connection);
                    converter.convert(docFile, pdfFile);
                    // close the connection
                    connection.disconnect();
                    System.out.println("****pdf轉換成功,PDF輸出:" + pdfFile.getPath()
                            + "****");
                } catch (java.net.ConnectException e) {
                    e.printStackTrace();
                    System.out.println("****swf轉換器異常,openoffice服務未啟動!****");
                    throw e;
                } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
                    e.printStackTrace();
                    System.out.println("****swf轉換器異常,讀取轉換文件失敗****");
                    throw e;
                } catch (Exception e) {
                    e.printStackTrace();
                    throw e;
                }
            } else {
                System.out.println("****已經轉換為pdf,不需要再進行轉化****");
            }
        } else {
            System.out.println("****swf轉換器異常,需要轉換的文檔不存在,無法轉換****");
        }
    }

    /**
     * 轉換成 swf
     */
    private void pdf2swf() throws Exception {
        Runtime r = Runtime.getRuntime();
        if (!swfFile.exists()) {
            if (pdfFile.exists()) {
                if (environment == 1) {// windows環境處理
                    try {
                        Process p = r.exec("D:/pdf2swf.exe "+ pdfFile.getPath() + " -o "+ swfFile.getPath() + " -T 9");
                        System.out.print(loadStream(p.getInputStream()));
                        System.err.print(loadStream(p.getErrorStream()));
                        System.out.print(loadStream(p.getInputStream()));
                        System.err.println("****swf轉換成功,文件輸出:"
                                + swfFile.getPath() + "****");
                        if (pdfFile.exists()) {
                            pdfFile.delete();
                        }

                    } catch (IOException e) {
                        e.printStackTrace();
                        throw e;
                    }
                } else if (environment == 2) {// linux環境處理
                    try {
                        Process p = r.exec("pdf2swf " + pdfFile.getPath()
                                + " -o " + swfFile.getPath() + " -T 9");
                        System.out.print(loadStream(p.getInputStream()));
                        System.err.print(loadStream(p.getErrorStream()));
                        System.err.println("****swf轉換成功,文件輸出:"
                                + swfFile.getPath() + "****");
                        if (pdfFile.exists()) {
                            pdfFile.delete();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        throw e;
                    }
                }
            } else {
                System.out.println("****pdf不存在,無法轉換****");
            }
        } else {
            System.out.println("****swf已經存在不需要轉換****");
        }
    }

    static String loadStream(InputStream in) throws IOException {

        int ptr = 0;
        in = new BufferedInputStream(in);
        StringBuffer buffer = new StringBuffer();

        while ((ptr = in.read()) != -1) {
            buffer.append((char) ptr);
        }

        return buffer.toString();
    }

    /**
     * 轉換主方法
     */
    public boolean conver() {

        if (swfFile.exists()) {
            System.out.println("****swf轉換器開始工作,該文件已經轉換為swf****");
            return true;
        }

        if (environment == 1) {
            System.out.println("****swf轉換器開始工作,當前設置運行環境windows****");
        } else {
            System.out.println("****swf轉換器開始工作,當前設置運行環境linux****");
        }
        try {
            doc2pdf();
            pdf2swf();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

        if (swfFile.exists()) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 返回文件路徑
     * 
     * @param s
     */
    public String getswfPath() {
        if (swfFile.exists()) {
            String tempString = swfFile.getPath();
            tempString = tempString.replaceAll("\\\\", "/");
            return tempString;
        } else {
            return "";
        }

    }

    /**
     * 設置輸出路徑
     */
    public void setOutputPath(String outputPath) {
        this.outputPath = outputPath;
        if (!outputPath.equals("")) {
            String realName = fileName.substring(fileName.lastIndexOf("/"),
                    fileName.lastIndexOf("."));
            if (outputPath.charAt(outputPath.length()) == '/') {
                swfFile = new File(outputPath + realName + ".swf");
            } else {
                swfFile = new File(outputPath + realName + ".swf");
            }
        }
    }

    public static void main(String s[]) {
        DocConverter d = new DocConverter("D:/1.doc");
        d.conver();
    }
}
貼入上面代碼前

第一步:先確認OpenOffice是否已經安裝,因為在代碼中要引入到文件安裝的路徑

第二步:確認你的項目中引入了jodconverter-2.2.2的jar包

第三步:在DOS中啟動OpenOffice的服務

找到OpenOffice的安裝路徑并執行下面代碼

C:\Program Files\OpenOffice.org 3\program  soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" –nofirststartwizard

注:我在執行上面代碼時,DOS報出了找不到–nofirststartwizard文件的異常,所以我去掉了–nofirststartwizard這一段,執行也成功了。

C:\Program Files\OpenOffice.org 3\program  soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;"

確認所有準備工作都完成后,在下面代碼中變更你pdf2swf.exe的文件位置

Process p = r.exec("D:/pdf2swf.exe "+ pdfFile.getPath() + " -o "+ swfFile.getPath() + " -T 9");
最后在main方法傳入你要轉換的文件路徑和文件名,執行就可以生成swf文件了。


在WEB項目中,生成的文件名可以根據自己的要求來變更,最終只用掉用上面的工具類代碼就可以了。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!