zoukankan      html  css  js  c++  java
  • 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. }  
  • 相关阅读:
    生日快乐 Happy Birthday To Me
    提取与设置函数值
    相当牛的老师
    C#核心概念装箱和拆箱(什么是装箱和拆箱)
    网易云音乐代理,解锁变灰歌曲
    ASP.NET 水晶报表在iis中无法显示的解决办法 Beacher
    android开发 服务端设备类型判断 Beacher
    asp.net之图片验证码生成 Beacher
    c# 委托之异步调用delegate Beacher
    log4net 日志组件使用方法 Beacher
  • 原文地址:https://www.cnblogs.com/x_wukong/p/4270969.html
Copyright © 2011-2022 走看看