它允许在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. 深度学习与计算机视觉系列(1)_基础介绍
  2. crontab 和 at 的简单区别和用法
  3. Golang modules 初探
  4. mysql数据库上传ftp服务器中_备份部分mysql表并上传至指定ftp服务器目录中
  5. Netstars CTO陈斌:架构师的成长之路
  6. 【运维程序】简单的命令控制器(支持定时命令执行、重复定时任务命令和进程管理,开发这个小程序主要是为了方便管理服务进程)【个人github项目】...
  7. java 字符串常用函数_Java学习笔记35:Java常用字符串操作函数
  8. KNN(二)--近似最近邻算法ANN
  9. 物联网-米思齐-Mixly-RFID智能门禁
  10. Arduino 操作BT008蓝牙串口模块
  11. 贵州师范学院数学与计算机科学,2018年贵州师范大学数学与计算机科学学院720数学分析考研基础五套测试题...
  12. ERROR: could not access file $libdir/postgis-2.3: No such file or director解决方法
  13. B860AV2.1盒子刷机
  14. markdown如何调整行距_「行距怎么设置」【CSS】如何设置行距、段落间距、缩进格式 - seo实验室...
  15. 大牛博士是如何进行文献检索和阅读的
  16. jetson nano初探2——风扇
  17. 感知机算法(一)---原理
  18. linux内核编程13期:内存管理
  19. 自建外贸独立站需要多少钱。
  20. 测试学习12(测试分类及测试方法)

热门文章

  1. 通达信交易接口的解决方法是什么?
  2. 专项攻克——缓存淘汰、淘汰时机
  3. 大学计算机说课稿,【实用】信息技术说课稿三篇
  4. 【应用数学】动态最优化(2):随机差分方程
  5. 新手机怎么保养电池?手机锂电池保养及正确使用介绍
  6. 一年读100本书---HHR,NZJ---19年最后4个月
  7. 菜猪编程开发学习日记第一回
  8. 设计一个属于自己的内容热度值算法
  9. http_build_query — 生成 URL-encode 之后的请求字符串(http_build_query最新中文翻译)
  10. Java 算法 删除多余括号