精华内容
下载资源
问答
  • openOffice在线预览

    万次阅读 2019-06-05 14:10:40
    1. 在windows或linux上安装openoffice 2. 去这个地址... 3.openoffice在linux上部署在线预览会出现乱码 解决方法: 3.1 下载字体包,链接: https://pan.baidu.com/s/1hiUskU0Ljr...

    1. 在windows或linux上安装openoffice

    2. 去这个地址https://gitee.com/kekingcn/file-online-preview把项目git下来部署到服务器

    3.openoffice在linux上部署在线预览会出现乱码

      解决方法:

            3.1 下载字体包,链接: https://pan.baidu.com/s/1hiUskU0Ljr6j9u_gCEl8ig 提取码: ix2m 

            3.2  Linux查看字体路径命令:cat /etc/fonts/fonts.conf,把字体文件夹放入到  /usr/share/fonts下

              

           3.3 分别执行以下三个命令

             mkfontscale

             mkfontdir

             fc-cache

           3.4 重启安装的openoffice,命令: soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

     或者/opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

           4. 这个时候excel文件可能会出现乱码的情况,其它格式的文件在线预览正常,解决办法如下:

              4.1 将html.ftl拷贝一份命名为excel.ftl

              4.2 修改excel.ftl的编码

               

              4.3 修改git下来的项目的源代码

            5. 在vue中的使用方式:

    <div v-if="previewWordVisible" id="textPreview" v-html="content"></div>
    
    // 在线预览文档onlinePreview
    onlinePreView (fileUrl) {
      this.$http({
        url: this.url,
        method: 'get',
        params: this.$http.adornParams({
          'url': window.SITE_CONFIG['imgShowUrl'] + '/' + fileUrl
        })
      }).then(({data}) => {
        this.content = data
      })
    }
    url:在线预览项目的ip地址和端口组成:http://xxxx:xx/
    window.SITE_CONFIG['imgShowUrl']: 文件服务器的ip地址和端口
    6. vue调用的接口位置:

    注:1. 重启openoffice的时候要把部署的openOfice的项目(即第二步部署的项目)停掉

            2. 前台预览的时候可能会预览不出来,需要该文件路径

             

        比如html.ftl文件:

    前面加上你部署openoffice项目的ip地址和端口

            3. 如果还出现乱码,就把windows下的字体文件页拷进去和步骤3一样,win10字体路径:C:\Windows\Fonts

            4. 参考网址: https://www.cnblogs.com/liran123/p/9846349.html

     

    展开全文
  • OpenOffice在线预览附件

    万次阅读 多人点赞 2018-03-06 17:16:09
    OpenOffice在线预览附件 Author xiuhong.chen@hand-china.com Date 2018/1/20 Desc 在线预览附件功能 1.下载安装包 官方下载: http://www.openoffice.org/download/index.html 2.安装OpenOffice ...

    OpenOffice在线预览附件

    Author xiuhong.chen@hand-china.com

    Date 2018/1/20

    Desc 在线预览附件功能

    1.下载安装包

    官方下载: http://www.openoffice.org/download/index.html

    image.png

    2.安装OpenOffice

    此处对于安装过程针对windows 和 linux两种环境分别介绍:

    Windows安装
    • 双击安装包 打开运行程序 ----> 点击下一步按钮 ----> 点击浏览按钮 选择安装目录路径 -----> 会自动检测系统中的插件 如果需要会自动安装 -----> 输入使用的用户 以及选择用户权限 点击下一步按钮 -----> 勾选通常安装 点击下一步 ----> 点击完成 即安装结束

    • 接下来以命令方式启动OpenOffice服务

      cd  C:\Program Files (x86)\OpenOffice 4\program
      soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
      

    服务打开成功之后在任务管理器可以看见soffice.bin的进程。

    注意: 使用OpenOffice的时候一定要打开服务 !

    比如我自己电脑晚上关机了,服务就自己关闭, 使用预览功能时候会报错:
    java.net.ConnectException: connection failed: socket,host=127.0.0.1,port=8100,tcpNoDelay=1: java.net.ConnectException: Connection refused: connect at .....
    
    Linux安装

    linux安装教程可以参考网址:https://www.cnblogs.com/goodcheap/p/7929986.html

    • 启动服务和windows不同的是,需要在命令末尾加 &

      cd /opt/openoffice4/program
      soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &
      
    • 查看服务是否成功启动

      [root@vs058 program]# ps -ef|grep openoffice
      root     24818 24804 19 15:08 pts/4    00:00:00 /opt/openoffice4/program/soffice.bin -headless -accept=socket,host=127.0.0.1,port=8100;urp; -nofirststartwizard
      root     24824 24592  0 15:08 pts/4    00:00:00 grep openoffice
      
      [root@vs058 program]# netstat -lnp |grep 8100
      tcp        0      0 127.0.0.1:8100              0.0.0.0:*                   LISTEN      24818/soffice.bin   
      

    3.引入jodconverter-2.2.2.jar包

    引入jar包的过程摸索了很久, 对于一般的java项目,直接将jar包放在lib下就可以调用; 但是恰巧我用的是maven项目, 这就需要在maven中寻找依赖, 对于我这个maven新手而言,只听过maven,见过表面的maven,并没有很深入而又熟练地掌握它的用法,尤其是碰到在pom.xml中引入依赖这种问题. 只能很羞愧地寻求小伙伴的帮助或者百度.

    • 在国内访问Maven仓库,连接速度太慢,所以我们要将中央仓库换成阿里云的中央仓库:

      http://blog.csdn.net/xiaolyuh123/article/details/74091268

    • 某些项目需要公司内部的依赖,这个时候我们就可以在项目的pom.xml中手动指定公司的仓库,比如下图,前提是公司仓库里有我们需要的依赖

      image.png

    • pom.xml中引入 jar包请参考:http://blog.csdn.net/gfd54gd5f46/article/details/54973954 .

      比如我们这个在线预览的功能需要 jodconverter-2.2.2.jar , 阿里的中央仓库里并没有这个包, 我们就需要从万能的百度下载该包,然后上传到我们公司的中央仓库:https://jingyan.baidu.com/article/a948d6517b72eb0a2dcd2e2a.html , 上传之后我们的仓库里就有该依赖了 ! 如下图:

      image.png

    • 仓库中的依赖已经准备好,接下来我们就在pom.xml中引入依赖:

      image.png

      <!-- 注意: jodconverter-2.2.1 不能转换docx  xlsx  pptx格式的文件.
      
      jodconverter-2.2.2  和 jodconverter-core-3.0-beta-4 都可以导入docx格式的文件, 二者可选其一, 不过使用这两个jar包的时候还需要导入下边这些依赖包: 
      slf4j-api-1.7.25 , juh-4.1.2 , jurt-4.1.2 , ridl-4.1.2 , unoil-4.1.2 , xstream-1.4.10
      否则会报错: java.lang.NoClassDefFoundError: com/sun/star/lang/DisposedException -->
      
      <!--OpenOffice将docx  excel ppt 转换为pdf,实现在线预览-->
      
        		<dependency>
        			<groupId>com.hand.hap</groupId>
        			<artifactId>jodconverter</artifactId>
        			<version>2.2.2</version>
        		</dependency>
      
        		<dependency>
        			<groupId>org.slf4j</groupId>
        			<artifactId>slf4j-api</artifactId>
        			<version>1.7.25</version>
        		</dependency>
      
        		<dependency>
        			<groupId>org.openoffice</groupId>
        			<artifactId>juh</artifactId>
        			<version>4.1.2</version>
        		</dependency>
      
        		<dependency>
        			<groupId>org.openoffice</groupId>
        			<artifactId>jurt</artifactId>
        			<version>4.1.2</version>
        		</dependency>
      
        		<dependency>
        			<groupId>org.openoffice</groupId>
        			<artifactId>ridl</artifactId>
        			<version>4.1.2</version>
        		</dependency>
      
        		<dependency>
        			<groupId>org.openoffice</groupId>
        			<artifactId>unoil</artifactId>
        			<version>4.1.2</version>
        		</dependency>
      
        		<dependency>
        			<groupId>com.thoughtworks.xstream</groupId>
        			<artifactId>xstream</artifactId>
        			<version>1.4.10</version>
        		</dependency>
      
        		<!--openOffice-->
      
    备注:

    有小伙伴说很难找到jar包,我把jar包上传到了百度云盘里,大家根据项目选择不同的版本
    链接:https://pan.baidu.com/s/16ujGhvEC4v1ucjkGwpCz7g
    提取码:dgsm

    4.前台代码

    在附件上传界面可以上传文件,也可以获取到文件列表的详细信息, 比如 文件在服务器上的路径,还有文件名称

    image.png

    image.png

    既然文件路径都获得到了, 那我们直接将文件路径和文件名称传递到后台进行预览, 代码如下:

    
    kendoUI-Grid:
    
    {
    	field: "",
      headerAttributes: {
        style: "text-align: center"
      },
      attributes: {style: "text-align:center"},
      title: '预览',
      width: 50,
      template: function (e) {
          return '<a href="##" onclick="preview( \''+e.filePath.replace(/\\/g,"/")+'\' ,  \''+e.fileName+'\')"  style="text-decoration : underline;color : blue;cursor:pointer" >'
            + '预览'
            + '</a>'
        }
    }
    
    将参数传递到controller: 
    function preview(filePath , fileName) {
     window.open("${base.contextPath}/sys/attach/preview?filePath="+filePath+"&fileName="+fileName);
              }
    

    注意:

    • 传递非字符串时:"+item.basicId+"
    • 传递字符串参数时: \""+item.candidateRuleCode+"\" 用双引号将参数包围,同时使用转义符。
    • 传递文件路径作为参数时: 文件路径中包括"/" 或者 "\" , 只用双引号将参数包围会出错:Uncaught SyntaxError: Invalid Unicode escape sequence , 所以我们用 .replace(/\\/g,"/") 将路径中的参数全部用转义字符

    5.后台代码

    • 首先我们要根据System.getProperty("os.name")获得服务器类别, 然后自由转换文件路径, 比如linux就是``"/",windows就是""`

    • 对于HAP框架来说, 文件上传到服务器时是不带后缀名的,这个时候利用jodconverter将docx文件转换为pdf文件时就会出现错误java.lang.IllegalArgumentException: unknown document format for file:, 所以我们就要改造框架封装好的上传方法,此处不做介绍. 或者通过file.renameto(newFile)将文件重命名为带后缀的,但是我们下载的功能就要随之修改咯 !

    • 然后根据不同的文件扩展名设置ContentType:http://tool.oschina.net/commons

    • 然后连接端口号8100, 这个端口号和打开OpenOffice服务的端口号是一致的, 然后通过converter.convert(docFile, pdfFile);将文件成功转换为 .pdf后缀的文件

      image.png

    • 将文件写到输出流中,显示在界面上,实现预览效果

    详细代码如下:

    /**
         * 在线预览图片
         * @param request
         * @param response
         * @param filePath
         * @param fileName
         * @throws IOException
         */
        @RequestMapping(value = "/sys/attach/preview")
        public ResponseData preview(HttpServletRequest request, HttpServletResponse response, @RequestParam String filePath, @RequestParam String fileName) throws IOException {
            IRequest requestContext = this.createRequestContext(request);
            ResponseData responseData = new ResponseData();
            response.setContentType("text/html; charset=UTF-8");
    
            if(!"".equals(filePath)) {
                /*1)根据项目所在的服务器环境,确定路径中的 /  和 \ */
                String osName = System.getProperty("os.name");
                if (Pattern.matches("Linux.*", osName)) {
                    filePath = "/" + filePath.replace("\\","/");
                } else if(Pattern.matches("Windows.*", osName)) {
                    filePath.replace("/","\\");
                }
    
                /*2)获得文件名后缀*/
                String ext = "";
                if(!"".equals(fileName) && fileName.contains(".")){
                    ext = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()).toUpperCase();
                }
    
                /*3)根据文件类型不同进行预览*/
                /*预览图片*/
                if ("PNG".equals(ext) || "JPEG".equals(ext) || "JPG".equals(ext)) {
                    response.setContentType("image/jpeg");
                }
                /*预览BMP格式的文件*/
                if ("BMP".equals(ext)) {
                    response.setContentType("image/bmp");
                }
                /*预览pdf*/
                if ("PDF".equals(ext)) {
                    response.setContentType("application/pdf");
                }
                
                /*利用openOffice将office文件转换为pdf格式, 然后预览doc, docx, xls, xlsx, ppt, pptx */
                if ("DOC".equals(ext) || "DOCX".equals(ext) || "XLS".equals(ext) || "XLSX".equals(ext) || "PPT".equals(ext) || "PPTX".equals(ext)) {
                    /*filePath在数据库中是不带文件后缀的, 由于jodConverter必须要识别后缀,所以将服务器中的文件重命名为带后缀的文件*/
                    File docFile = new File(filePath);
                    /*File docFileWithExt = new File(filePath + "." + ext.toLowerCase()); //带后缀的文件
                    docFile.renameTo(docFileWithExt);
                    */
                    /*转换之后的文件名*/
                    File pdfFile;
                    if(filePath.contains(".")){
                        pdfFile = new File(filePath.substring(0, filePath.lastIndexOf(".")) + ".pdf");
                    }else{
                        pdfFile = new File(filePath + ".pdf");
                    }
    
                    /*判断即将要转换的文件是否真实存在*/
                    if (docFile.exists()) {
                        /*判断改文件是否已经被转换过,若已经转换则直接预览*/
                        if (!pdfFile.exists()) {
                            /*打开OpenOffice连接,*/
                            OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
                            try {
                                connection.connect();
                                DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
                                converter.convert(docFile, pdfFile);
                                connection.disconnect();
    
                                filePath = pdfFile.getPath(); //文件转换之后的路径
                                response.setContentType("application/pdf");
    
                            } catch (java.net.ConnectException e) {
                                e.printStackTrace(); //openoffice 服务未启动
                                throw e;
                            } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
                                e.printStackTrace(); //读取转换文件失败
                                throw e;
                            } catch (Exception e) {
                                e.printStackTrace();
                                throw e;
                            }finally { //发生exception时, connection不会自动切断, 程序会一直挂着
                                try{
                                    if(connection != null){
                                        connection.disconnect();
                                        connection = null;
                                    }
                                }catch(Exception e){}
                            }
                        } else {
                            filePath = pdfFile.getPath(); //文件已经转换过
                            response.setContentType("application/pdf");
                        }
                    } else {
                        responseData.setSuccess(false);
                        responseData.setMessage("需要预览的文档在服务器中不存在!");
                        return responseData;
                    }
                }
    
                /*将文件写入输出流,显示在界面上,实现预览效果*/
                FileInputStream fis = new FileInputStream(filePath);
                OutputStream os = response.getOutputStream();
                try {
                    int count = 0;
                    byte[] buffer = new byte[1024 * 1024];
                    while ((count = fis.read(buffer)) != -1)
                        os.write(buffer, 0, count);
                    os.flush();
                    responseData.setSuccess(true);
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if (os != null)
                        os.close();
                    if (fis != null)
                        fis.close();
                }
            }
            return responseData;
        }
    

    总结,转换文件的核心代码就下边几句:

    OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
    connection.connect();
    DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
    converter.convert(docFile, pdfFile);
    connection.disconnect();
    

    实现效果如下:

    npm jpg格式:

    image.png

    .doc格式:

    image.png

    .docx格式:

    image.png

    .pdf格式:

    image.png

    问题1:Uncaught SyntaxError: Invalid Unicode escape sequence

    javaScrip上传文件路径字符串时, 一定要使用转义字符 ! ! ! 否则会报错

    image.png

    问题2:unknown document format for file

    openOffice 将.docx文件转换为.pdf时出错

    2018-01-18 20:10:23.312 DEBUG [10001] [1804f437cb4f400f9f22b4b0816c02c9] com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection - connecting
    2018-01-18 20:10:23.860 INFO  [10001] [1804f437cb4f400f9f22b4b0816c02c9] com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection - connected
    java.lang.IllegalArgumentException: unknown document format for file: D:\usr\pictures\hap\img\787dc887-9dba-4c7b-969a-c5b497268f9f
    
    

    debug 代码: converter.convert(docFile, pdfFile); 首先判断是不是文件路径有错误 ,如下 路径没有问题

    image.png

    再根据错误信息追溯jodconverter源码, 发现错误信息在这里:

    " . "的unicode字符是46 , 所以这行代码的意思是定位 " . " 所在的位置, 而我们服务器的文件是没有后缀的,所以报错, 找到问题的原因就知道怎么解决问题了.

    展开全文
  • OpenOffice在线预览文件

    2018-09-12 16:20:37
    支持Word(doc,docx)、Excel(xls,xlsx)、PPT(ppt,pptx)、PDF、Txt在线预览
  • 这个是基于OpenOffice4.1.6开发的在线预览功能,压缩包内有OpenOffice4.1.6安装包、jar包、前后端代码,以及集成教程文档~
  • 最近搞web项目,使用框架struts+spring+jpa实现,做到项目里面一个在线预览功能,试过无数的方法,最后得到了一个非常使用的方法,这方法也是我看过多篇博客的出来的,仅限参考。效果图如下:第一步:通过第三方软件...

    最近搞web项目,使用框架struts+spring+jpa实现,做到项目里面一个在线预览功能,试过无数的方法,最后得到了一个非常使用的方法,这方法也是我看过多篇博客的出来的,仅限参考。

    效果图如下:

    80388065_1

    80388065_2

    第一步:

    通过第三方软件openoffice将office文档ppt,pptx,doc,docx,xls,xlsx转换成pdf文档;

    openoffice下载链接:http://www.openoffice.org/zh-cn/download/,

    第二步:

    JODConverter一个Java的OpenDocument 文件转换器,导入其相关的jar包

    下载地址:http://download.csdn.net/detail/tan313/9041821

    第三步:

    进行安装文件,在进行项目开发前,必须启动openoffice,我这里不需要之前启动openoffice,启动openoffice写在代码中,使用代码进行启动;不过你唯一要改的就是你的openoffice安装路径,这里在后边我会说到的。

    上面相关jar包导入后,而且openoffice也安装好后,就可以进行项目开发:

    首先给出工具类,很重要:

    /**

    *

    */

    package com.sdbd.utils;

    import java.io.File;

    import java.util.Date;

    import java.util.regex.Pattern;

    import org.artofsolving.jodconverter.OfficeDocumentConverter;

    import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;

    import org.artofsolving.jodconverter.office.OfficeManager;

    /**

    * 这是一个工具类,主要是为了使Office2003-2007全部格式的文档(.doc|.docx|.xls|.xlsx|.ppt|.pptx)

    * 转化为pdf文件

    * Office2010的没测试

    *

    * @date 2012-11-5

    * @author xhw

    *

    */

    public class Office2PDF {

    /**

    * 使Office2003-2007全部格式的文档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 转化为pdf文件

    *

    * @param inputFilePath

    *            源文件路径,如:"e:/test.docx"

    * @param outputFilePath

    *            目标文件路径,如:"e:/test_docx.pdf"

    * @return

    */

    public boolean openOfficeToPDF(String inputFilePath, String outputFilePath) {

    return office2pdf(inputFilePath, outputFilePath);

    }

    /**

    * 根据操作系统的名称,获取OpenOffice.org 3的安装目录

    * 如我的OpenOffice.org 3安装在:C:/Program Files (x86)/OpenOffice.org 3

    *

    * @return OpenOffice.org 3的安装目录

    */

    public String getOfficeHome() {

    String osName = System.getProperty("os.name");

    System.out.println("操作系统名称:"+osName);

    if (Pattern.matches("Linux.*", osName)) {

    return "/opt/openoffice.org3";

    } else if (Pattern.matches("Windows.*", osName)) {

    return "C:/Program Files/OpenOffice 4";

    } else if (Pattern.matches("Mac.*", osName)) {

    return "/Application/OpenOffice.org.app/Contents";

    }

    return null;

    }

    /**

    * 连接OpenOffice.org 并且启动OpenOffice.org

    *

    * @return

    */

    public OfficeManager getOfficeManager() {

    DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();

    // 获取OpenOffice.org 3的安装目录

    String officeHome = getOfficeHome();

    config.setOfficeHome(officeHome);

    // 启动OpenOffice的服务

    OfficeManager officeManager = config.buildOfficeManager();

    officeManager.start();

    return officeManager;

    }

    /**

    * 转换文件

    *

    * @param inputFile

    * @param outputFilePath_end

    * @param inputFilePath

    * @param outputFilePath

    * @param converter

    */

    public void converterFile(File inputFile, String outputFilePath_end, String inputFilePath, String outputFilePath, OfficeDocumentConverter converter) {

    File outputFile = new File(outputFilePath_end);

    // 假如目标路径不存在,则新建该路径

    if (!outputFile.getParentFile().exists()) {

    outputFile.getParentFile().mkdirs();

    }

    converter.convert(inputFile, outputFile);

    System.out.println("文件:" + inputFilePath + "\n转换为\n目标文件:" + outputFile + "\n成功!");

    }

    /**

    * 使Office2003-2007全部格式的文档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 转化为pdf文件

    *

    * @param inputFilePath

    *            源文件路径,如:"e:/test.docx"

    * @param outputFilePath

    *            目标文件路径,如:"e:/test_docx.pdf"

    * @return

    */

    public boolean office2pdf(String inputFilePath, String outputFilePath) {

    boolean flag = false;

    OfficeManager officeManager = getOfficeManager();

    // 连接OpenOffice

    OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);

    long begin_time = new Date().getTime();

    if (null != inputFilePath) {

    File inputFile = new File(inputFilePath);

    // 判断目标文件路径是否为空

    if (null == outputFilePath) {

    // 转换后的文件路径

    String outputFilePath_end = getOutputFilePath(inputFilePath);

    if (inputFile.exists()) {// 找不到源文件, 则返回

    converterFile(inputFile, outputFilePath_end, inputFilePath, outputFilePath, converter);

    flag = true;

    }

    } else {

    if (inputFile.exists()) {// 找不到源文件, 则返回

    converterFile(inputFile, outputFilePath, inputFilePath, outputFilePath, converter);

    flag = true;

    }

    }

    officeManager.stop();

    } else {

    System.out.println("con't find the resource");

    }

    long end_time = new Date().getTime();

    System.out.println("文件转换耗时:[" + (end_time - begin_time) + "]ms");

    return flag;

    }

    /**

    * 获取输出文件

    *

    * @param inputFilePath

    * @return

    */

    public String getOutputFilePath(String inputFilePath) {

    String outputFilePath = inputFilePath.replaceAll("." + getPostfix(inputFilePath), ".pdf");

    return outputFilePath;

    }

    /**

    * 获取inputFilePath的后缀名,如:"e:/test.pptx"的后缀名为:"pptx"

    *

    * @param inputFilePath

    * @return

    */

    public String getPostfix(String inputFilePath) {

    return inputFilePath.substring(inputFilePath.lastIndexOf(".") + 1);

    }

    }

    在该工具类中,你需要改动的就是getOfficeHome()函数中返回值为你的openoffice的安装路径。

    工具类好了,在web中当我们点击预览按钮提交到一个action或者servlet处理

    在处理类中唯一需要的参数是你预览原文件的的路径,记住,是绝对路径

    根据相对路径获取绝对路径方法:

    String realpathdir = request.getSession().getServletContext().getRealPath(pathdir);

    获取到绝对路径就可以调用工具类进行转换:

    office2pdf.openOfficeToPDF(filePath, 你需要存储的路径+"/" + 文件名 +".pdf");

    filePath为原文件的绝对路径,第二个参数为你需要存储的路径和文件名,在这里我处理的方法写一个相对路径,然后获取其绝对路径,后边就跟上你转换的文件名了。

    转换好后,就开始进行预览,

    部门代码如下:

    file = new File(convertrealpath);//convertrealpath为你转换好后的文件的绝对路径

    URL u = new URL("file:///" + convertpath);

    BufferedInputStream br = new BufferedInputStream(new FileInputStream(file));

    byte[] buf = new byte[1024];

    int len = 0;

    response.reset(); // 非常重要

    response.setContentType("application/pdf");

    response.setHeader("Content-Disposition", "inline; filename=" + java.net.URLEncoder.encode(file.getName(), "UTF-8"));

    OutputStream out = response.getOutputStream();

    while ((len = br.read(buf)) > 0)

    out.write(buf, 0, len);

    br.close();

    out.close();

    return null;

    以上就可以做到在线预览。经过检查,office系列文档ppt,pptx,xls,xlsx,doc,docx都能够预览。

    项目源码不能够展示,给个文档转换源码:(转换后其实就好做了,把上面那个代码拷贝,路径放进去就能够实现预览):

    http://download.csdn.net/detail/tan313/9041835

    参阅博客:http://blog.csdn.net/z69183787/article/details/17468039

    展开全文
  • 简介之前有写了poi实现在线预览的文章,里面也说到了使用openOffice也可以做到,这里就详细介绍一下。我的实现逻辑有两种:一、利用jodconverter(基于OpenOffice服务)将文件(.doc、.docx、.xls、.ppt)转化为html格式...

    简介

    之前有写了poi实现在线预览的文章,里面也说到了使用openOffice也可以做到,这里就详细介绍一下。

    我的实现逻辑有两种:

    一、利用jodconverter(基于OpenOffice服务)将文件(.doc、.docx、.xls、.ppt)转化为html格式。

    二、利用jodconverter(基于OpenOffice服务)将文件(.doc、.docx、.xls、.ppt)转化为pdf格式。

    转换成html格式大家都能理解,这样就可以直接在浏览器上查看了,也就实现了在线预览的功能;转换成pdf格式这点,需要用户安装了Adobe Reader XI,这样你会发现把pdf直接拖到浏览器页面可以直接打开预览,这样也就实现了在线预览的功能。

    ##将文件转化为html格式或者pdf格式

    话不多说,直接上代码。

    package com.pdfPreview.util;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.OutputStream;

    import java.net.ConnectException;

    import java.text.SimpleDateFormat;

    import java.util.Date;

    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;

    /**

    * 利用jodconverter(基于OpenOffice服务)将文件(*.doc、*.docx、*.xls、*.ppt)转化为html格式或者pdf格式,

    * 使用前请检查OpenOffice服务是否已经开启, OpenOffice进程名称:soffice.exe | soffice.bin

    *

    * @author yjclsx

    */

    public class Doc2HtmlUtil {

    private static Doc2HtmlUtil doc2HtmlUtil;

    /**

    * 获取Doc2HtmlUtil实例

    */

    public static synchronized Doc2HtmlUtil getDoc2HtmlUtilInstance() {

    if (doc2HtmlUtil == null) {

    doc2HtmlUtil = new Doc2HtmlUtil();

    }

    return doc2HtmlUtil;

    }

    /**

    * 转换文件成html

    *

    * @param fromFileInputStream:

    * @throws IOException

    */

    public String file2Html(InputStream fromFileInputStream, String toFilePath,String type) throws IOException {

    Date date = new Date();

    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");

    String timesuffix = sdf.format(date);

    String docFileName = null;

    String htmFileName = null;

    if("doc".equals(type)){

    docFileName = "doc_" + timesuffix + ".doc";

    htmFileName = "doc_" + timesuffix + ".html";

    }else if("docx".equals(type)){

    docFileName = "docx_" + timesuffix + ".docx";

    htmFileName = "docx_" + timesuffix + ".html";

    }else if("xls".equals(type)){

    docFileName = "xls_" + timesuffix + ".xls";

    htmFileName = "xls_" + timesuffix + ".html";

    }else if("ppt".equals(type)){

    docFileName = "ppt_" + timesuffix + ".ppt";

    htmFileName = "ppt_" + timesuffix + ".html";

    }else{

    return null;

    }

    File htmlOutputFile = new File(toFilePath + File.separatorChar + htmFileName);

    File docInputFile = new File(toFilePath + File.separatorChar + docFileName);

    if (htmlOutputFile.exists())

    htmlOutputFile.delete();

    htmlOutputFile.createNewFile();

    if (docInputFile.exists())

    docInputFile.delete();

    docInputFile.createNewFile();

    /**

    * 由fromFileInputStream构建输入文件

    */

    try {

    OutputStream os = new FileOutputStream(docInputFile);

    int bytesRead = 0;

    byte[] buffer = new byte[1024 * 8];

    while ((bytesRead = fromFileInputStream.read(buffer)) != -1) {

    os.write(buffer, 0, bytesRead);

    }

    os.close();

    fromFileInputStream.close();

    } catch (IOException e) {

    }

    OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);

    try {

    connection.connect();

    } catch (ConnectException e) {

    System.err.println("文件转换出错,请检查OpenOffice服务是否启动。");

    }

    // convert

    DocumentConverter converter = new OpenOfficeDocumentConverter(connection);

    converter.convert(docInputFile, htmlOutputFile);

    connection.disconnect();

    // 转换完之后删除word文件

    docInputFile.delete();

    return htmFileName;

    }

    /**

    * 转换文件成pdf

    *

    * @param fromFileInputStream:

    * @throws IOException

    */

    public String file2pdf(InputStream fromFileInputStream, String toFilePath,String type) throws IOException {

    Date date = new Date();

    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");

    String timesuffix = sdf.format(date);

    String docFileName = null;

    String htmFileName = null;

    if("doc".equals(type)){

    docFileName = "doc_" + timesuffix + ".doc";

    htmFileName = "doc_" + timesuffix + ".pdf";

    }else if("docx".equals(type)){

    docFileName = "docx_" + timesuffix + ".docx";

    htmFileName = "docx_" + timesuffix + ".pdf";

    }else if("xls".equals(type)){

    docFileName = "xls_" + timesuffix + ".xls";

    htmFileName = "xls_" + timesuffix + ".pdf";

    }else if("ppt".equals(type)){

    docFileName = "ppt_" + timesuffix + ".ppt";

    htmFileName = "ppt_" + timesuffix + ".pdf";

    }else{

    return null;

    }

    File htmlOutputFile = new File(toFilePath + File.separatorChar + htmFileName);

    File docInputFile = new File(toFilePath + File.separatorChar + docFileName);

    if (htmlOutputFile.exists())

    htmlOutputFile.delete();

    htmlOutputFile.createNewFile();

    if (docInputFile.exists())

    docInputFile.delete();

    docInputFile.createNewFile();

    /**

    * 由fromFileInputStream构建输入文件

    */无锡做人流好的医院 http://www.120wtrlyy.com/

    try {

    OutputStream os = new FileOutputStream(docInputFile);

    int bytesRead = 0;

    byte[] buffer = new byte[1024 * 8];

    while ((bytesRead = fromFileInputStream.read(buffer)) != -1) {

    os.write(buffer, 0, bytesRead);

    }

    os.close();

    fromFileInputStream.close();

    } catch (IOException e) {

    }

    OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);

    try {

    connection.connect();

    } catch (ConnectException e) {

    System.err.println("文件转换出错,请检查OpenOffice服务是否启动。");

    }

    // convert

    DocumentConverter converter = new OpenOfficeDocumentConverter(connection);

    converter.convert(docInputFile, htmlOutputFile);

    connection.disconnect();

    // 转换完之后删除word文件

    docInputFile.delete();

    return htmFileName;

    }

    public static void main(String[] args) throws IOException {

    Doc2HtmlUtil coc2HtmlUtil = getDoc2HtmlUtilInstance();

    File file = null;

    FileInputStream fileInputStream = null;

    file = new File("D:/poi-test/exportExcel.xls");

    fileInputStream = new FileInputStream(file);

    // coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/xls","xls");

    coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/xls","xls");

    file = new File("D:/poi-test/test.doc");

    fileInputStream = new FileInputStream(file);

    // coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/doc","doc");

    coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/doc","doc");

    file = new File("D:/poi-test/周报模版.ppt");

    fileInputStream = new FileInputStream(file);

    // coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/ppt","ppt");

    coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/ppt","ppt");

    file = new File("D:/poi-test/test.docx");

    fileInputStream = new FileInputStream(file);

    // coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/docx","docx");

    coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/docx","docx");

    }

    }

    转换成html和转换成pdf的过程几乎一样,只是在创建输出的File时前者命名为XXX.html,后者命名为XXX.pdf,在执行converter.convert(docInputFile, htmlOutputFile);时,jodconverter会自己根据文件类型名转换成对应的文件。

    注意,main方法里别file2Html和file2pdf都调用,会报错的,要么转html,要么转pdf,只能选一个。还有就是在执行之前,需要启动openOffice的服务:在openOffice目录下的命令窗口中执行soffice -headless -accept=“socket,host=127.0.0.1,port=8100;urp;” -nofirststartwizard即可启动。

    以上需要引入jodconverter的jar包。

    展开全文
  • 1.openoffice需要导入的jar包 jodconverter-core-3.0-beta-4.jar juh-3.2.1.jar jurt-3.2.1.jar ridl-3.2.1.jar unoil-3.2.1.jar**加粗样式** 2.js function windowopenfile(urlp,billid,name){ var url=urlp+...
  • Java使用OpenOffice在线预览Office及PDF

    千次阅读 2018-10-08 09:07:21
    使用OpenOffice可实现在线预览office文件内容 更多精彩 更多技术博客,请移步 asing1elife’s blog 思路 用 OpenOffice 将 word / excel / ppt 转换为 pdf 用 pdf.js 将转换后的 pdf 显示在浏览器中显示 准备 ...
  • 1、Windows安装 双击安装包 打开运行程序 ----> 点击下一步按钮 ----> 点击浏览按钮 选择安装目录路径 -----> 会自动检测系统中的插件 如果需要会自动安装 ----->...接下来以命令方式启动OpenOffice...
  • Java实现在线预览--openOffice实现

    万次阅读 多人点赞 2019-07-31 18:39:57
    Java实现在线预览openOffice实现
  • 简介之前有写了poi实现在线预览的文章,里面也说到了使用openOffice也可以做到,这里就详细介绍一下。我的实现逻辑有两种:一、利用jodconverter(基于OpenOffice服务)将文件(.doc、.docx、.xls、.ppt)转化为html格式...
  • openoffice实现office在线预览
  • jodconverter4.1+ OpenOffice 4.1.5在线预览office文档
  • 一 、OpenOffice在线预览## 我的具体逻辑: ①我是文件上传到阿里云服务器上 ②然后我需要把上传的文件下载下来,下载到另外一台服务器上,然后获取下载文件的地址,进行转码,转成html或者pdf格式(功能一模一样...
  • 在线预览openOffice

    2019-04-01 10:20:47
    在线预览openOffice 欢迎使用Markdown编辑器 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会...
  • 最近搞web项目,使用框架struts+spring+jpa实现,做到项目里面一个在线预览功能,试过无数的方法,最后得到了一个非常使用的方法,这方法也是我看过多篇博客的出来的,仅限参考。效果图如下: 第一步:通过第三方软件...
  • 文档在线预览openoffice

    2017-09-26 14:03:23
    可转换doc,docx,ppt,pptx,txt,xls,xlsx,pdf类型的文件格式,转换类自动打开openoffice在线预览功能,代码齐全。可套用在需要的项目上。
  • 在线预览openOffice demo

    2018-04-18 10:39:36
    最近在要做在线预览,在网上找了方法,自己写的demo,亲测可用.实现方法,将office文件转换为pdf文件,浏览器可以直接在线查看pdf文件,就实现了在线预览.
  • springboot+openoffice实现在线预览功能

    千次阅读 2018-09-04 17:47:01
    openoffice实现在线预览 本人小白,所幸本人正在做的项目里有此功能,从未涉及过此类功能,望需要的同行有所帮助,也请各位大神多多指点。 话不多说,直接撸代码。 package ...
  • OpenOffice(在线预览/生成图片)

    千次阅读 2018-07-18 16:54:29
    OpenOffice的使用说明 使用OpenOffice实现文档预览
  • java openoffice 实现在线预览文件

    千次阅读 2019-09-04 19:33:56
    需求:根据文件 url ,实现文件在线预览解决方法:1、前端 前端可以直接使用微软的共有接口来在线浏览office产品(word/excel/ppt),如下: <iframe src='https://view.officeapps.live.com/op/view.aspx?src=...
  • https://blog.csdn.net/qq_42944520/article/details/90607328

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 550
精华内容 220
关键字:

openoffice在线预览