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:开始执行查找
java中 jacob作用_【JAVA】JACOB使用简介相关推荐
- 红黑树在java中的作用_带你真正理解Java数据结构中的红黑树
红黑树是平衡的二叉树,它不是一个完美的平衡二叉树,但是在动态插入过程中平衡二叉搜索树的代价相对较高,所以红黑树就此出现,下面就让爱站技术频道小编带你一起进入下文了解一下吧! 一.红黑树所处数据结构的位 ...
- java中person作用_以下Java程序中Person(){};是什么意思,有什么作用?
匿名用户 1级 2013-08-20 回答 Person()方法是用来创建实例的构造方法,例如你要创建一个Person类的实例就需要new Person(),这里的Person()就是Person类的 ...
- java中settimeout作用_关于setTimeout的妙用
定义 在指定的延迟时间之后调用一个函数或执行一个代码片段 这个是setTimeout最主要的功能,但也是很坑的地方,首先javascript其实是运行在单线程的环境下,意味者定时器会在未来的某个时间支 ...
- java中if 运算符_[Java]Java基本语法结构(运算符,流程控制语句,if语句)
1:运算符(掌握) (1)算术运算符 A:+,-,*,/,%,++,-- B:+的用法 a:加法 b:正号 c:字符串连接符 C:/和%的区别 数据做除法操作的时候,/取得是商,%取得是余数 D:++ ...
- java中的原子操作_[Java并发系列] 2.Java中的原子操作类
1. 原子操作类的作用 当程序更新一个变量时,如果多个线程同时更新该变量,可能会得到期望以外的值.比如i=1, 线程A更新i+1, 同时线程B更新I+1,经过两个线程的操作,最终变量i的值可能不是3, ...
- java 中鼠标事件_[Java教程]js中鼠标事件总结
[Java教程]js中鼠标事件总结 0 2017-07-11 00:00:19 js中鼠标事件主要有onclick,onmousedown,onmouseup,oncontextmenu,ondblc ...
- java中过滤流_第十四讲 Java中的字节流和过滤流
第十四讲Java中的字节流和过滤流 主要内容 InputStream和FileInputStream OutputStream和FileOutputStream 文件字节IO流应用举例 过滤流类和常用 ...
- java中^怎么用_^运算符在Java中做什么?
^(插入符号)运算符在Java中具有什么功能? 当我尝试这个: int a = 5^n; ...它给我: for n = 5, returns 0 for n = 4, returns 1 for n ...
- Java中接口作用的理解
关于Java中接口作用的深入理解.这是个很容易遇到的问题吧,看下面红色的部分应该就能理解了.要把接口视作一种共同规范. / 2019/3/1 补充 : 接口的存在也是为了弥补类无法多继承的缺点,假设一 ...
- java中的缩小_在Java中,加宽转换(隐式)和缩小转换(显式)之间有什么区别?...
Java中的类型转换用于将一种类型的对象或变量转换为另一种类型.当我们将一种数据类型转换或分配给另一种数据类型时,它们可能不兼容.如果合适的话,它将顺利进行,否则会丢失数据. Java中的类型转换类型 ...
最新文章
- 深度学习与计算机视觉系列(1)_基础介绍
- crontab 和 at 的简单区别和用法
- Golang modules 初探
- mysql数据库上传ftp服务器中_备份部分mysql表并上传至指定ftp服务器目录中
- Netstars CTO陈斌:架构师的成长之路
- 【运维程序】简单的命令控制器(支持定时命令执行、重复定时任务命令和进程管理,开发这个小程序主要是为了方便管理服务进程)【个人github项目】...
- java 字符串常用函数_Java学习笔记35:Java常用字符串操作函数
- KNN(二)--近似最近邻算法ANN
- 物联网-米思齐-Mixly-RFID智能门禁
- Arduino 操作BT008蓝牙串口模块
- 贵州师范学院数学与计算机科学,2018年贵州师范大学数学与计算机科学学院720数学分析考研基础五套测试题...
- ERROR: could not access file $libdir/postgis-2.3: No such file or director解决方法
- B860AV2.1盒子刷机
- markdown如何调整行距_「行距怎么设置」【CSS】如何设置行距、段落间距、缩进格式 - seo实验室...
- 大牛博士是如何进行文献检索和阅读的
- jetson nano初探2——风扇
- 感知机算法(一)---原理
- linux内核编程13期:内存管理
- 自建外贸独立站需要多少钱。
- 测试学习12(测试分类及测试方法)