当前位置:   article > 正文

使用openOffice实现在线预览_openoffice online

openoffice online

一 、OpenOffice的在线预览##
我的具体逻辑: ①我是文件上传到阿里云服务器
②然后我需要把上传的文件下载下来,下载到另外一台服务器上,然后获取下载文件的地址,进行转码,转成html或者pdf格式(功能一模一样)
③然后拿到转码后的文件地址在前台页面访问,进行预览

二、需要的jar包

		<dependency>
            <groupId>jodconverter</groupId>
            <artifactId>jodconverter-jar</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.artofsolving.jodconverter</groupId>
            <artifactId>jodconverter-core</artifactId>
            <version>3.0-beta-4</version>
        </dependency>
        <dependency>
            <groupId>com.artofsolving</groupId>
            <artifactId>jodconverter</artifactId>
            <version>2.2.1</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</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>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>compile</scope>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

上边就是实现预览多用到的jar包,但是有个问题;

<dependency>
            <groupId>jodconverter</groupId>
            <artifactId>jodconverter-jar</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.artofsolving.jodconverter</groupId>
            <artifactId>jodconverter-core</artifactId>
            <version>3.0-beta-4</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这两个jar包是下载不下来的,我只能通过maven命令进行安装,命令行如下:
"C:\Users\С6\Downloads"是jar包在我本地的位置

mvn install:install-file -Dfile=C:\Users\С6\Downloads\jodconverter-core-3.0-beta-4-dist\jodconverter-core-3.0-beta-4\lib\jodconverter-core-3.0-beta-4.jar -DgroupId=org.artofsolving.jodconverter -DartifactId=jodconverter-core -Dversion=3.0-beta-4 -Dpackaging=jar
  • 1

jar包下载完就直接上代码了。

三 代码
openOfficeUtils的工具

package com.soundking.campus.config;
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;
import org.apache.commons.io.FilenameUtils;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.ExternalOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeException;
import org.artofsolving.jodconverter.office.OfficeManager;

import java.io.File;

public class OpenOfficeUtils {

    @SuppressWarnings("static-access")
    //这个是服务器上openOffice4的安装目录
 //   private static String officeHome = File.separator+"opt"+File.separator+"openoffice4";
 //这个是我本地的默认openOffice4的安装目录(本地测试用的)
 //这里写的是你的openoffice的安装地址,如果你在安装openOffice 的时候选择的是默认安装,那么地址是:C:/Program Files (x86)/OpenOffice 4/。
    private static String officeHome = "C:/Program Files (x86)/OpenOffice 4/";
        
    // 如果是自定义的安装方式,请填写自定义安装路径。

    @SuppressWarnings("static-access")
    private static int port = 8100;//这里的内容是根据你的系统选择不同的端口号,windows系统的端口号是8100
    private static OfficeManager officeManager; // 尝试连接已存在的服务器

    private static boolean reconnect() {
        try {// 尝试连接openoffice的已存在的服务器
            ExternalOfficeManagerConfiguration externalProcessOfficeManager = new ExternalOfficeManagerConfiguration();
            externalProcessOfficeManager.setConnectOnStart(true);
            externalProcessOfficeManager.setPortNumber(8100);
            officeManager = externalProcessOfficeManager.buildOfficeManager();
            officeManager.start();
            return true;
        } catch (OfficeException e) {
            e.printStackTrace();
            return false;
        }

    }

    // 开启新的openoffice的进程
    private static void start() {
        System.out.println("启动OpenOffice服务");
        try {
            DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
            configuration.setOfficeHome(officeHome);// 安装地址
            configuration.setPortNumbers(port);// 端口号
            officeManager = configuration.buildOfficeManager();
            officeManager.start(); // 启动服务
            System.out.println("我的服务终于启动成功了。。。。。。");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("启动OpenOffice服务出错" + e);
        }
    }

    // 使用完需要关闭该进程
    private static void stop() {
        System.out.println("关闭OpenOffice服务");
        try {
            if (officeManager != null) {
                officeManager.stop();
            }
        } catch (Exception e) {
            System.out.println("关闭OpenOffice服务出错" + e);
        }
    }


    public static File convertToPdf(String input) {
        File inputFile = null;
        File outFile = null;
        try {// 如果已存在的服务不能连接或者不存在服务,那么开启新的服务    
           if (!reconnect()) {
                start();// 开启服务
            }
  // 不管是转html或者是转pdf,只要把后边的后缀名改一下即可
  (但是转成html,假如word里边有图片啊,那么也会生成单独的图片链接,pdf不会出现这种情况)
            String output = FilenameUtils.separatorsToSystem(FilenameUtils.getFullPath(input) + FilenameUtils.getBaseName(input) + ".pdf");
            inputFile = new File(input);
            outFile = new File(output);
            System.out.println("开始转换文档:" + input + "=>" + output);
            OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
            converter.convert(inputFile, outFile); // 转换文档
        } catch (Exception e) {
            System.out.println("转换文档出错" + e);
            outFile = null;
        } finally {
            System.out.println("结束转换文档");
            stop();
        }
        return outFile;
    }



    // 测试工具类是否成功
    public static void main(String[] args) {
        String path = "";
        OpenOfficeUtils.convertToPdf("F:\\test\\新建 Microsoft Word 文档.docx");
        File sf = new File("F:\\test\\新建 Microsoft Word 文档.docx");
        System.out.println(sf.getPath());
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108

看看我的实现层是怎么写的吧;

 public ResponseData onlinePvw(String url) {
 //这是我想把文件转在我服务器的地址,不管是在windows或者是linux,File.separator都可以代替 ‘/’
//        String destUrl = File.separator+"opt"+File.separator+"openoffice4"+File.separator+"file"+File.separator;
//        System.out.println(destUrl);
//这是为了测试,在我本地的存放地址
        String destUrl = "F:"+File.separator+"test"+File.separator+"bbbbb"+File.separator;
        File files = new File(url);
        String fileName = files.getName();
        File destFile = new File(destUrl+fileName);
        System.out.println(destFile);
        //这是阿里云OSS下载文件的方法,我需要先在阿里云把文件下载到我的另一台服务器上。
        OSSObject ossObject = ossConfig.downloadFile(ossConfig.getOssClient(),url);
        InputStream bis = ossObject.getObjectContent();
        FileOutputStream fos = null;
        BufferedOutputStream bos = null;
        try {
            fos = new FileOutputStream(destFile);
            bos = new BufferedOutputStream(fos);
            byte[] bys = new byte[1024];
            int len = bis.read(bys);
            while(len != -1){
                System.out.println(bos);
                bos.write(bys,0,len);
                len = bis.read(bys);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                bis.close();
            } catch (IOException e) {
            }
            try {
                bos.close();
            } catch (IOException e) {
            }
        }
        //调用方法,进行转码了
        File file = OpenOfficeUtils.convertToPdf(destUrl+fileName);
        //这个path,就是最后html或者pdf的文件路径,返给前台就可以了
        String path = file.getPath();
        System.out.println(file.getPath());
        return ResponseUtil.response(Code.SUCCESS, path);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

写这个代码,让我走了很多的弯路,尤其是用代码去启动服务的时候。虽然写完了,但是我的逻辑还是没完,哎,没办法;(我还需要第三台服务器,因为下载到我的这个服务器上,文件没办法访问,可能需要配置很多东西,所以我只能在去研究了。上边的这个办法确实是可以用的,有很多地方还是可以完善的,好多地方我都是写死的,只是为了先实现转换功能,下边我还写了另外一种方法,这个是比较简单的,大家也可以看看!)

实现类层没有任何变化,就是工具类变了,好了,不所说了,直接上代码;

package com.soundking.campus.config;

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;
import org.apache.commons.io.FilenameUtils;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.ExternalOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeException;
import org.artofsolving.jodconverter.office.OfficeManager;

import java.io.File;

public class OpenOfficeUtils {
	//你服务器的ip和port
	//有一点要提醒,如果你要在本地测试,ip要写成127.0.0.1 , localhost 虽然是本地ip,但是这个会报错
    public static final String DEFAULT_HOST = "xxx.xxx.xxx.xxx";
    public static final int DEFAULT_PORT = 8100;

    public static File convertToPdf(String input) {
        File inputFile = null;
        File outFile = null;
        try {
        //直接去连接你的服务器
            OpenOfficeConnection connection = new SocketOpenOfficeConnection(DEFAULT_HOST,DEFAULT_PORT);
            connection.connect();
            String output = FilenameUtils.separatorsToSystem(FilenameUtils.getFullPath(input) + FilenameUtils.getBaseName(input) + ".pdf");
            inputFile = new File(input);
            outFile = new File(output);
            System.out.println("开始转换文档:" + input + "=>" + output);
            DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
            converter.convert(inputFile, outFile); // 转换文档
            connection.disconnect();
        } catch (Exception e) {
            System.out.println("转换文档出错" + e);
            outFile = null;
        } finally {
            System.out.println("结束转换文档");
            stop();
        }
        return outFile;
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/428602
推荐阅读
相关标签
  

闽ICP备14008679号