前阵子由于项目业务的需要,领导要求研究一下如何实现将word转换成pdf,经过一番的百度找到了一个比较简单的方法(本人比较懒),只需要导入一个JAR包和十几行代码就能够实现转换,而且转换的效果比预想的要好。但是也有很大的局限性,这种方式只能依赖于在windows系统下且需要在你本机上安装office相关的软件才能完成转换(微软office组件或WPS组件),这也是为什么这种方式最终被领导摒弃掉的最大因素,但是如果你只是想单纯的在自己的demo项目上使用和学习的话,还是很不错的;但是想要用在商业用途上这里是强烈不建议的。(借鉴了很多大牛的文章,学习了)
-----------------------------------使用时需要准备的内容-----------------------------------
JAR包:com.jacob
MAVEN依赖:
<dependency>
<groupId>com.jacob</groupId>
<artifactId>jacob</artifactId>
<version>1.19</version>
</dependency>
jar包下载地址(Maven Respository):
点我去下载
dll库文件就在你下载的JAR包的文件夹里面:
除了这些基本的东西之外还需要在你的本机上放置两个dll库文件才能完成转换,下面上细节:
1.找到你本地的JRE目录,如下图:
2.在本机电脑上的目录下也需要存放这两个文件:
----------------------------主要JAVA代码----------------------------------------------------
所有工作准备就绪,翠花,上代码:
logger对象是用的slf4j的日志jar包:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
创建logger对象的方式:
protected Logger logger = LoggerFactory.getLogger(getClass());
方法中的参数source代表你本机上想要转换的word文件的路径,target是你转换之后pdf文件存放的路径,pdf文件不需要预先创建,转换的时候会自动帮你创建:
/**
* 将word转换成pdf(用jacob)
*/
public void wordToPdf(String source, String target) {
if (FileUtil.illegalFileName(target)) {
logger.info("illegal file path: " + target);
return;
}
// 不保存待定的更改
int wdDoNotSaveChanges = 0;
// word转PDF格式
int wdFormatPdf = 17;
logger.info("Word转PDF开始启动...");
long start = System.currentTimeMillis();
ActiveXComponent app = null;
try {
app = new ActiveXComponent("Word.Application");
app.setProperty("Visible", false);
Dispatch docs = app.getProperty("Documents").toDispatch();
logger.info("打开文档:" + source);
Dispatch doc = Dispatch.call(docs, "Open", source, false, true).toDispatch();
logger.info("转换文档到PDF:" + target);
File tofile = new File(target);
if (tofile.exists()) {
tofile.delete();
}
Dispatch.call(doc, "SaveAs", target, wdFormatPdf);
Dispatch.call(doc, "Close", false);
long end = System.currentTimeMillis();
logger.info("转换完成,用时:" + (end - start) + "ms");
} catch (Exception e) {
logger.info("Word转PDF出错:" + e.getMessage());
} finally {
if (app != null) {
app.invoke("Quit", wdDoNotSaveChanges);
}
}
}
最终转换的效果如下:
本机的doc文件:
转换后的pdf文件:
总结,总体来说如果你是为了想要实现一个简单的word转pdf的功能,这种方式还是很不错的;但是由于这种方式存在很大的局限性,对系统和软件的依赖性较强,推荐可以用在自己平时写的demo项目上或者是毕设项目上,其他的场景不建议使用此方法。