最近接到一个任务,需要在eclipse中集成NTKO控件,用于编辑保存word文档,本人只会java编程,对于ocx的使用没有概念。从网上查找了一些示例代码,有的用于发送短信,但是没有内嵌NTKO的代码,自己写一个吧。
1 首先需要注册NTKO,这个信息需要写入到window的注册表中
注册NTKO:
regsvr32 D:\work\NTKO\OfficeControl.ocx
注销NTKO:
regsvr32 /u D:\work\NTKO\OfficeControl.ocx
2 swt中相关的四个类
// 用于存放Ole控件的顶层容器
org.eclipse.swt.ole.win32.OleFrame
// 用于管理内嵌的Ole控件
org.eclipse.swt.ole.win32.OleClientSite
// 用于操作内嵌的Ole控件
org.eclipse.swt.ole.win32.OleAutomation
// 值传输对象,可以传输int、string、boolean、子对象等
org.eclipse.swt.ole.win32.Variant
3 示例代码
package com.weifly.ole;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.ole.win32.OLE;
import org.eclipse.swt.ole.win32.OleAutomation;
import org.eclipse.swt.ole.win32.OleClientSite;
import org.eclipse.swt.ole.win32.OleFrame;
import org.eclipse.swt.ole.win32.Variant;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
public class NTKOTest {
private Display display = Display.getDefault();
private Shell shell = new Shell(display);
private OleAutomation oa;
public NTKOTest() {
shell.setLayout(new GridLayout(1, false));
ToolBar toolBar = new ToolBar(shell, SWT.FLAT | SWT.WRAP | SWT.RIGHT);
toolBar.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false));
ToolItem openFileItem = new ToolItem(toolBar, SWT.PUSH);
openFileItem.setText("打开文件");
openFileItem.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e) {
openFileHandler();
}
});
final ToolItem showToolbarItem = new ToolItem(toolBar, SWT.PUSH);
showToolbarItem.setText("显示工具栏");
showToolbarItem.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e) {
showToolbarHandler(showToolbarItem);
}
});
ToolItem getTextItem = new ToolItem(toolBar, SWT.PUSH);
getTextItem.setText("文本内容");
getTextItem.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e) {
getTextHandler();
}
});
createOle();
shell.setSize(500, 400);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
private void openFileHandler(){
System.out.println("打开文件");
Variant[] va = new Variant[3];
va[0] = new Variant("D:\\test.doc");
va[1] = new Variant(false);
va[2] = new Variant("Word.Document");
execMethod(oa, "OpenLocalFile", va);
}
private void showToolbarHandler(ToolItem item){
boolean isShow = getProperty(oa, "ToolBars").getBoolean();
if(isShow){
item.setText("显示工具栏");
setProperty(oa,"ToolBars","false");
}else{
item.setText("隐藏工具栏");
setProperty(oa,"ToolBars","true");
}
}
private void getTextHandler(){
System.out.println("获得文本内容");
String text = null;
Variant obj = getProperty(oa, "ActiveDocument");
if(obj!=null){
if(obj.getType()==OLE.VT_DISPATCH){
OleAutomation auto = obj.getAutomation();
OleAutomation rang = execMethod(auto, "Range", null).getAutomation();
Variant textVar = (Variant)getProperty(rang, "Text");
text = textVar.getString();
}
}
MessageDialog.openInformation(shell, "word文档内容", text);
}
private void createOle(){
OleFrame frame = new OleFrame(shell, SWT.NONE);
frame.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
OleClientSite client = new OleClientSite(frame,SWT.NONE,"NTKO.OfficeControl");
oa = new OleAutomation(client);
setProperty(oa,"ToolBars","false");
client.doVerb(OLE.OLEIVERB_SHOW);
}
private void setProperty(OleAutomation oa, String key, String value){
int[] ia = oa.getIDsOfNames(new String[]{key});
if(ia!=null && ia.length>0){
oa.setProperty(ia[0], new Variant(value));
}
}
private Variant getProperty(OleAutomation oa, String key){
int[] ia = oa.getIDsOfNames(new String[]{key});
if(ia!=null && ia.length>0){
return oa.getProperty(ia[0]);
}else{
return null;
}
}
private Variant execMethod(OleAutomation oa, String method, Variant[] params){
int[] ia = oa.getIDsOfNames(new String[]{method});
if(ia!=null && ia.length>0){
return oa.invoke(ia[0], params);
}
return null;
}
public static void main(String[] args) {
new NTKOTest();
}
}
运行效果如图:
- 大小: 83.9 KB
分享到:
相关推荐
vue集成ntko插件实现在线浏览doc文档功能。
主要使用NTKO OFFICE控件在DOMINO中进行开发实例
使用NTKO Office文档控件,能够在浏览器窗口中直接编辑Word, Excel等Office文档并保存到Web服务器。实现文档和电子表格的统一管理。同时支持强制痕迹保留,手写签名,电子印章等办公自动化系统必备的功能。是OA系统...
NTKO OFFICE 开发文档,控件的详细使用说明.
NTKO OFFICE文档控件开发接口的说明书
Java 和NTKO+OFFICE 的应用 完整示例
在VB,Delphi,C++Builder中均可以很方便的使用控件 V2,3,2,0版本之后,NTKO OFFICE文档控件不仅可以继续与浏览器和各种后台Web服务器无缝集成创建B/S结构的应用,更全面支持C/S方式的编程和其他容器。您可以在VB,...
使用NTKO附件管理控件[多文件上传控件],能够在浏览器中启动原始文件对应的应用程序,对图像文件,OFFICE文件,文本文件,AUTOCAD等任何文件进行编辑,打印,扫描,阅读,并保存到Web服务器。实现文档的方便编辑和统一...
vue集成ntko的代码示例,直接下载进行安装启动查看。方便开发者调试
ntko插件web版
2. ASP ASP 本示例通过step1.html和step2.html两个示例,快速说明了循序渐进的创建基于ASP的,集成NTKO OFFICE文档控件的入门实例 3. ASP ASP+ACCESS ASP+MS SQL 本示例展示了NTKO OFFICE文档控件部分高级功能的...
在需要NTKO的项目中,若提示无法加载附件控件之类的错误提示,很大可能是NTKO OFFICE控件没有安装,当然还有一种可能是,ActiveX控件被禁用。 本环境配置为离线安装ntko装载环境。
ntko使用案例整理
NTKO 火狐浏览器插件,在线文档编辑插件,很好用的哦。
NTKO OFFICE 文档控件卸载。
ntko office文档控件的jsp+mysql示例,所有文档的信息保存到mysql数据库中,文档文件保存到服务器磁盘。
ntko office 处理全文检索问题,效率高,是不下流行的检索工具
从项目中提取的不分代码 NTKO OFFICE控件的简单实例
使用NTKO Office文档控件,能够在浏览器窗口中直接编辑Word, Excel等Office文档并保存到Web服务器。实现文档和电子表格的统一管理。同时支持强制痕迹保留,手写签名,电子印章等办公自动化系统必备的功能。是OA系统...