Doc docx xls 等转为 PDF 和 HTML

下面介绍使用 JodConverter + LibreOffice 把 Windows Office 的 doc,docx,xls 等文档转换为 PDF 和 HTML:

  • HTML:
    • 优点: 用浏览器打开方便,便于实现 doc 等在线预览
    • 缺点: 相对于 PDF 大不少,图片是独立文件,格式也没有 PDF 的漂亮
  • PDF:
    • 优点: 比 HTML 格式小,格式比较接近于原文档
    • 缺点: 相对于 HTML 在线预览不够方便,也可以借助 pdf.js + HTML5 实现在线预览

安装 LibreOffice

下载 LibreOffice http://www.libreoffice.org/download/download/ 然后安装到默认目录

Gradle 依赖

1
compile 'org.jodconverter:jodconverter-spring:4.0.0-RELEASE'

Spring 配置文件

1
2
3
4
5
6
7
8
9
<!--文件名: beans.xml-->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="converter" class="org.jodconverter.spring.JodConverterBean"/>
</beans>

转换代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import org.jodconverter.office.OfficeException;
import org.jodconverter.spring.JodConverterBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.File;
public class OfficeConverter {
public static void main(String[] args) throws OfficeException {
long start = System.currentTimeMillis();
System.out.println(0);
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
JodConverterBean converter = context.getBean("converter", JodConverterBean.class);
// JodConverter 支持把 doc, docx, xls 等 office 文档转换为 pdf, html
// 把 doc 转换为 pdf,目标格式根据输出文件名的后缀自动决定
converter.convert(new File("/Users/Biao/Desktop/x.doc"), new File("/Users/Biao/Desktop/out/z.pdf"));
converter.convert(new File("/Users/Biao/Desktop/x.doc"), new File("/Users/Biao/Desktop/out/z/z.html"));
long elapsed = (System.currentTimeMillis() - start) / 1000;
System.out.println("需要 " + elapsed + "秒");
}
}

运行

运行程序会自动的打开一个 LibreOffice 后台服务,默认端口是 2002,然后进行转换。

如果输出文件的目录不存在,会自动创建的。

思考

上面的代码依赖了 Spring 4,是为了能够方便的使用配置的方式让 Spring IoC 容器管理对象,如果想要脱离 Spring,或则你用的是 Spring 3,那么只需阅读一下 org.jodconverter.spring.JodConverterBean 的代码,然后相应的修改一下,并且依赖修改为 compile ‘org.jodconverter:jodconverter-core:4.0.0-RELEASE’ 即可。

JodConverterBean 可以配置好多参数,例如 LibreOffice 不是使用默认目录安装的,则需要配置它的 officeHome 属性,否则服务启动不成功。