[关闭]
@king 2015-01-20T17:12:50.000000Z 字数 2458 阅读 3243

Jacob用法收集

Java


介绍

Jacob 是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。

安装和配置

Jacob是一个开源软件,它的官方站点是:http://danadler.com/jacob/
我的系统是64位,把jacob-1.18-M2-x64.dll复制到Windows\System32文件夹下,再 IDE中引用jacob.jar就可以使用了


读写Word简单示例

必须先在对应的路径下建立fileIn.doc,可以事先写入内容:

  1. package king.word;
  2. import com.jacob.activeX.ActiveXComponent;
  3. import com.jacob.com.Dispatch;
  4. import com.jacob.com.Variant;
  5. public class Test {
  6. String strDir = "F:\\桌面\\Temp\\";
  7. String strInputDoc = strDir + "fileIn.doc";
  8. String strOutputDoc = strDir + "fileOut.doc";
  9. String strOldText = "oldText";
  10. String strNewText = "It's very good to use java control Word";
  11. boolean isVisible = true;
  12. boolean isSaveOnExit = true;
  13. public Test(){
  14. ActiveXComponent oWord = new ActiveXComponent("Word.Application");
  15. oWord.setProperty("Visible", new Variant(isVisible));
  16. Dispatch oDocuments = oWord.getProperty("Documents").toDispatch();
  17. Dispatch oDocument = Dispatch.call(oDocuments, "Open", strInputDoc).toDispatch();
  18. Dispatch oSelection = oWord.getProperty("Selection").toDispatch();
  19. Dispatch oFind = oWord.call(oSelection, "Find").toDispatch();
  20. Dispatch.put(oFind, "Text", strOldText);
  21. Dispatch.call(oFind, "Execute");
  22. Dispatch.put(oSelection, "Text", strNewText);
  23. Dispatch.call(oSelection, "MoveDown");
  24. Dispatch.put(oSelection, "Text", "nSo we got the next line including BR.n");
  25. Dispatch oFont = Dispatch.get(oSelection, "Font").toDispatch();
  26. Dispatch.put(oFont, "Bold", "1");
  27. Dispatch.put(oFont, "Italic", "1");
  28. Dispatch.put(oFont, "Underline", "0");
  29. Dispatch oAlign = Dispatch.get(oSelection, "ParagraphFormat").toDispatch();
  30. Dispatch.put(oAlign, "Alignment", "3");
  31. Dispatch oWordBasic = (Dispatch)Dispatch.call(oWord, "WordBasic").getDispatch();
  32. Dispatch.call(oWordBasic, "FileSaveAs", strOutputDoc);
  33. Dispatch.call(oDocument, "Close", new Variant(isSaveOnExit));
  34. oWord.invoke("Quit", new Variant(0));
  35. }
  36. public static void main(String[] args){
  37. new Test();
  38. System.out.println("Done");
  39. }
  40. }

jacob.jar的结构

jacob包括两个部分:

  • com.jacob.activeX: ActiveXComponent类
  • com.jacob.com: 其它类和元素

Jacob类

Jacob的结构很简单,包含以下几个类:

  • ActiveXComponent:封装了Dispatch对象,用于创建一个封装了COM组件对象的Java Object
  • Dispatch:用于指向封装后的MS数据结构。常用的方法有call,subcall,get,invoke…后面会介绍使用方法。
  • Variant:用于映射COM的Variant数据类型。提供Java和COM的数据交换。
  • ComException:异常类

Jacob方法

用于访问COM/DLL对象的方法,读取、修改COM/DLL对象的属性。

  • call:属于Dispatch类。用于访问COM/DLL对象的方法。方法进行了重载,方便不同场合调用。返回一个Variant类型的值。
  • callSub:使用方法和call一样,不过它不返回值。
  • get:读取COM对象的属性值,返回一个Variant类型值。
  • put:设置COM对象的属性值。
  • invoke:call的另一种用法,更复杂一些。
  • invokesub:subcall的另一种用法
  • getProperty:属于ActiveXComponent类,读取属性值,返回一个Variant类型值。
  • setProperty:属于ActiveXComponent类,设置属性值。
  • setProperty:属于ActiveXComponent类,设置属性值
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注