jacob使用入门及问题解析

转自:http://blog.csdn.net/hemingwang0902/article/details/4377994

本博客 jacob 列文章导读
Java操作Microsoft Word之jacob 
jacob使用入门及问题解析
使用Jacob将Word转为Html或txt 
使用Jacob将Word转为PDF
java通过jacob调用word (根据Word模板生成动态内容)

    首先,大家先要了解一下jacob ,官方的解释是Java COM Bridge,即java和com组件间的桥梁(进一步了解com/dcom: http://docs.huihoo.com/com/

    com一般表现为dll或exe等二进制文件,像我们呆会会用到的jacob.dll文件,这里说说为什么我们用java去操纵office(如:word)要使用com,而不直接使用java去做?
    首先,我们清楚office是建立在windows平台之上的,本身是一个软件,除了他自己提供的宏似乎没有什么能对他进行直接的操作;在windows平台上为了解决像这样的不同应用软件,通信缺乏通用api问题,推出了com的解决方案;
    其次,我们使用dll中的一组或多组相关的函数存取组件数据,总的合称为接口具体到每个细节的实现称为方法;如果我们要调用接口里的方法,唯一的途径就是调用指向接口的指针;
   所以总的来说使用就是dll完成api的转换;
不懂没关系,会用就好,用久自然懂了, 好了com讲完,我们开始我们的主要内容吧!

大家先到这里下载jacob.jar 
里面的jacob.jar是我们要用的包
            jacob.dll就是我前面说的com组件
把包里的jacob.dll放到c:/windows/system32下
讲解麻烦,画个图大家看 好
jcob
值得注意的是,不同的版本的系统使用不同的dll文件
所以如果你编译成功,但运行失败一般是dll文件问题
遇到这种情况,可以到
http://downloads.sourceforge.net/jacob-project/jacob_1.9.zip?modtime=1109437002&big_mirror=0
下载其他的版本的 dll 文件。
先给大家个word的测试代码(经过更改该代码在我的机器上运行正常)

[java] view plaincopy
 
  1. import com.jacob.activeX.ActiveXComponent;  
  2. import com.jacob.com.ComException;  
  3. import com.jacob.com.Dispatch;  
  4. import com.jacob.com.Variant;  
  5.   
  6. public class WordDocumentProperties {  
  7.     /** 声明一个word对象*/  
  8.     private ActiveXComponent objWord;  
  9.   
  10.     /** 声明四个word组件*/  
  11.     private Dispatch custDocprops;  
  12.   
  13.     private Dispatch builtInDocProps;  
  14.   
  15.     private Dispatch document;  
  16.   
  17.     private Dispatch wordObject;  
  18.   
  19.     public WordDocumentProperties() {  
  20.     }  
  21.   
  22.     /** 
  23.      * 打开word文挡 
  24.      */  
  25.     public void open(String filename) {  
  26.         // 创建一个word对象  
  27.         objWord = new ActiveXComponent("Word.Application");  
  28.         // 为wordobject组件附值  
  29.         wordObject = (Dispatch) (objWord.getObject()); // 改了这里  
  30.         // 生成一个只读方式的word文挡组件  
  31.         Dispatch.put(wordObject, "Visible", new Variant(false));  
  32.         // 获取文挡属性  
  33.         Dispatch documents = objWord.getProperty("Documents").toDispatch();  
  34.         // 打开激活文挡  
  35.         document = Dispatch.call(documents, "Open", filename).toDispatch();  
  36.     }  
  37.   
  38.     public void selectCustomDocumentProperitiesMode() {  
  39.         custDocprops = Dispatch.get(document, "CustomDocumentProperties").toDispatch();  
  40.     }  
  41.   
  42.     public void selectBuiltinPropertiesMode() {  
  43.         builtInDocProps = Dispatch.get(document, "BuiltInDocumentProperties").toDispatch();  
  44.     }  
  45.   
  46.     /** 
  47.      * 关闭文挡 
  48.      */  
  49.     public void close() {  
  50.         Dispatch.call(document, "Close");  
  51.     }  
  52.   
  53.     public String getCustomProperty(String cusPropName) {  
  54.         try {  
  55.             cusPropName = Dispatch.call((Dispatch) custDocprops, "Item", cusPropName).toString();  
  56.         } catch (ComException e) {  
  57.             cusPropName = null;  
  58.         }  
  59.         return cusPropName;  
  60.     }  
  61.   
  62.     public String getBuiltInProperty(String builtInPropName) {  
  63.         try {  
  64.             builtInPropName = Dispatch.call((Dispatch) builtInDocProps, "Item", builtInPropName).toString();  
  65.         } catch (ComException e) {  
  66.             builtInPropName = null;  
  67.         }  
  68.         return builtInPropName;  
  69.     }  
  70.   
  71.     public static void main(String[] args) {  
  72.         try {  
  73.             WordDocumentProperties jacTest = new WordDocumentProperties();  
  74.             jacTest.open("s.doc");  
  75.             jacTest.selectCustomDocumentProperitiesMode();  
  76.             jacTest.selectBuiltinPropertiesMode();  
  77.             String custValue = jacTest.getCustomProperty("Information Source");  
  78.             String builtInValue = jacTest.getBuiltInProperty("Author");  
  79.             jacTest.close();  
  80.             System.out.println(" Document Val One:  " + custValue);  
  81.             System.out.println(" Document Author:  " + builtInValue);  
  82.         } catch (Exception e) {  
  83.             System.out.println(e);  
  84.         }  
  85.     }  
  86. }  
原文地址:https://www.cnblogs.com/x_wukong/p/4270969.html