通过OleAutomation 来调用Browser内部的浏览器组件打印,如果对SWT调用COM操作不熟悉,请参阅相关文档。
常用方法列表
ExecWB(1,1) 打开
ExecWB(2,1) 关闭现在所有的IE窗口,并打开一个新窗口
ExecWB(4,1) 保存网页
ExecWB(6,1) 打印
ExecWB(7,1) 打印预览
ExecWB(8,1) 打印页面设置
ExecWB(10,1) 查看页面属性
ExecWB(17,1) 全选
ExecWB(22,1) 刷新
ExecWB(45,1) 关闭窗体无提示
//首先获取Browser内部的OleClientSite,也就是浏览器对象
//此方式打破了Browser封装,一般不建议使用
OleClientSite clientSite = (OleClientSite) ((Composite) browser.getChildren()[0]).getChildren()[0];
//创建OleAutomation对象
OleAutomation auto = new OleAutomation(clientSite);
//调用OleAutomation对象的一个方法,例如 ExecWB(7,1)打印预览
invoke(auto,"ExecWB",7,1);
//释放OleAutomation对象
auto.dispose();
下面这段代码是对OleAutomation方法调用的封装。提供了简单的调用
OleAutomatinon方法。
对于任何OleAutomation对象,只需要invoke(Ole对象,"方法名",参数列表...);
/**
* 执行OleAutomation的一个方法
* @param automation
* @param funcName 方法名
* @param values 参数列表
* @return 返回值
*/
public Object invoke(OleAutomation automation, String funcName, Object... values) {
//获取方法ID
int[] rgdispid = automation.getIDsOfNames(new String[] { funcName });
if (rgdispid == null || rgdispid.length == 0) {
return null;
}
int dispIdMember = rgdispid[0];
if (values == null || values.length == 0) {
//无参数方法调用
Variant pVarResult = automation.invoke(dispIdMember);
if (pVarResult != null) {
Object value = getValue(pVarResult);
pVarResult.dispose();
return value;
}
} else {
//构造参数列表
Variant[] variants = new Variant[values.length];
for (int i = 0; i < values.length; i++) {
Variant variant = createVariant(values[i]);
variants[i] = variant;
}
Variant pVarResult = automation.invoke(dispIdMember, variants);
//释放参数对象
for (int i = 0; i < variants.length; i++) {
variants[i].dispose();
}
//获取调用结果
if (pVarResult != null) {
Object value = getValue(pVarResult);
pVarResult.dispose();
return value;
}
}
return null;
}
/**
* 将Java对象转换为Variant
* @param value
* @return
*/
private Variant createVariant(Object value) {
Variant variant = null;
if (value == null) {
variant = new Variant();
} else if (value instanceof Boolean) {
variant = new Variant(((Boolean) value).booleanValue());
} else if (value instanceof Short) {
variant = new Variant(((Short) value).shortValue());
} else if (value instanceof Integer) {
variant = new Variant(((Integer) value).intValue());
} else if (value instanceof Float) {
variant = new Variant(((Float) value).floatValue());
} else if (value instanceof String) {
variant = new Variant(value.toString());
} else if (value instanceof IDispatch) {
variant = new Variant((IDispatch) value);
} else if (value instanceof IUnknown) {
variant = new Variant((IUnknown) value);
} else if (value instanceof OleAutomation) {
variant = new Variant((OleAutomation) value);
}
return variant;
}
/**
* 将Variant转换为Java对象
* @param variant
* @return
*/
private Object getValue(Variant variant) {
short type = variant.getType();
switch (type) {
case COM.VT_BOOL:
return variant.getBoolean();
case COM.VT_I2:
return variant.getShort();
case COM.VT_I4:
return variant.getInt();
case COM.VT_R4:
return variant.getFloat();
case COM.VT_BSTR:
return variant.getString();
case COM.VT_DISPATCH:
return variant.getAutomation();
case COM.VT_UNKNOWN:
return variant;
case COM.VT_EMPTY:
return null;
}
if ((type & COM.VT_BYREF) != 0) {
return variant.getByRef();
}
return null;
}
分享到:
相关推荐
java swt自定义控件java swt自定义控件java swt自定义控件java swt自定义控件
Java使用SWT JFreeChart控件实现的小游戏.zipJava使用SWT JFreeChart控件实现的小游戏.zipJava使用SWT JFreeChart控件实现的小游戏.zipJava使用SWT JFreeChart控件实现的小游戏.zipJava使用SWT JFreeChart控件实现的...
SWT Browser(内嵌浏览器)所需SWTResourceManager Jar包
SWT自带的DateTime控件属实不好用,而且无法绑定到其他控件上。因此自己写一个日历控件用着方便,功能大致如下: 1、日历控件可自定义设置常见的几种日期格式; 2、可以绑定注册到其他控件如:文本框、按钮、标签上...
SWT/JFACE的控件库毕竟有限,在应用开发是我们不可避免地要自己开发一些自定义的控件
SWT 第三方 date picker RCP
此例子完整的包含了swt 所需的jar文件及执行jar文件的bat文件。展示了swt 时间选择控件及其他控件的用法,以及TimerTask的用法。
NULL 博文链接:https://liuxiaobin1023-163-com.iteye.com/blog/1144212
只要swt一个jar包即可,无需jacob,jna,jni等等,方法很简单
在使用SWT 的控件CalendarCombo时,点击None之后再选择其他时间,会出现空指针异常,且会导致程序崩溃,改包下的几个类通过改写CalendarCombo解决了这个小bug ,使用方法与CalendarCombo类似,MyCalendarCombo mc=...
SWT、JFACE控件实例,官方的东西,各种控件例子! 已经把包名等修复好了。直接导入IDE中可以运行。各种效果。
一个SWT日期时间选择控件类,可方便地加入到自己的代码中,支持拖放
对于swt控件知识的部分整理,有助于对其的学习。
swt自定义封装的日期时间选择控件,支持选择日期和时间
NULL 博文链接:https://salever.iteye.com/blog/719528
用SWT 组建实现一个简单的浏览器实例。具有搜索功能,
SWT Table 单元格编辑实例代码
该文档包含swt所有控件的使用代码。大家可以不必为不知道某个控件怎么使用而犯愁。
导入Eclipse方法: 1.解压zip,找出2个jar文件,放入一个你想放的文件夹中 2.右键Eclipse中的工程,选择Build Path->Configure Build Path 3.选择Add External Jar,选择解压得到的2个jar即可