仿百度文库解决方案之二:Jacob调用转换

开发 前端
Jacob类库中只有两个包:com.jacob.activex和com.jacob.com。com.jacob.activex包建立在com.jacob.com基础之上,主要包含了ActiveXComponent类。

Jacob简介

Jacob是Java与COM组件桥接的缩写,即JAVA-COM Bridge。通过使用Jacob类库,我们可以很方便地在Java程序中调用COM自动化组件。Jacob最初是由美国人Dan Alder在Inventure公司担任CTO时编写的,目的是为了方便众多的程序员在Java2虚拟机上,调用Win32平台上COM自动化服务器中的组件。当Jacob项目以开源的方式在网络上公布以后,越来越多的人开始参与项目的研发与改进中去。

Jacob类库中只有两个包:com.jacob.activex和com.jacob.com。com.jacob.activex包建立在com.jacob.com基础之上,主要包含了ActiveXComponent类。com.jacob.com中有一个非常基础的类JacobObject,该包中比较常用的两个类Dispatch和Variant便是继承自JacobObject。

Dispatch类代表COM自动化组件中的对象,提供了访问COM对象的API。Dispatch类中常用的方法有:

call( )方法:调用COM对象的方法,返回Variant类型值。

invoke( )方法:和call方法作用相同,但是不返回值。

get( )方法:获取COM对象属性,返回variant类型值。

put( )方法:设置COM对象属性。

ActiveXComponent类继承自Dispatch类,在内部封装了Dispatch对象,使用该类加载COM组件。 并且提供了访问COM组件对象的属性和方法的接口。ActiveXComponent类提供了比Dispatch类更方便的获取属性和设置属性的方法:getProperty( ),setProperty( )。

Variant类映射COM对象中的Variant数据结构,提供Java和COM的数据交互。其本质就是一种数据类型,可以被转换成任何数据类型,如int,String,甚至Dispatch对象。

MS Office COM 对象模型

Microsoft Office2007之前的Office版本并没有提供转换文档为PDF格式的支持,另外,Office2007还需要安装有Microsoft Save as PDF or XPS插件才支持PDF格式转换,而Office2010不需要安装插件则自带有转换Office文档为PDF格式的API。因此,建议使用Office 2010。

通过查询MSDN Office 2010开发人员手册,经过分析后得出图2-1所示的Office COM对象模型:

Office COM对象模型图2-1 Office COM对象模型

Microsoft Office中每个应用程序中都包含一个Application对象,但是每个应用程序中的文档对象却不一样,Word中Documents对象代表Word应用程序中所有打开的word文档集合,Document对象代表一篇word文档。详细的文档对象结构如图2-1所示。其中Document,Workbook,Presentation中的SaveAs或者ExportAsFixedFormat方法可用于将文档转换为PDF。

Jacob调用MS Office COM自动化组件转换Office文档为PDF

算法流程图如2-2所示:

Jacob调用MS Office转换文档为PDF

图2-2 Jacob调用MS Office COM组件转换文档为PDF算法流程

接下来是代码部分:

#p#

第一步,对于Office文档,不同格式的文档需要加载不同的COM组件,例如Word文件需要加载Word COM组件。Jacob中加载COM组件是利用ActiveXComponent类,例如,加载Word COM自动化组件:

  1. //Word.Application代表COM OLE编程标识,可查询MSDN得到  
  2. ActiveXComponent app = new ActiveXComponent("Word.Application");  
  3. //设置Word不可见  
  4. app.setProperty("Visible",false); 

第二步,获得文档对象集合,Word中Documents对象代表Word应用程序中所有打开的Word文档,范例如下:

  1. //调用Application对象的Documents属性,获得Documents对象  
  2. Dispatch docs = app.getProperty("Documents").toDispatch(); 

第三步,打开文件,并执行转换。Word范例如下:

  1. Dispatch doc = Dispatch.call(docs,  
  2.                            "Open",//调用Documents对象的Open方法  
  3.                             inputFile,// 输入文件路径全名  
  4.                             false//ConfirmConversions,设置为false表示不显示转换框  
  5.                              true//ReadOnly  
  6.                             );  
  7.  
  8. Dispatch.call(doc,//要转换的文档  
  9.                "SaveAS",  
  10.                 pdfFile,//要保存的PDF文件名  
  11.                 wdFormatPDF//转换后的文件格式宏,值为17,可查询MSDN得到   
  12.                 ); 

第四步,关闭应用程序。Word范例:

  1. //关闭打开的Word文件  
  2. Dispatch.call(doc,  
  3.               "Close",  
  4.                false//设置不保存改变);  
  5. //关闭Word应用程序  
  6. app.invoke("Quit",0); 

转换Word文档为PDF格式的详细代码如下:

  1. word2PDF   
  2.  
  3. public static void word2PDF(String inputFile,String pdfFile){  
  4.         //打开word应用程序  
  5.         ActiveXComponent app = new ActiveXComponent("Word.Application");  
  6.         //设置word不可见  
  7.         app.setProperty("Visible"false);  
  8.         //获得word中所有打开的文档,返回Documents对象  
  9.         Dispatch docs = app.getProperty("Documents").toDispatch();  
  10.         //调用Documents对象中Open方法打开文档,并返回打开的文档对象Document  
  11.         Dispatch doc = Dispatch.call(docs,  
  12.                                     "Open",  
  13.                                     inputFile,  
  14.                                     false,  
  15.                                     true 
  16.                                     ).toDispatch();  
  17.         //调用Document对象的SaveAs方法,将文档保存为pdf格式  
  18.         /*  
  19.         Dispatch.call(doc,  
  20.                     "SaveAs",  
  21.                     pdfFile,  
  22.                     wdFormatPDF        //word保存为pdf格式宏,值为17  
  23.                     );  
  24.                     */ 
  25.         Dispatch.call(doc,  
  26.                 "ExportAsFixedFormat",  
  27.                 pdfFile,  
  28.                 wdFormatPDF        //word保存为pdf格式宏,值为17  
  29.                 );  
  30.         //关闭文档  
  31.         Dispatch.call(doc, "Close",false);  
  32.         //关闭word应用程序  
  33.         app.invoke("Quit"0);  
  34.           
  35.     } 

源代码下载地址:DocConverter

原文链接:http://www.cnblogs.com/luckyxiaoxuan/archive/2012/06/13/2548355.html

【编辑推荐】

 

责任编辑:张伟 来源: 肖恩也有梦想的博客
相关推荐

2012-06-19 13:25:15

Web

2012-06-19 13:32:23

Web

2012-06-18 16:29:48

Web

2012-06-19 13:45:57

Web

2012-06-19 13:42:08

Web

2012-07-16 14:43:32

silverlight

2015-10-28 13:40:28

高仿百度糯米源码

2012-10-19 09:47:30

百度云百度音乐云计算

2011-06-02 17:28:24

网站收录

2012-11-27 09:51:54

百度三星云解决方案

2011-06-29 08:31:56

收录

2011-05-24 10:40:12

SEO

2015-12-02 17:22:03

百度地图

2011-10-21 09:28:25

百度地图API

2020-09-15 19:29:40

搜索

2013-08-22 17:08:50

点赞
收藏

51CTO技术栈公众号