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

时间: 2024-12-27 00:30:48

Java 使用 jacob 将 word 文档转换为 pdf 文件的相关文章

Java 将Word文档转换为PDF

前言 本文将介绍如何使用免费Java Word组件Free Spire.Doc for Java在Java应用程序中将Word文档转换到PDF格式.Free Spire.Doc for Java在转换过程中能够识别中文字符并支持丰富的word文档元素:文本框.页眉.页脚.项目符号和编号.表格.文本.超链接.水印.图片.形状等. Free Spire.Doc for Java概述 Free Spire.Doc for Java 是由E-iceblue公司开发的一个免费的Java Word API,

Java环境中,word文档转PDF直接打开浏览而非下载

在平台上,需要把文档直接浏览而非下载,实现方法是先把文档转为PDF文件, 但在linux系统中确实汉字字库,所以转换失败,以下是解决方法 后面正式服务器也要添加字库,不然会转换出乱码文件,处理步骤如下:1.将Windows上字体文件 C:\Windows\Fonts目录,复制到服务器的/usr/share/fonts目录2.运行sudo fc-cache -f -v命令刷新字体缓存3.重启服务器 但正式服务器转换文件出错,tomcat没报错误,显示程序卡住,查错方法写个demo跑, 报“Can'

批量转换word文档到pdf文件

最近在整理每周的工作记录.因为每周的工作记录大都是单独的word文件,有时候忘记了也不容易找出来,一个个打开查找太费劲,因此想着把这些文件通过word2016的另存为功能转换为pdf,然后永Acrobat合并起来. 思路如下: (1)通过Python代码搜索指定输入目录下的所有word文档,调用word COM接口,将文件转存为pdf文件到指定输出目录: (2)利用Acrobat将输出的目录中所有的pdf合并成单个pdf文件供存档查阅. 步骤(1)的代码如下: 1 import os 2 #im

JAVA将 Word 文档转换为 PDF

技术来源 下载spire.doc-2.2.0.jar地址 帮助文档 POM引入Jar(本人把jar放在项目的src/main/resources/lib目录下): <dependencies> <dependency> <groupId>e-iceblue</groupId> <artifactId>spire.doc</artifactId> <version>2.2.0</version> <scop

转换Word文档为PDF文件

1.使用 Office COM组件的Microsoft.Office.Interop.word.dll库 该方法需要在电脑上安装Office软件,并且需要Office支持转换为PDF格式,如果不支持,从官网下载一个SaveAsPDFandXPS.exe插件 Interop.word程序集可以通过Nuget程序包获取,实现代码如下: public bool WordToPDF2(string sourcePath) { bool result = false; Word.Application a

用java将简单的word文档换成pdf文档

用java将简单的word文档换成pdf文档的方式很多,因为很多都没有实际测试过,所以这里就先泛泛的说一下 整体上来看分两种: 1.纯java代码实现,有很多优秀的开源软件可以用,比如poi,itext,xdocreport,docx4j等等.主要缺点是只能处理简单的文档 2.通过在操作系统安装转换软件,在java代码中调用软件命令来实现转换.常用的有OpenOffice,Pandoc,Jacob(限于Windows环境)等软件,优点是对于复杂的文档也能很好的处理.缺点是会麻烦一点,有的不能跨平

java使用freemarker生成word文档

1.原料 开源jar包freemarker.eclipse.一份模板word文档 2.首先设计模板word文档 一般,通过程序输出的word文档的格式是固定的,例如建立一个表格,将表格的标题写好,表格的内容使用不同的标记标好,设计好word后,将word文档另存为xml文件(注:只有word2003 以上的版本可以),使用xml工具打开文件,将要输出到word的内容使用${XX}替换,保存后将文件直接改为tdl后缀 3.使用eclipse编写程序 1)获得一个Configuration实例,并为

允许嵌入到PDF,Word文档和其他文件的条形码控件UPC/EAN Barcode Font Advantage Package

IDAutomation的UPC/EAN Barcode Font Advantage Package是一个先进的字体产品,它所用的工具,宏和源代码可以使用一个单一的字体文件来创建UCC-12, UPCA, UPCE, EAN8, EAN13, JAN, ISBN 和Bookland条形码.该字体满足ANSI, ISO和IEC 2000规格说明要求(ISO 15420:2000). 具体功能: 为了创建合适的UPC和EAN条形码类型,打印的字符必须要从UPC/EAN条形码字体数据表上定义的表格上

在linux中使用php将word文档转为pdf

使用本教程需要在linux中安装openoffice,改页面中有详细的安装与使用教程(http://www.cnblogs.com/sustudy/p/3999628.html). 既然,你看了该教程就应该不能否认linux的权限的确很坑人.而用php将word文档转pdf文档,更是需要一大堆权限设置.因此,在这里我就给php用到有关目录和文件都给予了777权限. 从该文中(http://www.cnblogs.com/sustudy/p/3999628.html)可以很清楚的知道重点代码:(如