• 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.0jrelibext 目录下
           jacob.dll 放在 E:jdk1.8.0jrein 目录下

      实现代码如下:

     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_14jrelibext 
    19  * jacob.dll 放在 E:jdk1.5.0_14jrein
    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

  • 相关阅读:
    使用电脑模拟微信内置浏览器
    手机QQ浏览器属于代理服务器吗?
    艾伟:[你必须知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二 狼人:
    艾伟:Silverlight 2.0在IE6 SP2上的虚线边框问题 狼人:
    艾伟:ASP.NET安全问题--Forms验证(后篇)--实战篇 狼人:
    艾伟:基于.NET平台的Windows编程实战(四)—— 数据库操作类的编写 狼人:
    艾伟:WMGPS开发 狼人:
    艾伟:基于.NET平台的Windows编程实战(一)——前言 狼人:
    艾伟:.NET,你忘记了么?(八) 从dynamic到特性误用 狼人:
    艾伟:小巧优美的ORM框架doodads入门指南[转载] 狼人:
  • 原文地址:https://www.cnblogs.com/yjq520/p/7413171.html
Copyright © 2020-2023  润新知