java使雅各用实现词转pdf

  

背景:日常开发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