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
博主3: https://www.cnblogs.com/yjq520/p/7413171.html
Java 使用 jacob 将 word 文档转换为 pdf 文件的更多相关文章
- java使用jacob将office文档转换为PDF格式
jacob 包下载地址: http://sourceforge.net/projects/jacob-project/ 下载后,将jacob 与 jacob-1.19-x64.dll放到安装jdk目录 ...
- JAVA使用aspose实现word文档转pdf文件
引入jar包 下载地址:https://yvioo.lanzous.com/iezpdno3mob 然后打开下载的目录打开cmd执行 mvn install:install-file -Dfile=a ...
- DEV word文档转换为pdf文件
引用aspose.net控件2.0. docement doc=new document(文件路径和名称); doc.save(输出路径\file.pdf);
- 微信公众号怎么添加附件?比如word文档,pdf文件等
微信公众号怎么添加附件?比如word文档,pdf文件等 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众 ...
- Java环境中,word文档转PDF直接打开浏览而非下载
在平台上,需要把文档直接浏览而非下载,实现方法是先把文档转为PDF文件, 但在linux系统中确实汉字字库,所以转换失败,以下是解决方法 后面正式服务器也要添加字库,不然会转换出乱码文件,处理步骤如下 ...
- 批量转换word文档到pdf文件
最近在整理每周的工作记录.因为每周的工作记录大都是单独的word文件,有时候忘记了也不容易找出来,一个个打开查找太费劲,因此想着把这些文件通过word2016的另存为功能转换为pdf,然后永Acrob ...
- 转换Word文档为PDF文件
1.使用 Office COM组件的Microsoft.Office.Interop.word.dll库 该方法需要在电脑上安装Office软件,并且需要Office支持转换为PDF格式,如果不支持, ...
- 使用VBA将批量的WORD文档转换为PDF
Sub BatchConvertToPDF() Dim destFolderPath As String destFolderPath = GetFolderPath If destFolderPat ...
- Java文件操作系列[3]——使用jacob操作word文档
Java对word文档的操作需要通过第三方组件实现,例如jacob.iText.POI和java2word等.jacob组件的功能最强大,可以操作word,Excel等格式的文件.该组件调用的的是操作 ...
随机推荐
- appium的内存泄露问题
appium的一个内存泄露的问题 标签(空格分隔): appium 我们在做移动端的测试后时候,经常会用到appium 但是有时候我们跑一个小时候/2个小时候时候,会遇到appium报错的信息: ap ...
- metasploit framework(十五):弱点扫描
openvas扫描生成NBE格式的日志 改个比较好记的文件名 将日志导入到msf进行后续操作,导入之前查看一下hosts和services 导入nbe格式的文件 查看漏洞弱点 msf直接调用nessu ...
- Appium 1.6安装步骤
原来用的Appium1.5.3GUI版本,那为什么升级呢? 为了兼容最新版本的iOS10和Android7 Xcode8升级后,将不支持使用UIAutomation,而是改为使用XCUITest了,并 ...
- 无法打开工作组信息文件中的表 'MSysAccounts',一个十分搞笑的解决方法
问题提出:从access97导出一个mdb到access2000 为了程序使用命名为system.mdb,后改名为system.dat 在c#中打开,出现 无法打开工作组信息文件中的表 'MSysAc ...
- js异步导致的错误
没想到jquery的$.each也是异步,本身是循环验证数据,然后再提交数据,但是发现验证和提交一起发生了. 技术还不到位,所以 在定义了一个变量,var step = 0; 每循环一次step自增, ...
- Cisco & H3C 交换机 DHCP 中继
个人理解:其实在核心交换上配置dhcp 中继也就是短短的几条命令,主要是注意细节,具体配置如下,希望能帮到大家: DHCP服务器IP:192.168.1.100 CISCO: 第一步:开启交换机的dh ...
- 二分图 最小点覆盖 poj 3041
题目链接:Asteroids - POJ 3041 - Virtual Judge https://vjudge.net/problem/POJ-3041 第一行输入一个n和一个m表示在n*n的网格 ...
- FZU-1752.(A^B mod C)(快速幂与快速乘优化)
我把自己演哭了... 心酸.jpg 写了很多个版本的,包括数学公式暴力,快速幂TLE等等,最后想到了优化快速幂里的乘法,因为会爆longlong,但是和别人优化的效率简直是千差万别...? 本题大意: ...
- PHP如何处理yyyyMMddHHmmssSSSZ?
PHP如何处理yyyyMMddHHmmssSSSZ? 更新: 2016-01-05 12:45 作者: wecandoitforev PHP编程中,时间,日期的应用是必不可少的.有一种日期格式:yyy ...
- 好文:javascript中的四种循环
https://juejin.im/entry/5a1654e951882554b8373622?utm_medium=hao.caibaojian.com&utm_source=hao.ca ...