最近项目中要实现附件的文件预览功能,其实想想不难实现!

 OpenOffice.org 是一套跨平台的办公室软件套件,能在 Windows、Linux、MacOS X (X11)、和 Solaris 等操作系统上执行。它与各个主要的办公室软件套件兼容。OpenOffice.org 是自由软件,任何人都可以免费下载、使用、及推广它。


OpenOffice org 的 API 以 UNO (UniversalNetwork Object) 写成,所以本身是电脑语言中立的。现在来说,OpenOffice org主要是以 C++ 撰写的,但也能以 Java(TM) 来撰写。

1. 需要用的软件

    OpenOffice 下载地址http://www.openoffice.org/

    JodConverter 下载地址http://sourceforge.net/projects/jodconverter/files/JODConverter/也可以直接从附件里面下载

 

 

2.启动OpenOffice的服务

    我到网上查如何利用OpenOffice进行转码的时候,都是需要先用cmd启动一个soffice服务,启动的命令是:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;"。

    但是实际上,对于我的项目,进行转码只是偶尔进行,然而当OpenOffice的转码服务启动以后,该进程(进程名称是soffice.exe)会一直存在,并且大约占100M的内存,感觉非常浪费。于是我就想了一个办法,可以将执行该服务的命令直接在JAVA代码里面调用,然后当转码完成的时候,直


当前openoffice安装在ubantu Linux

查看文档以及百度,其最重要的部分就在于下面3句

连接OpenOffice

OpenOfficeConnection connection = new SocketOpenOfficeConnection('127.0.0.1',8100);

connection.connect();

DocumentConverter converter = new OpenOfficeDocumnetConverter(connection); 

word转PDF

converter.converter(inputFile,outputFile);

需注意源文件一定是要存在的可以使用exists()判断一下

下面是实例:


public static int office2PDF(String sourceFile, String destFile) {
    try {

        File inputFile = new File(sourceFile); 
        if (!inputFile.exists()) {
            return -1;// 找不到源文件, 则返回-1
        }
        // 如果目标路径不存在, 则新建该路径
        File outputFile = new File(destFile);
        if (!outputFile.getParentFile().exists()) {
            outputFile.getParentFile().mkdirs();
        }
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        // connect to an OpenOffice.org instance running on port 8100
        OpenOfficeConnection connection = new SocketOpenOfficeConnection(
                "127.0.0.1", 8100);
        connection.connect();
        //用于测试openOffice连接时间

        log.debug("连接时间:"+df.format(new Date()));
        // convert
        DocumentConverter converter = new StreamOpenOfficeDocumentConverter(
                connection);
        converter.convert(inputFile, outputFile);
        //测试word转PDF的转换时间
        log.debug("转换时间:"+df.format(new Date()));
        // close the connection
        connection.disconnect();
        return 0;
    }catch (ConnectException e){
        e.printStackTrace();
        log.error("openOffice连接失败!请检查IP,端口");
    } catch (Exception e) {
        e.printStackTrace();
    }
    return 1;
}

代码实现是在文件上传的时候同时转PDF;因为考虑到多个用户同时上传所以写了一个线程调用的这个方法,暂时还没发现什么问题

当然我没有用上面的openOfficeDocumentConverter(Connection);

因为我使用这种会出现could not load input documnet;意思是我的文档加载不了,我查过路径绝对正确

所有改用StreamOpenOfficeDocumentConverter(connection);

结果没有问题;像其他说的什么图片会被过滤掉,我试过不会有这种情况发生,并且转换也很稳定

唯一出现的问题就是连接openOffice的时候用时太长,都在一分钟左右

转换world的时候很快!

百度了一下却没有发现解决的方法,甚至没看见有这种情况,如果知道的请告知一下

Logo

更多推荐