Java--office(word......)在线预览(openoffice+swfTools+FlexPaper)

                         Java--在线预览(SpringMVC实现)

前言:我废了两天的时间把他做出来的,因为在预览文件的时候,需要进行下载第三方插件,所以在安卓端查看的时候用户体验的效果不好,直接就给否定了,最终选择了另外一种方式。word转为html进行在线预览,果然,转为html的方式确实非常的简单,可能十分钟你就搞定了。


word转为html大家可以进行查看:

https://blog.csdn.net/mcb520wf/article/details/79899622

一.概述

主要原理

1.通过第三方工具openoffice,将word、excel、ppt、txt等文件转换为pdf文件

2.通过swfTools将pdf文件转换成swf格式的文件

3.通过FlexPaper文档组件在页面上进行展示

二.安装包下载

1.openoffice是Apache下的一个开放免费的文字处理软件

   下载地址:Apache Open Office 4.x

2.SWFTools是一组用来处理Flash的swf文件的工具包,我们使用它将pdf文件转成swf文件!

   下载地址:SWFTools官网下载 swftools-2013-04-09-1007.exe

3.FlexPaper是一个开源轻量级的在浏览器上显示各种文档的组件

   下载地址:FlexPaper官网下载

三.安装文件

1.将所下载的文件(JODConverter除外)进行安装,盘符可随自己设定!需要注意的是在openoffice安装完成后,当我们使用它时,需将它的服务打开。在次我们需要以命令的方式打开:

打开dos窗口,cdm命令:进入openoffice安装盘符:

C:\Program Files (x86)\OpenOffice 4\program(拷贝就行)

Java--office(word......)在线预览(openoffice+swfTools+FlexPaper)_第1张图片

输入以下代码来启动服务:

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

Java--office(word......)在线预览(openoffice+swfTools+FlexPaper)_第2张图片

注意:输入后没有任何反应,这样才能继续向下进行


四.开始开发

4.1 建立maven项目。首先要将js文件,以及FlexPaperViewer.swf 拷贝到项目里面(非常重要)

Java--office(word......)在线预览(openoffice+swfTools+FlexPaper)_第3张图片

上面的红色叉号不用担心,因为我的maven工程并没有引入jar包,下面是pom文件引入JAR包

  
      
    4.1.0.RELEASE  
    1.2.1  
    
  
    
  
      
      junit  
      junit  
      4.11  
      test  
      
  
      
      com.artofsolving  
      jodconverter  
      2.2.1  
      
      
      
      javax.servlet  
      servlet-api  
      2.5  
      provided  
      
      
      javax.servlet.jsp  
      jsp-api  
      2.1  
      provided  
      
      
      
      org.slf4j  
      slf4j-api  
      1.6.0  
      
      
      
      org.slf4j  
      slf4j-nop  
      1.6.0  
      test  
      
  
      
      
      
      org.springframework  
      spring-context  
      ${spring.version}  
      
      
      org.springframework  
      spring-beans  
      ${spring.version}  
      
      
      org.springframework  
      spring-core  
      ${spring.version}  
      
  
      
      org.springframework  
      spring-web  
      ${spring.version}  
      
  
      
      org.springframework  
      spring-webmvc  
      ${spring.version}  
      
  
      
      org.springframework  
      spring-context-support  
      ${spring.version}  
      
      
      
      commons-fileupload  
      commons-fileupload  
      ${fileupload.version}  
      
    

4.2 SpringMVC配置文件

   
      
      
          
          
          
          
      
          
           
               
               
           
      
          
              
              
              
              
          
      
          
          
          
      
      




4.3 web.xml

      
      
      
      Archetype Created Web Application  
      
        
        
        SpringEncodingFilter  
        org.springframework.web.filter.CharacterEncodingFilter  
          
          encoding  
          UTF-8  
          
          
          forceEncoding  
          true  
          
        
        
        SpringEncodingFilter  
        /*  
        
      
        
        springmvc  
        org.springframework.web.servlet.DispatcherServlet  
          
          contextConfigLocation  
          classpath:spring/springmvc.xml  
          
        1  
        
        
        
        springmvc  
        /  
        
      
      

4.4 fileUpload.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"  
             pageEncoding="UTF-8"%>  
      
      
      
          
        文档在线预览系统  
          
      
      
      
    
请上传要处理的文件,过程可能需要几分钟,请稍候片刻。

4.5 documentView.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  
    <%  
        String swfFilePath=session.getAttribute("swfpath").toString();  
    %>  
      
      
      
          
          
          
          
          
      
        文档在线预览系统  
      
      
    

4.6 DocConverter.java

    package com.arthur.util;  
      
    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格式转换 
     */  
    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;  
      
        private final String OPEN_OFFICE_HOST="127.0.0.1"; //open office运行的host  
        private final Integer OPEN_OFFICE_PORT=8100; //open office运行的端口号,默认8100  
        private final String SWFTOOLS_HOME="C:/Program Files (x86)/SWFTools/"; //swfTools的安装路径  
      
        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(OPEN_OFFICE_HOST,OPEN_OFFICE_PORT);  
                    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(SWFTOOLS_HOME+"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 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;  
            }  
        }  
      
        /** 
         * 返回文件路径 
         * 
         */  
        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");  
                }  
            }  
        }  
      
    }  

4.7 ViewController.java

    package com.arthur.controller;  
      
    import com.arthur.util.DocConverter;  
    import org.springframework.beans.factory.annotation.Autowired;  
    import org.springframework.stereotype.Controller;  
    import org.springframework.web.bind.annotation.RequestMapping;  
    import org.springframework.web.bind.annotation.RequestMethod;  
    import org.springframework.web.bind.annotation.RequestParam;  
    import org.springframework.web.multipart.commons.CommonsMultipartFile;  
      
    import javax.servlet.http.HttpServletRequest;  
    import javax.servlet.http.HttpServletResponse;  
    import java.io.File;  
    import java.io.IOException;  
      
    /** 
     * Created by Administrator on 2017/6/15. 
     */  
    @Controller  
    public class ViewController {  
      
        @RequestMapping(value = "/upload",method = RequestMethod.GET)  
        public String showUploadPage(){  
            return "fileUpload";  
        }  
      
        @RequestMapping(value = "/viewer",method = RequestMethod.GET)  
        public String showViewer(){  
            return "documentView";  
        }  
      
        @RequestMapping(value = "/convert",method = RequestMethod.POST)  
        public String convert(HttpServletRequest request, HttpServletResponse response  
                , @RequestParam(value = "file") CommonsMultipartFile file) throws IOException{  
            /** 构建文件保存的目录* */  
            String saveDirectory =request.getSession().getServletContext().getRealPath("/")+"upload"+"/";  
            String filename = ""+System.currentTimeMillis();  
            String extname = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));  
            String path = saveDirectory+filename+extname;  
      
            File newFile=new File(path);  
            file.transferTo(newFile);  
      
            DocConverter d = new DocConverter(path);  
            d.conver();  
            String swfpath = "upload"+d.getswfPath().substring(d.getswfPath().lastIndexOf("/"));  
            request.getSession().setAttribute("swfpath", swfpath);  
      
            return "redirect:/viewer";  
        }  
    }  
访问:
http://localhost:8080/upload


参考博客文章:

Java--office(word......)在线预览(openoffice+swfTools+FlexPaper)_第4张图片


参考博客:https://blog.csdn.net/arthurdev/article/details/73322677


不懂在下面留言即可

欢迎订阅关注公众号(JAVA和人工智能)

                                       

                                                           获取更多免费书籍、资源、视频资料


                                    




你可能感兴趣的:(JAVA)