需求场景
office文档在web端在线浏览
实现思路1
利用POI分析word文档或者xls表格,转化为HTML,再通过itext将HTML转化为PDF。
优点:无
缺点:分析转HTML时 office格式比较难转化,并且word文档有doc、docx,xls表格有xls、xlsx两种后缀格式,实现太复杂。word文档转换后格式还好,但表格就真的。。。贼丑 (样式太难搞了)。
实现思路2
比如window下的wps office,自带有转格式功能。那么是否可以利用这种第三方office软件去将office文档转化为PDF呢。答案是肯定的。网上一搜一大把利用openoffice转换为PDF。
优点:实现简单
缺点:服务器需安装对应的服务
由于本人电脑系统为Ubuntu,并且自带Libreoffice 软件。第三方jar包 JodConventer 也支持Libreoffice 于是采取此方案。
好,下面来一个利用LibreOffice将office转换为PDF格式的Demo。
实现Demo
环境
- Libreoffice套件(全平台,没有yum与apt源,Linux需要在官网下载)
- Java环境+JodConventer
在pom.xml中添加
<!--调用本地OFFICE服务-->
<!-- https://mvnrepository.com/artifact/org.jodconverter/jodconverter-local -->
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-local</artifactId>
<version>4.2.1</version>
</dependency>
代码调用
//获取libreoffice套件的app地址 这里是Centos 7 官网下载安装后的软件位置
String appPath = "/opt/libreoffice6.0";
String source = "这里是需要转换的文档地址";
String target = "转换后的pdf地址,后缀要为pdf";
File inputFile = new File(source);
File outputFile = new File(target);
//从本地建立连接
OfficeManager officeManager = LocalOfficeManager.builder().officeHome(appPath).build();
try{
officeManager.start();
//转换
LocalConverter.builder()
.officeManager(officeManager)
.build()
.convert(inputFile)
.to(outputFile)
.execute();
}catch(OfficeException e){
//捕捉异常自定义操作
}finally{
//关闭office连接
OfficeUtils.stopQuietly(officeManager);
}
关于Libreoffice套件在linux下的地址
ubuntu系统自带该套件,以上代码中appPath是libreoffice的根目录(program目录下要有soffice.bin文件),如果不知道默认安装在哪里可以终端敲
$ sudo find / -name libreoffice

同理Centos也是一样,推荐从官网下载套件然后用rpm安装(代码中appPath为centos下的位置)
转换效果如图

浏览器支持直接浏览pdf格式文件。。。
网友评论