承上启下,可折叠
上一篇说的是:服务器是windows server时,用jacob将msoffice(指的是word,excel,ppt)转换成pdf。
若被部署项目的服务器是centOS等linux server时,就不能用之前的上述说的那种方式了。
在上一篇说到openoffice将msoffice转成pdf的时候会存在排版错位的问题,或者有的内容消失了,这是因为msoffice中的一些特有格式,openoffice不识别解析不了导致的。当然大部分的普通msoffice文档转换成pdf时,效果还是令人满意的。
所以这次说一下怎么用openoffice完成msoffice到pdf的转换。
PS:本文说的是java如何调用本机(当前服务器)的openoffice服务进行文档转换;调用其他服务器上的openoffice进行文档转换下一次再说。
1.前提条件
本机测试,本机安装一个openoffice软件即可。
若是被部署项目的服务器,可以在服务器本地安装一个openoffice软件;也可以在其他服调用其他服务器上的openoffice服务进行文档转换。
openoffice的下载地址:http://www.openoffice.org/
我本机的openoffice软件安装目录:D:\software\OpenOffice 4 ,如下图所示:
2.创建项目,引入jar包
1) maven项目。我本地的pom.xml配置如下:
4.0.0
indi.johnny
openoffice-convert
0.0.1-SNAPSHOT
com.google.guava
guava
19.0
com.github.livesense
jodconverter-core
1.0.5
2) 普通java项目 将下图中的jar包从这个地址下载下来引入项目即可: http://www.mvnrepository.com/artifact/com.github.livesense/jodconverter-core/1.0.5 ; guava包也可以在 http://www.mvnrepository.com搜到,下载引入项目即可。
大概的jar包如图所示:
3.上代码
packageindi.johnny.convert;importjava.io.File;importjava.io.FileNotFoundException;importorg.artofsolving.jodconverter.OfficeDocumentConverter;importorg.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;importorg.artofsolving.jodconverter.office.OfficeManager;//转换文档为pdf
public classOpenOfficePdfConvert {/***@paramargs*/
private staticOfficeManager officeManager;private static String OFFICE_HOME = "D:/software/OpenOffice 4/";private static int port[] = { 8100};public void convert2PDF(String inputFile, String outputFile) throwsFileNotFoundException {
startService();
System.out.println("进行文档转换转换:" + inputFile + " --> " +outputFile);
OfficeDocumentConverter converter= newOfficeDocumentConverter(officeManager);
converter.convert(new File(inputFile), newFile(outputFile));
stopService();
System.out.println();
}//打开服务器
public static voidstartService() {
DefaultOfficeManagerConfiguration configuration= newDefaultOfficeManagerConfiguration();try{
System.out.println("准备启动服务....");
configuration.setOfficeHome(OFFICE_HOME);//设置OpenOffice.org安装目录
configuration.setPortNumbers(port); //设置转换端口,默认为8100
configuration.setTaskExecutionTimeout(1000 * 60 * 5L);//设置任务执行超时为5分钟
configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24L);//设置任务队列超时为24小时
officeManager=configuration.buildOfficeManager();
officeManager.start();//启动服务
System.out.println("office转换服务启动成功!");
}catch(Exception ce) {
System.out.println("office转换服务启动失败!详细信息:" +ce);
}
}//关闭服务器
public static voidstopService() {
System.out.println("关闭office转换服务....");if (officeManager != null) {
officeManager.stop();
}
System.out.println("关闭office转换成功!");
}public static void main(String[] args) throwsException {
String path= "C:/Users/johnny/Desktop/文档/20170420/test/001/";
OpenOfficePdfConvert opc= newOpenOfficePdfConvert();
opc.convert2PDF(path+"1.docx", path+"1.pdf");
}
}
将代码中的 OFFICE_HOME换成自己的openoffice的安装路径,端口8100不用动。
找一个msoffice文档测试运行一下,应该是可以的。