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

SWT 中嵌入Word 控件应用

阅读更多

利用WebOffice进行Word控件的应用,源码如下:

效果图如下:

SWT 中Word 应用

package com.edocbase.desktop.word;

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;

import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.ole.win32.OLE;
import org.eclipse.swt.ole.win32.OleAutomation;
import org.eclipse.swt.ole.win32.OleControlSite;
import org.eclipse.swt.ole.win32.OleFrame;
import org.eclipse.swt.ole.win32.Variant;
import org.eclipse.swt.widgets.Composite;

/**
 * @author lifei114@gmail.com,lifei114@126.com
 * 嵌入 Word 的容器,更多的API正在开发中。
 */
public class WordComposite extends Composite {
	private static String progID = "WEBOFFICE.WebOfficeCtrl.1";
	OleControlSite site = null;
	OleAutomation auto = null;
	private OleFrame frame;

	/**
	 * Create the composite.
	 * 
	 * @param parent
	 * @param style
	 */
	public WordComposite(Composite parent, int style) {
		super(parent, style | SWT.BORDER);
		parent.addDisposeListener(new DisposeListener() {

			@Override
			public void widgetDisposed(DisposeEvent e) {
				dispose();
			}
		});
		setLayout(new FillLayout());
		init();
	}

	private void init() {
		frame = new OleFrame(this, SWT.NONE);
		try {
			site = new OLESite(frame, SWT.NONE, progID);
			// site.doVerb(OLE.OLEIVERB_SHOW);
			site.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
			auto = new OleAutomation(site);
			showWebOfficeBtn();
		} catch (SWTException ex) {
			try {
				System.out.println("注册Office控件。");
				installWebOffice();
				site = new OLESite(frame, SWT.NONE, progID);
				site.doVerb(OLE.OLEIVERB_SHOW);
				site.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
				auto = new OleAutomation(site);
				showWebOfficeBtn();				
			} catch (Exception e) {
				System.out.println("Unable to open type library for " + progID);
				e.printStackTrace();
			}
			return;
		}
	}
	private void installWebOffice() throws Exception{
		StringBuffer cmd = new StringBuffer();
		File ocxfile = new File("activex\\WebOffice.ocx");
		cmd.append("regsvr32 /s ").append(ocxfile.getAbsolutePath());
		String cmdStr = cmd.toString();
		Process process = Runtime.getRuntime().exec(cmdStr);
		process.waitFor();
	}
	@Override
	protected void checkSubclass() {
	}

	public void open(File file) {
		String filePath = file.getAbsolutePath();
		int[] methodIDs = null;
		methodIDs = auto.getIDsOfNames(new String[] { "LoadOriginalFile" });

		auto.invoke(methodIDs[0], new Variant[] { new Variant(filePath),new Variant("doc") });
		//hideToolBarAll();
		
	}
	public void printPreview(){
		int[] methodIDs = null;
		methodIDs = auto.getIDsOfNames(new String[] { "PrintPreview" });

		auto.invoke(methodIDs[0]);
	}
	public void print(){
		
		int[] methodIDs = null;
		methodIDs = auto.getIDsOfNames(new String[] { "PrintOut" });

		auto.invoke(methodIDs[0]);
	}
	public void setFieldValue(String key,String value){
		int[] methodIDs = null;
		methodIDs = auto.getIDsOfNames(new String[] { "SetFieldValue" });
		Variant[] vars = new Variant[]{new Variant(key),new Variant(value),new Variant("")};
		auto.invoke(methodIDs[0],vars);
	}
	public void updateFields(HashMap<String, String> values){
		Iterator<String> keyIterator = values.keySet().iterator();
		while (keyIterator.hasNext()){
			String key = keyIterator.next();
			String value = values.get(key);
			setFieldValue(key, value);
		}
	}
	/**
	 * 隐藏 WebOffice 所有工具栏
	 */
	public void hideToolBarAll(){
		int ids[] = auto.getIDsOfNames(new String[] { "ShowToolBar" });
		auto.setProperty(ids[0], new Variant[] { new Variant(false) });
	}
	
	public void showWebOfficeBtn(){
		int ids[] = auto.getIDsOfNames(new String[] { "HideMenuItem" });
		//auto.invoke(ids[0],new Variant[]{new Variant(0x04 + 0x10 + 0x20)});
		auto.invoke(ids[0],new Variant[]{new Variant(0x01 + 0x1000 + 0x02)});
	}
	
	@Override
	public void dispose() {
		super.dispose();
		auto.dispose();
		site.dispose();
		frame.dispose();
	}

}
分享到:
评论

相关推荐

    在SWING、SWT中嵌入浏览器

    这篇博客文章“在SWING、SWT中嵌入浏览器”就探讨了如何在Java应用中实现这一功能。 首先,SWING是Java Foundation Classes (JFC)的一部分,提供了丰富的组件和布局管理器来构建复杂的用户界面。尽管SWING本身并不...

    一个SWT日期时间选择控件类

    在给定的资源中,“SWT日期时间选择控件类”是一个专门为SWT环境设计的控件,使得开发者能够轻松地在Java应用中集成日期和时间选择功能,并且支持拖放操作,提高了用户体验。 这个控件类可能是基于SWT的`Combo`或`...

    SWT日期时间选择控件.rar

    在实际应用中,你可以通过实例化这个自定义控件,并将其添加到SWT的Composite或Shell中,然后设置其属性,如初始值、是否只读等。最后,通过添加Listener或者实现Listener接口的方法,处理用户的操作事件。 总之,...

    java swt自定义控件

    本文将深入探讨在Java中使用SWT进行自定义控件的开发。 ### 1. SWT概述 SWT是一个开源的Java库,它的目标是提供与原生GUI库(如Windows的Win32 API,Mac OS的Cocoa,Linux的GTK+)类似的性能和功能。SWT使用JNI...

    SWT中bean与控件的数据绑定

    标题中的"SWT中bean与控件的数据绑定"指的是在SWT应用中如何实现数据模型(bean)与UI组件之间双向同步的过程。在传统的编程方式中,我们可能需要手动编写大量的事件监听器来处理UI组件的变化并更新数据模型,或者...

    使Excel嵌入到SWT窗口中

    OleFrame是一个Composite,用于放置OLE控件,而OleClientSite提供了一个场所,用于把OLE对象嵌入到容器中。OleClientSite还提供了一个doVerb方法,用于显示OLE对象。 知识点五:OLE对象的Id 在本例中,我们使用...

    SWT/JFace 自定义日历控件(可绑定注册到其他控件)

    SWT自带的DateTime控件属实不好用,而且无法绑定到其他控件上。因此自己写一个日历控件用着方便,功能大致如下: 1、日历控件可自定义设置常见的几种日期格式; 2、可以绑定注册到其他控件如:文本框、按钮、标签上...

    SWT基础代码涵盖其所有控件

    本教程集合了SWT中的所有控件及其使用代码,旨在帮助开发者快速理解和应用这些控件。 1. SWT控件基础 SWT提供了丰富的控件集,包括按钮(Button)、文本框(Text)、列表(List)、表格(Table)、树(Tree)、...

    SWT/JFace 控件实例

    SWT(Standard Widget Toolkit)和JFace是Java编程中用于构建图形用户界面(GUI)的两个重要库。它们由Eclipse基金会维护,主要用于开发Eclipse插件和其他Java应用程序。SWT是底层的GUI库,提供了与操作系统直接交互...

    Eclipse SWT JFace核心应用_pdf_含标签_目录

    《Eclipse SWT/Jface核心应用》...第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的应用。第3篇介绍了关于SWT的高级应用。第4篇介绍了JFace框架的知识及其应用。第5篇介绍了最新的RCP应用程序的开发。

    swt窗体嵌入

    swt嵌入视频播放器的,想要看着方面的内容的可以来看看

    swing 嵌入word

    综上所述,通过结合Swing和SWT,我们可以实现Swing应用中嵌入Word文档的功能,这在需要在Java GUI中展示、编辑或交互Word文档的场景下非常有用。在实际开发中,务必根据具体需求和环境调整上述代码,并处理好可能...

    swt教程 有关SWT怎么应用

    在本文中,我们将深入探讨SWT(Standard Widget Toolkit)的应用,以及如何在Java应用程序中使用它。SWT是由IBM公司为Eclipse集成开发环境设计的一种图形用户界面(GUI)工具包,它通过JNI(Java Native Interface)...

    SWT日期控件

    因此,为了在SWT应用中实现日期选择功能,通常会采用第三方库或插件来扩展这一功能,如"SWT 第三方 date picker RCP"。 这个描述提及的是一个专门针对SWT的第三方日期选择器组件,适用于Eclipse Rich Client ...

    SWT中实现shell Canvas Composite等控件的背景透明

    SWT中实现shell Canvas Composite等控件的背景透明

    Draw2D 模拟SWT控件之RadioButton、CheckedBox

    本文将深入探讨如何使用Draw2D模拟SWT中的RadioButton和CheckedBox控件,以及这些控件在实际应用中的作用和实现方式。 首先,RadioButton和CheckedBox是GUI中的两种常见选择控件。RadioButton通常用于提供一组互斥...

    SWT 自定义控件

    本文将围绕如何在SWT框架中创建自定义颜色列表控件这一实例,详细介绍自定义控件开发中所需掌握的核心技术点。 ### 一、自定义控件绘制 **概念理解**: - **绘制机制**:在SWT中,控件的绘制主要是通过监听`...

    SWT 时间控件及执行bat文件

    在“SWT 时间控件及执行bat文件”这个例子中,我们将探讨如何使用SWT来创建时间选择控件,以及如何利用Java的TimerTask类进行定时任务,同时还会学习如何通过批处理(bat)文件运行Java应用程序。 1. SWT时间控件:...

    SWT控件

    SWT(Standard Widget Toolkit)是由Eclipse基金会开发并维护的一套用于构建图形用户界面(GUI)的开源库,它是Java语言中的一个GUI工具包,主要面向那些希望创建高性能、原生外观的应用程序的开发者。与Java Swing...

Global site tag (gtag.js) - Google Analytics