Java 使用 jacob 将 word 文档转换为 pdf 文件

  网上查询了许许多多的博客,说利用 poi、iText、Jsoup、jdoctopdf、使用 jodconverter 来调用 openOffice 的服务来转换等等,我尝试了很多种,但要么显示不完全,要么可是可能有问题,使用这个 jacob 的方法我最开始是最不想用的,因为它要导入 dll 文件,但最后我还是选择了使用该方法,原因是感觉转换后的 pdf 文件简直就是完美。

  jacob 缺点:需要 window 环境,而且速度是最慢的需要安装 msofficeWord 以及 SaveAsPDFandXPS.exe ( word 的一个插件,用来把 word 转化为 pdf ,本次未安装测试通过)

  插入正题:

  SaveAsPDFandXPS 下载地址: http://www.microsoft.com/zh-cn/download/details.aspx?id=7

  jacob 包下载地址: http://sourceforge.net/projects/jacob-project/

  下载 jacob 解压后存放路径:

    jacob.jar 放在 E:\jdk1.8.0\jre\lib\ext 目录下
       jacob.dll 放在 E:\jdk1.8.0\jre\bin 目录下

  实现代码如下:

 1 package com.jd.poi.test;
 2 
 3 import java.io.File;
 4 
 5 import com.jacob.activeX.ActiveXComponent;
 6 import com.jacob.com.ComThread;
 7 import com.jacob.com.Dispatch;
 8 import com.jacob.com.Variant;
 9 
10 /**
11  * 效果最好的一种方法,但是需要 window 环境,而且速度是最慢的需要安装 msofficeWord 以及 SaveAsPDFandXPS.exe (
12  * word 的一个插件,用来把 word 转化为 pdf,可以不用安装,本次未安装测试通过 )
13  * 
14  * SaveAsPDFandXPS
15  * 下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=7 
16  * jacob 包下载地址:http://sourceforge.net/projects/jacob-project/
17  * 
18  * jacob.jar 放在 E:\jdk1.5.0_14\jre\lib\ext 
19  * jacob.dll 放在 E:\jdk1.5.0_14\jre\bin
20  * 
21  * @author u Y
22  *
23  */
24 public class WordToPdf {
25 
26     private static final int wdFormatPDF = 17; // PDF 格式
27 
28     public void wordToPDF(String sfileName, String toFileName) {
29 
30         System.out.println("启动 Word...");
31         long start = System.currentTimeMillis();
32         ActiveXComponent app = null;
33         Dispatch doc = null;
34         try {
35             app = new ActiveXComponent("Word.Application");
36             app.setProperty("Visible", new Variant(false));
37             Dispatch docs = app.getProperty("Documents").toDispatch();
38             doc = Dispatch.call(docs, "Open", sfileName).toDispatch();
39             System.out.println("打开文档..." + sfileName);
40             System.out.println("转换文档到 PDF..." + toFileName);
41             File tofile = new File(toFileName);
42             if (tofile.exists()) {
43                 tofile.delete();
44             }
45             Dispatch.call(doc, "SaveAs", toFileName, // FileName
46                     wdFormatPDF);
47             long end = System.currentTimeMillis();
48             System.out.println("转换完成..用时:" + (end - start) + "ms.");
49 
50         } catch (Exception e) {
51             System.out.println("========Error:文档转换失败:" + e.getMessage());
52         } finally {
53             Dispatch.call(doc, "Close", false);
54             System.out.println("关闭文档");
55             if (app != null)
56                 app.invoke("Quit", new Variant[] {});
57         }
58         // 如果没有这句话,winword.exe进程将不会关闭
59         ComThread.Release();
60     }
61 
62     public static void main(String[] args) {
63         WordToPdf d = new WordToPdf();
64         d.wordToPDF("E:\\aaa\\Spring.doc", "E:\\aaa\\Spring.pdf");
65     }
66 
67 }

  本次博主的测试并没有安装 SaveAsPDFandXPS.exe 但最后也是完全转换成功,具体原因不明,转换后如图所示,图片和字体均为发现异常:

   如果出现如下错误,可以尝试安装 SaveAsPDFandXPS.exe 后在尝试:

 

  最后,感谢两位博主的教程分享,有了你们的铺路,我们才会更加轻易的找到资源,吃水不忘挖井人。

  博主1:http://zgzdlm.iteye.com/blog/1558877

  博主2:http://feifei.im/archives/93

 

posted @ 2017-09-09 19:20  走在一线的码农  阅读(17186)  评论(0编辑  收藏  举报