文档转换需求在各种应用中甚是常见,目前其实没有太多方案可以选择,对于简单的文档可以自己编辑代码实现,比如使用poi + itext,但是对于复杂文档的转换,不是普通人可以写代码完成的。可以使用微软的office软件接口来实现转换,但缺点是软件收费,且不跨平台,还有可能版权方面的风险。
JODConverter
JODConverter,是一个Java的OpenDocument文件转换器,可以进行许多文件格式的转换。它依赖于OpenOffice.org或者LibreOffice提供的服务来进行转换,它能将Microsoft Office文档(Word,Excel,PowerPoint)转换为PDF格式。
其本身使用Java编写,开源,跨平台,同时OpenOffice和LibreOffice也是开源跨平台的,能适应更多场景,也能避免一些版权问题。缺点是不能完全兼容微软Office,但也是极个别情况。和SpringBoot集成还可以对外提供转换服务,总的来讲还是挺完美的。
准备
首先要有一个可以运行的SpringBoot应用,这里使用的2.x版本。JODConverter从4.1.1
版本开始,必须使用jdk8
构建,之前版本可以使用jdk7
。
添加依赖
pom.xml
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-local</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-spring-boot-starter</artifactId>
<version>4.3.0</version>
</dependency>
启用自动配置
application.yml
jodconverter:
local:
enabled: true
其他配置项可参考:org.jodconverter.boot.autoconfigure.JodConverterLocalProperties
示例代码
@Service
public class JODConverterService {
@Autowired
private DocumentConverter documentConverter;
public void convert(String src, String desc) throws OfficeException {
documentConverter.convert(new File(src)).to(new File(desc)).execute();
}
}
测试代码
@SpringBootTest
public class JODConverterServiceTests {
@Autowired
private JODConverterService jodConverterService;
@Test
void convert() throws OfficeException {
jodConverterService.convert("test.docx", "test.pdf");
}
}
Docker online
如果使用JODConverter的Docker online镜像,可以使用jodconverter-remote模块。
其他推荐
- xdocreport (可根据模板动态生成word、pdf、html,也可直接转换格式,但是兼容性不太好)
- flying-saucer-pdf (可将html渲染成pdf,并且支持css 2.1样式,和FreeMarker结合使用体验不错,适用于生成报表)
网友评论