java中 jacob作用_【JAVA】JACOB使用简介

它允许在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:开始执行查找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值