用JAVA实现简单的WORD转PDF 亲测有效

前阵子由于项目业务的需要,领导要求研究一下如何实现将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库文件

除了这些基本的东西之外还需要在你的本机上放置两个dll库文件才能完成转换,下面上细节:
1.找到你本地的JRE目录,如下图:
注意改成自己本机上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文件:
为转换前的doc文件转换后的pdf文件:
转换之后的pdf文件总结,总体来说如果你是为了想要实现一个简单的word转pdf的功能,这种方式还是很不错的;但是由于这种方式存在很大的局限性,对系统和软件的依赖性较强,推荐可以用在自己平时写的demo项目上或者是毕设项目上,其他的场景不建议使用此方法。

猜你喜欢

转载自blog.csdn.net/qq_35379979/article/details/106860619
今日推荐