`
xiaofengtoo
  • 浏览: 484681 次
  • 性别: Icon_minigender_1
  • 来自: xiamen
社区版块
存档分类
最新评论

swing 嵌入word

    博客分类:
  • java
阅读更多

由于项目中有用到swing 嵌入word,(需要可以编辑 或不编辑也要可以修改字体大小或修改字体颜色)

在网络上google 一直都没有答案,于是自己有想了以下几种方案:

 

1: 嵌入浏览器,浏览器在嵌入word

2: swing 嵌入swt窗体,swt 可操作word

3: 采用jacob

实践:

1:需要swing 先嵌入浏览器,在浏览器 嵌入 可编辑word。

     最终 卡在 可编辑word 上面

2: 需要架构swing 与swt 的桥梁 ,最终实现,一会贴出代码!!!

3: 可以进行数据交互,但无法进行展示

 

贴出代码:做过笔记,也希望能给有用的朋友!

贴代码:

 

import java.awt.BorderLayout;
import java.awt.Canvas;

import javax.swing.JFrame;
import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.ole.win32.OleClientSite;
import org.eclipse.swt.ole.win32.OleFrame;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class Sword extends JFrame {
	private static final long serialVersionUID = -7511601547609623217L;
	private static OleFrame oleFrame1;
	
	public static void main(String[] args) {
		 final JFrame frame = new JFrame();
		 //关键 使用 canvas 进行交互
	        Canvas canvas = new Canvas();
	        frame.getContentPane().add(canvas,BorderLayout.CENTER);
	        frame.setVisible(true);
	        frame.setSize(800, 600);
	        final Display display = new Display();
	        //利用SWT_AWT.new_Shell 交互
	        final Shell shell = SWT_AWT.new_Shell(display,canvas);
	        
	        shell.setLayout(new FillLayout());
			shell.layout();
			shell.setSize(800, 600);
			initGUI(shell);
			shell.open();
			while (!shell.isDisposed()) {
				if (!display.readAndDispatch())
					display.sleep();
			}
			
	        
	}
	private static void initGUI(Shell shell) {
		try {
			FillLayout thisLayout = new FillLayout(org.eclipse.swt.SWT.HORIZONTAL);
			shell.setLayout(thisLayout);
//			shell.setSize(229, 54);
			{
				oleFrame1 = new OleFrame(shell, SWT.NONE);
				{
					try {
						OleClientSite site = new org.eclipse.swt.ole.win32.OleClientSite(
								oleFrame1, org.eclipse.swt.SWT.NONE,
								"Word.Document");
						site.setBounds(0, 0, 104, 54);
						site.doVerb(org.eclipse.swt.ole.win32.OLE.OLEIVERB_SHOW);
					} catch (org.eclipse.swt.SWTException e) {
						String str = "Create OleClientSite Error"
								+ e.toString();
						System.out.println(str);
						return;
					}
				}
			}
			shell.layout();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
   

 

实现过程中参考以下:

http://niubt.360doc.com/content/081214/10/7635_2120288.html

http://blog.csdn.net/fafey/archive/2006/05/10/721988.aspx

 

以上代码 只做了嵌入动作,存在几个点: 嵌入的word 没有滚动条,运行的时候要等1秒才会出来word,其他慢慢修补了。

 

至少能嵌入进去,不用找jacob jidi 以及ocx  麻烦!!!  总算做出来了 hight 下!!!

 

分享到:
评论
2 楼 yan_gusheng 2012-01-08  
万分感谢~
1 楼 itlangqun 2010-09-03  
赞一个。我也正在探讨这方面的东西,很喜欢,也很想做一个。

相关推荐

Global site tag (gtag.js) - Google Analytics