最近项目中碰到需求,须要将上传的word文档转换为pdf文件,虽说要实现这个可使用poi,openOffice,laberOffice,这些都能实现,可是都有一个共同的诟病就是转出的文件都会失真,可是需求是不能失真,因此这个的话比较难实现,最后,通过反复的查找,终于发现了jacob这个技术,能够说,他实现的word转pdf功能是可以不失真实现的,可是在使用的过程当中,因为服务器和jdk等各类环境因素的缘故,碰到了不少问题,因而乎在这里作一个笔记,也同时可以分享一下,但愿对各位有帮助。java
首先是在官网下载对应版本的jacob包,注意,M*版本的最好是不要用,这个是各个版本的更新中间包,最好是如今不带M*版本的文件。web
下载好文件后,须要你部署系统的本地转好word(wps也能够,这个须要本身测试)。服务器
而后部署很简单,不须要装插件以及各类花式配置环境,只须要将jacob-1.18-x64.dll拷贝至jdk的bin目录下(这个是64位系统的dll文件,其选择依据是根据你部署系统的位数去肯定的,固然有些把这个文件是放在jdk-》jre-》bin下,这个须要本身试,看你引用的是jdk仍是jre),其实不少地方说要部署至这个部署那个,通过本人测试,只须要这一步便可,环境放多了容易出现奇奇怪怪的问题。app
而后将jacob.jar包放入你的项目中便可,这样的话,已经配置好了jacob环境。测试
编写一个测试类word2Pdf.java,以下:ui
package com.advance.util; import java.io.File; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; public class Word2PdfUtil { static final int wdFormatPDF = 17;// word转PDF 格式 public static void word2pdf(String source, String target) { ComThread.InitSTA(); ActiveXComponent app = null; try { app = new ActiveXComponent("Word.Application"); app.setProperty("Visible", false); Dispatch docs = app.getProperty("Documents").toDispatch(); Dispatch doc = Dispatch.call(docs, "Open", source, false, true).toDispatch(); File tofile = new File(target); if (tofile.exists()) { tofile.delete(); } Dispatch.call(doc, "SaveAs", target, wdFormatPDF); Dispatch.call(doc, "Close", false); } catch (Exception e) { System.out.println(e.toString()); } finally { if (app != null) { app.invoke("Quit", 0); } ComThread.Release(); } } }
这个是可使用main方法测试的,是没问题的,固然,在这个过程当中会碰到不少问题,有时间我也会作一作笔记的。web测试转pdf以及pdf加水印的话我下次更新中会提到。spa