文件在線預覽

在線預覽圖片、word、pdf文件。
其中word文件要轉換成pdf文件,瀏覽器支持在線預覽pdf文件,不需要使用flexpaper將pdf轉換成flash文件(swf文件)後再嵌入flash文件。
用到了openOffice服務,使用word轉PDF前需要先打開openOffice服務,在openOffice/program下執行soffice -headless -accept=”socket,host=127.0.0.1,port=8100;urp;” -nofirststartwizard命令
安裝包下載
1.openoffice是Apache下的一個開放免費的文字處理軟件
下載地址:Apache oppenoffice 官網下載 版本-3.4.1
2.JODConverter一個Java的OpenDocument 文件轉換器,在此我們只用到它的jar包
下載地址:JODCConverter下載

/*
     * 在線預覽
     * IE可用
     */
    @RequestMapping(value="/preview.do",produces="text/html;charset=UTF-8")
    public @ResponseBody void preview(String id,HttpServletResponse response,HttpServletRequest request) throws IOException {
        Attachment attachment = attachmentSevice.selectAttach(id);
        response.reset();
        response.setContentType("text/html; charset=UTF-8");
        //response.setContentType("application/octet-stream");
        String fullFileName = request.getSession().getServletContext().getRealPath("/")+attachment.getFilePath();
        File file = null;
        if(fullFileName.endsWith(".doc")){
            DocConverter doc = new DocConverter(fullFileName);
            file = doc.conver();
        }else{
            file = new File(fullFileName);
        }
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
        URL u = new URL("file:///" + fullFileName);
        /*response.setContentType(u.openConnection().getContentType());
        response.setHeader("Content-Disposition", "inline; filename=" + file.getName());*/
        String mime =request.getServletContext().getMimeType(file.getName());
        response.setContentType(mime);
        response.addHeader("Content-Length", String.valueOf(bis.available()));
        OutputStream os = response.getOutputStream();
        try {
            int count = 0;
            byte[] buffer = new byte[1024 * 1024];
            while ((count = bis.read(buffer)) != -1)
                os.write(buffer, 0, count);
            os.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (os != null)
                os.close();
            if (bis != null)
                bis.close();
        }
    }

將word文件轉換成PDF文件:(引用自http://blog.csdn.net/z69183787/article/details/17468039)

/** 
 * doc docx格式轉換 
 */  
public class DocConverter {  
    private static final int environment = 1;// 環境 1:windows 2:linux  
    private String fileString;// (只涉及pdf2swf路徑問題)  
    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 
     */  
    @SuppressWarnings("unused")  
    private void pdf2swf() throws Exception {  
        Runtime r = Runtime.getRuntime();  
        if (!swfFile.exists()) {  
            if (pdfFile.exists()) {  
                if (environment == 1) {// windows環境處理  
                    try {  
                        Process p = r.exec("E:/0wangshuai/JAVA/DEMO/附件預覽/Swftools/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();  
    }  
    /** 
     * 轉換主方法 
     */  
    @SuppressWarnings("unused")  
    public File conver() {  


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

    /** 
     * 返回文件路徑 
     *  
     * @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");  
            }  
        }  
    }  
} 

js動態展示可預覽文件

var str = "<div><input type='checkbox' name='attachLst' value='"+value.id+"'><a                    style='color:#337ab7' target=\"_blank\" href=\""+base+"projectInfoController/preview.do?id="+value.id+"\">"+value.fileName+"</a></div>";
$('#form_HQGL_EDIT .attachment').prepend(str);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章