在eclipse中集成NTKO

本文介绍如何在Eclipse环境中通过注册并集成NTKO控件来编辑和保存Word文档,提供了从注册控件到实现基本功能的详细步骤及示例代码。

最近接到一个任务,需要在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();
	}
}

 运行效果如图:


NTKO OFFICE文档控件,支持文档电子签名[数字签名],支持PHP,ASP,JSP,C#,VB.NET,DOMINO等各种web编程语言和服务器的在线编辑痕迹保留手写签名电子印章全屏批注控件。 NTKO OFFICE文档控件能够在浏览器窗口中直接编辑Word,Excel等Office文档并保存到任意Web服务器。实现文档和电子表格的统一管理。同时支持强制痕迹保留,手写签名,电子印章,版本控制等办公自动化系统必备的功能。是OA系统开发的最佳选择组件!!卓越的性能,低廉的价格,简洁高效的编程接口,让您以最低的开发成本,轻松创建极具特色的办公自动化解决方案!3.0版本新增:新增了文档电子签名【数字签名】的功能。同时简化了一些常用功能的函数和方法。NTKO OFFICE文档控件3.0版本的数字签名功能基于国际标准开发,同时符合国家即将实施生效的《电子签名法》。使用电子签名【数字签名】,可以验证对文档内容,格式等的任何改动。同时支持联合签名,证书吊销列表等功能。另外,NTKO OFFICE文档控件3.0版本还支持数字签名的信任程度显示。http://www.ntko.com --联机演示,OA系统开发的最佳选择组件!详细功能列表(带★为特色功能) ★ 所见即所得的同时支持Word和Excel的全文批注,全屏批注,圈阅批注。并可定位全屏批注及印章。★ 全部功能基于标准协议而非自定义协议。★ 和其他厂家宣称的不同,我们真正是采用RFC标准协议而非任何自定义协议。无需安装后台组件。不存在技术风险。选择我们就是选择标准。★ 支持强制痕迹保留 可以通过对控件编程,让用户只能在痕迹保留状态下工作;强制用户保留一切编辑痕迹。支持不同痕迹分色显示。并且可以通过编程获取一切痕迹信息。★ 首创真正支持OFFICE菜单,支持状态栏。★ 更多的印章控制功能。不仅可将印章至于当前位置,更可以按照页面,页边距等方式定位。也可以设置印章至于文字上方还是下方。★ 对标准协议的支持不仅可以减少合作伙伴的技术风险,更可以充分利用已有经验。对原有系统的影响非常小。也不需要预先定义的数据库格式。能够已最快的速度和现有系统融合。★ 广泛的操作系统,Web服务器和编程语言支持 后台支持Windows,Linux,Unix等各种操作系统;支持IIS,Domino,Websphere,Apache等所有后台服务器类型和JSP,ASP,PHP,PERL等编程语言。★ 采用我们独创的“智能提交”技术,基于国际标准提交数据而非自定义协议,让您在提交编辑文档的同时,提交表单的其它数据,以及表单中其它的文件上传。这可以让您更加快速的集成现有的应用程序,或者创建新的应用程序,并充分利用已有经验。★ 支持所有的Office菜单 完全符合用户习惯,用户操作更加轻松,尤其是复杂的表格操作,和在Office中操作完全一致,大大节约开发成本;而且菜单项目可以通过javascript来控制允许或者禁止。 ★ 支持发布为HTML 发布为HTML的功能,可以让您将在线编辑的文档(WORD,EXCEL)以HTML的方式发布到WEB服务器。让没有安装控件的用户也能够方便的查看文档。 ★ 支持将HTML及其相关文件直接发布到DOMINO文档可以将HTML文件及其相关文件直接作为附件发布到DOMINO的文档中。 ★ 支持手写签名和加密的电子印章 支持使用我们的工具制作加密的电子印章,可将印章放入U盘等硬件设备。高强度的单向加密算法保证只有拥有正确的口令才能够恢复出印章的数据。 ★ 无需后台配置,即可支持Lotus Domino 可与Lotus Domino服务器天然集成。Domino服务器无需安装Java,或其它任何组件。降低系统部署的难度。同时能够将已有的复杂应用迅速转换到使用控件的应用。降低开发成本,节约开发时间。 ★ 基于标准协议,无任何自定义数据格式,通用性好 基于标准协议的开发,使得合作伙伴无须担心技术的进步带来后续维护和开发风险。 ★ 支持从本地或服务器URL获取加密的电子印章支持从本地和服务器将电子印章加入到Office文档。 ★ 支持从服务器URL或本地直接插入透明浮动图片到Word,Excel文档 新增加的AddPicFromURL和AddPicFromLocal函数可以直接从URL或本地插入透明的浮动图片到Office文档 ★ 支持将手工绘制的图片作为透明浮动的图片增加到Word,Excel文档 新增加的DoHandDraw函数可以将您不期而至的灵感迅速转化成图片放到Word或者Excel文档中。 ★ 全面支持Office2000的打印预览 增强了对Office2000的打印预览支持,支持全部Office2000系统的打印预览。另外支持OfficeXP和Office2003中Excel的打印预
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值