Java项目中使用OpenOffice转PDF
最近项目中要实现附件的文件预览功能,其实想想不难实现! OpenOffice.org 是一套跨平台的办公室软件套件,能在 Windows、Linux、MacOS X (X11)、和 Solaris 等操作系统上执行。它与各个主要的办公室软件套件兼容。OpenOffice.org 是自由软件,任何人都可以免费下载、使用、及推广它。OpenOffice org 的 AP
最近项目中要实现附件的文件预览功能,其实想想不难实现!
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的时候很快!
百度了一下却没有发现解决的方法,甚至没看见有这种情况,如果知道的请告知一下
更多推荐
所有评论(0)