它允许在java中调用com接口自动组件,它使用JNI(本地调用程序)来进行本地调用COM库。它可运行在x86和支持32位和64位Java虚拟机

X64的环境。

测试源码包:

密码: ej9u

JACOB项目的由来

首先,我们将了解JACOB项目的基本情况,探讨在什么样的情况下选择它来完成您的任务

COM中暴露出来的方法,主要有两种机制:早期绑定和晚期绑定。

大桥调用可以参考IBM的RJCB项目,它提供了一套高性能的解决方案。当然您需要了解更多的COM组件的细节,虽然框架为您完成了大部分的生成桥

RJCB仅支持那些提供早期绑定的虚函数表的接口的COM API。

而晚期绑定方式是通过IDispatch的接口来实现,类似的Java的反射机制,您可以按照名称或者ID进行方法调用,这种设计主要目的是支持脚本语言操作COM,因为脚本是解释执行的,通常都不支持指针也就没有C

+中的虚函数表 ID

雅各开源项目提供的是一个JVM独立的自动化服务器的实现,其核心是基于JNI技术实现的变异,调度等接口,设计参考了微软VJ

+

+内置的通用自动化服务器,但是微软的实现仅仅支持自身的JVM。通过雅各,您可以方便地在Java的语言中进行晚期绑定方式的调用,开源项目实现了一种简单,灵活的Java与COM的通信方式,为您充分利用现有应用提供了可能。

Jacob安装

下载jacob的zip包,如jacob-1.18-M3.zip。

将jacob.jar引入项目。

将dll库放到指定位置,dll分为64位和32位,jacob-xx-x64.dll和jacob-xx-x32.dll,不知道放哪个都放上是一个好的选择。

为了确保能使程序找到库,可能考虑入到如下位置:

“WINDOWS\SYSTEM32”下面。

运行程序的jdk或jre的bin目录下。

如果用MyEclipse,可以指定运行程序所用的jdk,否则要放入MyEclipse自己的jdk里一份。

一般系统没有加载到Jacob.dll文件时,报错信息为:”java.lang.UnsatisfiedLinkError:

no jacob in java.library.path”

Jacob基础语法说明

ActiveXComponent ax = new ActiveXComponent("a1");

构建ActiveX组件实例,其中的a1的值和你需要调用的ActiveX控件有关

+———————————–+———————————–+

| MS控件名 | a1的值 |

+———————————–+———————————–+

| InternetExplorer | InternetExplorer.Application |

+———————————–+———————————–+

| Excel | Excel.Application |

+———————————–+———————————–+

| Word | Word.Application |

+———————————–+———————————–+

| Powerpoint | Powerpoint.Application |

+———————————–+———————————–+

| vb/java Script | ScriptControl |

+———————————–+———————————–+

| windows media Player | WMPlayer.OCX |

+———————————–+———————————–+

| Outlook | Outlook.Application |

+———————————–+———————————–+

| Visio | Visio.Application |

+———————————–+———————————–+

| DAO | DAO.PrivateDBEngine.35 |

+———————————–+———————————–+

| MultiFace | MultiFace.Face |

+———————————–+———————————–+

Dispatch ds = ax.getObject(). toDispatch();

获取Dispatch对象,我们可以把每个Dispatch对象看成是对Activex控件的一个操作,这一步是获得该ActiveX控件的控制权。

(注:浅析JACOB 中提到过Variant类,这里的ax.getObject()便是获得该对象,我们将其转化为任何对象(类型))

Dispatch.get(ds, “a1”);

返回Variant类型,获取ds对象的a1属性,通过to…()和get...()方法可以转换为java的很多类型

Dispatch.put(ds, “a1”, …);

设置ds对象a1属性,具体参数为…指定

ActiveXComponent有setProperty(“a1”,

…)和getProperty(“a1”)方法,比Dispatch的put和get方法方便!

Dispatch.invoke(ds, “a3”, a4, a5, a6).toDispatch();

说明:ds为要执行操作的对象,a3为要执行的操作名称;a4一般为Dispatch.Method、Dispatch.Put、Dispatch.Get三种,正是这三种指定让此方法可以执行put、set、call同样操作;a5为一个对象数组,形如:new

Object[]{},一般的当Method时为三个参数,Get时没有参数,Put是为两个参数;a6一般为new

int[1]

Dispatch.call(ds, “a1”, …) .toDispatch();

和invoke差不多,执行a1名称的操作,少了invoke中的a4和a6参数;…和invoke中newObject[]{}中参数一样

所以Dispatch.call()和Dispatch.invoke()方法可以执行Dispatch.put()和Dispatch.set()的操作,反之不可以

Word中的属性参数

Documents:所有文档

Open:打开文档

ActiveXComponent.Visible:设置编辑器是否可见

Tables:获得所有的表格

Bookmarks:所有标签

Selection:光标所在处或选中的区域

select:选中

typeParagraph:设置为一个段落

ParagraphFormat:段落格式,用alignment设置

alignment:1、居中,2、靠右,3、靠左

Add:新建一个word文档

Close:关闭文档,0不保存,-1保存,-2弹出框确认,注意ComThread.Release();关闭整个word进程

SaveAS:另存为

save:保存

printOut:打印

Application:得到ActiveXComponent的实例

WindowState:Application的属性,表示窗口的大小,0、default,1、maximize,2、minimize

top、left、height、width:application的属性,表示窗口的位置

ActiveXComponent.Quit:关闭所有word文档,但是不退出整个word程序

Range:表示文档中的一个连续范围,由一个起始字符位置和一个终止字符位置定义,进而可以得到格式的信息

Item:得到指定的表格

Rows:得到表格的所有行

Cell:表格的一个单元格

Text:word的文本内容

InsertFile:插入文件

InsertRowsBelow:在指定的行下面插入一行

InsertAfter:在指定对象后插入

Delete:删除,可以是表格的行

Count:返回数目,比如Rows、Tables的数目

Height:返回高度,比如行高、表格行的高

Split:拆分单元格,要指定行数和列数

Merge:合并单元格

Exists:指定的对象是否存在,返回bool值

Copy:复制

Paste:粘贴

Font:字体

Name:字体的名字

Bold:字体是否为粗体

Italic:字体是否为斜体

Underline:字体是否有下划线

Color:颜色

Size:大小

Borders:指定边框,-1为上边框,-2左边框,-3为下边框,-4有右边框,-5为横向边框,-6为纵向边框,-7从左上角开始的斜线,-8从左下角开始的斜线

AutoFitBehavior:自动调整大小,1为内容自动调整大小,2为窗口自动调整大小

Content:去的内容

InLineShapes:

AddPicture:增加一张图片,需要制定路径

homeKey:光标移到开头

moveDown:光标往下一行

moveUp:光标往上一行

moveRight:光标往左一列

moveLeft:光标往右一列

find:要查找的文本

Forward:向前查找

Format:查找的文本格式

MatchCase:大小写匹配

MatchWholeWord:全字匹配

Execute:开始执行查找

java中 jacob作用_【JAVA】JACOB使用简介相关推荐

  1. 红黑树在java中的作用_带你真正理解Java数据结构中的红黑树

    红黑树是平衡的二叉树,它不是一个完美的平衡二叉树,但是在动态插入过程中平衡二叉搜索树的代价相对较高,所以红黑树就此出现,下面就让爱站技术频道小编带你一起进入下文了解一下吧! 一.红黑树所处数据结构的位 ...

  2. java中person作用_以下Java程序中Person(){};是什么意思,有什么作用?

    匿名用户 1级 2013-08-20 回答 Person()方法是用来创建实例的构造方法,例如你要创建一个Person类的实例就需要new Person(),这里的Person()就是Person类的 ...

  3. java中settimeout作用_关于setTimeout的妙用

    定义 在指定的延迟时间之后调用一个函数或执行一个代码片段 这个是setTimeout最主要的功能,但也是很坑的地方,首先javascript其实是运行在单线程的环境下,意味者定时器会在未来的某个时间支 ...

  4. java中if 运算符_[Java]Java基本语法结构(运算符,流程控制语句,if语句)

    1:运算符(掌握) (1)算术运算符 A:+,-,*,/,%,++,-- B:+的用法 a:加法 b:正号 c:字符串连接符 C:/和%的区别 数据做除法操作的时候,/取得是商,%取得是余数 D:++ ...

  5. java中的原子操作_[Java并发系列] 2.Java中的原子操作类

    1. 原子操作类的作用 当程序更新一个变量时,如果多个线程同时更新该变量,可能会得到期望以外的值.比如i=1, 线程A更新i+1, 同时线程B更新I+1,经过两个线程的操作,最终变量i的值可能不是3, ...

  6. java 中鼠标事件_[Java教程]js中鼠标事件总结

    [Java教程]js中鼠标事件总结 0 2017-07-11 00:00:19 js中鼠标事件主要有onclick,onmousedown,onmouseup,oncontextmenu,ondblc ...

  7. java中过滤流_第十四讲 Java中的字节流和过滤流

    第十四讲Java中的字节流和过滤流 主要内容 InputStream和FileInputStream OutputStream和FileOutputStream 文件字节IO流应用举例 过滤流类和常用 ...

  8. java中^怎么用_^运算符在Java中做什么?

    ^(插入符号)运算符在Java中具有什么功能? 当我尝试这个: int a = 5^n; ...它给我: for n = 5, returns 0 for n = 4, returns 1 for n ...

  9. Java中接口作用的理解

    关于Java中接口作用的深入理解.这是个很容易遇到的问题吧,看下面红色的部分应该就能理解了.要把接口视作一种共同规范. / 2019/3/1 补充 : 接口的存在也是为了弥补类无法多继承的缺点,假设一 ...

  10. java中的缩小_在Java中,加宽转换(隐式)和缩小转换(显式)之间有什么区别?...

    Java中的类型转换用于将一种类型的对象或变量转换为另一种类型.当我们将一种数据类型转换或分配给另一种数据类型时,它们可能不兼容.如果合适的话,它将顺利进行,否则会丢失数据. Java中的类型转换类型 ...

最新文章

  1. 三星对外发售高性能芯片,华为上升势头或受重击!
  2. 1.14 Java注释:类、方法和字段注释
  3. 【直播】回放与PPT下载!深度学习如何用于摄影图像的处理?
  4. 泰国基础教育管理实行新体制
  5. python编程游戏手机版_利用Python开发手机同款游戏:开心消消乐
  6. mysql 创建外键索引吗_索引-MySQL无法创建外键约束
  7. MySQL的原理以及流程_MySQL的复制原理以及流程?
  8. 一个基于Bmob的OPPO锁屏壁纸小程序,写过之后发现...好像没什么卵用...一脸懵逼
  9. 什么是Hyperledger?Linux如何围绕英特尔的区块链项目构建开放平台?
  10. Letters比赛第六场1002 Babelfish解题报告
  11. 程序员的底色(IDE color scheme、CLI 命令行界面)
  12. 知乎上的48条神回复,针针见血
  13. Zoiper Iphone android 通话推荐设置!
  14. vs使用中遇到的问题与插件
  15. Excle之说(2)-如何读“excel”
  16. 极小极大搜索方法、负值最大算法和Alpha-Beta搜索方法
  17. 服务器413是什么状态,服务器异常代码413问题
  18. HTML(简介及常用标签)
  19. Yolov5目标检测环境搭建过程(Cuda+Pytorch+Yolov5)
  20. 硬盘连接电脑提示要格式化怎么办?

热门文章

  1. HTML网页之坦克大战游戏
  2. Python主流的四大编程框架
  3. 如何安装Microsoft Edge浏览器驱动
  4. 学习linux的书籍
  5. 男人来自火星,女人来自金星
  6. 你以为福昕阅读器只是阅读器吗
  7. 加拿大11年级计算机课程代码,如何读懂加拿大高中课程代码?
  8. Linux:Samba 文件共享服务器的搭建与访问
  9. uniapp 背景图片全屏显示在整个页面
  10. D类水声功放模块简介