背景:日常开发ERP系统,会有一些工单或者合同之类需要填写打印。我们就会将其词模板来通过系统自动化填写并转换为PDF格式(PDF文件打印可保证文件质量,是一种通用的格式。文件不易去修改,比较稳定),所以我们将通过雅各来实现这些功能。
<强>准备工作:强>
1。服务器需要安装office2007,因为我们就是调用这个来实现转换。
2 .需要安装插件雅各,安装jacob-1.14.3-x86.dll到jdk \ jdk1.7.0 \ jre \ bin(你自己电脑安装的jdk)
3 .需要使用jacob-1.14.3。jar包
,,maven代码如下:
& lt; dependency> & lt; groupId> net.sf.jacob-project & lt; artifactId> jacob & lt; version> 1.14.3 & lt;/dependency>
4。假如通过以上准备工作未成功转换,就下载一个SaveAsPDFandXPS。exe组件(office2007里的)。我就是通过这个组件才完成转换。
5。上面的在系统为windows7多中就可以了,假如你的项目需要发布到服务器(服务器系统一般都是windows2008)。则还需要一步。在上面的基础上再安装安装jacob-1.14.3-x64.dll到jdk \ jdk1.7.0 \ jre \ bin(你自己电脑安装的jdk)中。很多人在win7下都能成功转换,但在win2008就是出问题。我就是通过磨了一天的时间,看了各种日志才发现问题。
<强>一、工具类(OperationIo。java), 强>这里面可以不做任何修改,复制粘贴就可以了。
包com.repair.util.pub; 进口java.awt.image.BufferedImage; 进口java.io.ByteArrayInputStream; 进口java.io.File; 进口java.io.FileInputStream; 进口java.io.IOException; 进口java.io.InputStream; 进口javax.imageio.ImageIO; 进口sun.misc.BASE64Decoder; 进口sun.misc.BASE64Encoder; 进口com.jacob.activeX.ActiveXComponent; 进口com.jacob.com.ComThread; 进口com.jacob.com.Dispatch; 进口com.jacob.com.Variant; 公开课OperationIO { 静态最终int wdFormatPDF=17;//PDF格式/* * *字转换PDF * @param sfileName词文件存在位置 * @param toFileName PDF文件存放位置 */公共静态孔隙wordToPDF (sfileName的字符串,字符串toFileName) { System.out.println(“启动…”); 长开始=System.currentTimeMillis (); ActiveXComponent应用=零; 派遣医生=零; 尝试{//调办公室用的词 应用=new ActiveXComponent (“Word.Application”); app.setProperty(“可见”,新变种(假)); 发送文档=app.getProperty(“文件”).toDispatch (); 医生=调度。调用(文档,“开放”,sfileName) .toDispatch (); System.out.println(“打开文档……”+ sfileName); System.out.println(“转换文档到PDF……”+ toFileName); 文件去整理=新文件(toFileName); 如果(tofile.exists ()) { tofile.delete (); } Dispatch.call(医生, “SaveAs”, toFileName,//文件名 wdFormatPDF); 长债=System.currentTimeMillis (); System.out.println(“转换完成. .用时:“+(结束-开始)+“女士”); }捕捉(异常e) { 系统。println(“========错误:文档转换失败:“+ e.getMessage ()); 最后}{ Dispatch.call(医生,“关闭”,假); System.out.println(“关闭文档”); 如果(app !=null) app.invoke(“辞职”,新的变异[]{}); }//如果没有这句话,winword.exe进程将不会关闭 ComThread.Release (); }/* * *递归删除目录下的所有文件及子目录下所有文件 * @param dir将要删除的文件目录 * @return布尔返回“true”如果删除都是成功的。 *如果删除失败,停止尝试的方法 *删除并返回“false”。 */公共静态布尔deleteDir(文件dir) { 如果(dir.isDirectory ()) { String[]的孩子=dir.list (); for (int i=0;ijava使雅各用实现词转pdf