`
weifly
  • 浏览: 238876 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在eclipse中集成NTKO

阅读更多

最近接到一个任务,需要在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
分享到:
评论
3 楼 di1984HIT 2013-05-22  
不错啊,确实不错。
2 楼 zhaomingzm_23 2010-06-04  
学习一下!
1 楼 kimmking 2010-06-02  
一般用dsoframer

相关推荐

    vue 集成 ntko插件

    在本文中,我们将深入探讨如何在Vue.js项目中集成NTKO插件,以便实现在线浏览Microsoft Office格式(如.doc)的文档功能。Vue.js是一个流行的轻量级前端框架,而NTKO则是处理Office文档的技术解决方案,它提供了...

    ntko_demo.zip_DEMO_NTKO_OFFICE_ntko_在线office查看

    5. **API接口**:压缩包内的"ntko_demo"可能包含开发者接口文档或示例代码,供开发人员了解如何在自己的项目中集成NTKO服务,通过调用这些接口,开发者可以构建自定义的在线文档处理功能。 6. **用户体验**:NTKO...

    vue-ntko-demo.zip

    在这个项目中,开发者可以学习到如何在Vue应用中集成NtKO控件,以实现在Web页面上处理Office文档的功能。以下是一些核心知识点: 1. **Vue组件化开发**:Vue的核心理念是组件化,每个独立的功能或UI部分都可以封装...

    vue_ntko_demo.zip

    在这个“vue_ntko_demo.zip”压缩包中,我们看到的是一个Vue项目,它已经集成了NTKO的技术,为开发者提供了在Vue应用中处理文档的示例。 首先,我们要了解Vue.js的基本概念。Vue通过声明式的模板语法使得HTML、数据...

    NTKO office的Demo(自己写的,还有官方Demo)

    通过这个Demo,我们可以学习到如何在实际项目中集成NTKO Office,理解其API的使用方法和工作流程。 而"ntkoofficedemo(vs2008).zip"则暗示这是一个基于Visual Studio 2008开发的示例项目。这可能是一个完整的...

    NTKO+OFFICE

    NTKO Office是一款在中国广泛应用的Office文档处理控件,它使得开发者能够轻松地在Web或桌面应用程序中集成Office文档的创建、编辑和预览功能。在Java开发环境中,NTKO Office控件提供了丰富的API和示例代码,使得...

    NTKO Office在线编辑痕迹保留Java

    使用NTKO Office文档控件,能够在浏览器窗口中直接编辑Word, Excel等Office文档并保存到Web服务器。实现文档和电子表格的统一管理。同时支持强制痕迹保留,手写签名,电子印章等办公自动化系统必备的功能。是OA系统...

    ntko domino开发实例

    主要使用NTKO OFFICE控件在DOMINO中进行开发实例

    NTKOOFFICE.rar_NTKO OFFice_ntko_officecontrol.ocx_全文检索

    NTKO OfficeControl.ocx控件是基于ActiveX技术,可以直接嵌入到各种应用程序中,如Visual Basic、VC++、VB.NET、C#等,为开发者提供了一种方便的方式来集成NTKO Office的功能。它支持多种Office文档格式,包括DOC、...

    NTKO OFFICE文档控件跨浏览器新版本插件集成入门教程.doc

    NTKO Office文档控件是一款由重庆软航科技有限公司开发的专业工具,主要用于在浏览器环境中实现对Word、Excel等Office文档的在线编辑和保存。这款控件是基于ActiveX技术的,适用于构建OA(办公自动化)系统,它提供...

    NTKO控件简单实例

    在"NTKO Demo"这个压缩包中,可能包含了一个简单的应用程序或者代码示例,演示了如何在实际项目中集成NTKO控件。这个例子可能会涵盖以下几个关键步骤: 1. **安装和注册NTKO控件**:通常,我们需要先将控件安装到...

    ntko文档及实例

    这个示例适合初学者和开发者学习和研究,了解如何在实际项目中利用NTKO控件来提升办公自动化系统的功能和用户体验。通过深入理解并实践这个示例,你可以掌握如何在Web环境中高效地处理Office文档,以及如何将这种...

    ntko使用案例整理

    通过NTKO的API接口,可以轻松集成这些功能到自定义的电子公文系统中。 案例三:数据交换与转换 在跨部门或跨系统的数据交换中,NTKO可以帮助将不同格式的数据(如数据库中的数据)转换成Office文档,方便进行查看和...

    ntko插件web版,插件

    7. **API集成**:开发者可以通过NTKO提供的API接口将插件功能集成到自己的Web应用中,定制化满足特定业务需求。 8. **批量操作**:对于大量文档的处理,NTKO插件支持批量预览、编辑和转换,大大提高了工作效率。 9...

    NTKO Office Online例子

    开发者可以研究此项目,了解如何在ASP.NET环境中配置NTKO Office Online的组件,以及如何在控制器中处理文件上传、下载和编辑的请求,同时在视图中展示文档预览。 NTKO Office Online的核心功能包括: 1. 在线预览...

    NTKO office控件winform实例

    NTKO Office控件是专为开发者设计的一款工具,它允许在Windows Forms(WinForm)应用程序中无缝集成Microsoft Office的功能,从而实现对Office文档的创建、编辑、显示和控制。这个"NTKO office控件winform实例"是一...

Global site tag (gtag.js) - Google Analytics