`

9、jacob操作word控件

    博客分类:
  • java
 
阅读更多

本章包括jacob基本类的学习和jacob对office的组件操作方法封装,方便以后使用;

COM(Component Object Model组对象模型) 提供了一种与其他语言的互操作方式,叫做自动化(Automation)。现有的 Java COM 互操作的解决方案有很多种,由于设计目的的不同,在性能、易用性等方面都有很大的区别。JACOB 开源项目提供的是一个 JVM 独立的自动化服务器实现,其核心是基于 JNI 技术实现的 Variant, Dispatch 等接口,设计参考了 Microsoft VJ++ 内置的通用自动化服务器,但是 Microsoft 的实现仅仅支持自身的 JVM。通过 JACOB,您可以方便地在 Java 语言中进行晚期绑定方式的调用。

参考:http://www.soft6.com/tech/13/135038.html

 

java  connection  Bridge;下载jacob.jar ,对应(86/64)的dll文件放在c:/windows/system32下;也可以放在%Java_Home%jre/bin下

1.ActiveXComponent类;

public class ActiveXComponent extends Dispatch

 这个对象与Dispatch.get()方法有关,ActiveXComponent ax = new ActiveXComponent("a1");//构建ActiveX组件实例;

组件名称                                                                               a1的值

InternetExplorer.Application InternetExplorer
Excel.Application Excel
Word.Application Word
Powerpoint.Application Powerpoint
ScriptControl vb/java Script
WMPlayer.OCX windows media Player
Outlook.Application Outlook
Visio.Application Visio
DAO.PrivateDBEngine.35 DAO
MultiFace.Face MultiFace

 2、Dispatch类;

 

public class Dispatch extends JacobObject {
       public static Variant get(Dispatch dispatchTarget, String name) {
public static Variant get(Dispatch dispatchTarget, int dispid) {
public static native Variant invokev(Dispatch dispatchTarget, String name,int dispID, int lcid, int wFlags, Variant[] vArg, int[] uArgErr);
重要的两个类com.jacob.com.Dispatch和com.jacob.com.Variant继承基础类com.jacob.com.JacobObject。(com.jacob.com.Dispatch;提供了调度MS(Microsoft) windows系统API,比如进程的管理。com.jacob.com.Variant; 里面数据类型的转换的方法,Variant类本身是JACOB的最最基本的数据类,他可以被转换成任何的类,使用toDispatch();可以将Variant转化成Dispatch对象。
COM(Component Object Model组对象模型)线程管理:com.jacob.com.ComThread

 

 activeX是由微软公司推出的用于Internet的技术,以前曾经被称为OLE 和OCX,activeX web插件可以用于各种非HTML的工作,比如,对MicrosoftExcel 或 MicrosoftWord 文件做操作、解析JS,VB脚本、播放FALSH、调用Microsoft MediaPlayer等。

 

2、Libarary

package org.Smart;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

/*
 Jacob 是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带
  的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。
 Jacob是一个开源软件,它的官方站点是:http://danadler.com/jacob/
 把jacob-x.x-M2-x86.dll拷贝到%JAVA_HOME%\jre\bin目录下, 
 */
public class DOC_Jacob_Tool {			    
		// 表示一个MS组件
		private ActiveXComponent MSword = null;
		// 表示要进行处理的(word)文档,指向封装后的MS数据结构
		private Dispatch doc = null;
		// 表示文档集合
		private Dispatch documents = null;
		public DOC_Jacob_Tool() {
	    	if (MSword == null) {
	    		MSword = new ActiveXComponent("Word.Application");
			}
	    }
		// 保存文档
		public void save() {
			Dispatch.call(doc, "Save");
		}
		//存为新docx文档,并可以指定保存路径filename="e:/jsL/2014.docx"
		public void saveFileAs(String filename) {
			Dispatch.call(doc, "SaveAs", filename);
		}
		public void closeDocument() {
			if (doc != null) {  
				Dispatch.call(doc, "Close", new Variant(0));  //0不保存修改 -1 保存修改 -2 提示是否保存修改 
				doc = null;
			}
		}
		public void closeWord() {
			Dispatch.call(MSword, "Quit");
			MSword= null;
			doc = null;
		}
		// 设置是否在前台打开 word 程序 ,
		public void setVisible(boolean visible) {
			MSword.setProperty("Visible", new Variant(visible));
		}
		//创建新文档(在"库\文档"目录中  创建一个空白文档并打开)
		public void createNewDoc(){
			setVisible(true);
			documents=Dispatch.get(MSword, "Documents").toDispatch();//documents表示word的所有文档窗口,(word是多文档应用程序)
			doc=Dispatch.call(documents, "Add").toDispatch();   // 使用Add命令创建一个新文档,用Open命令可以打开一个现有文档
		}
		//打开一个存在的文档
		public void openDoc(String docPath) {
			setVisible(true);
			documents = Dispatch.get(MSword, "Documents").toDispatch();
			doc = Dispatch.call(documents, "Open", docPath,new Variant(true),new Variant(false)).toDispatch();  //编码转换,是否只读
		}
		/*
		 在指定目录创建新文档
		 */
		//向指定文档插入图片
		public void insertPic(String docPath, String picPath) {
			documents = Dispatch.get(MSword, "Documents").toDispatch();
			doc = Dispatch.call(documents, "Open", docPath,new Variant(true),new Variant(false)).toDispatch();  //编码转换,是否只读
			Dispatch selection = Dispatch.get(MSword, "Selection").toDispatch();
			Dispatch image = Dispatch.get(selection, "InLineShapes").toDispatch();
			Dispatch.call(image, "AddPicture", picPath);//光标处于开头,图片在最前方插入
			save();
			closeDocument();
			closeWord();
		}
		//向指定文档添加字符串
		public void insertString(String docPath, String words){
//			setVisible(true);
			documents = Dispatch.get(MSword, "Documents").toDispatch();
			doc = Dispatch.call(documents, "Open", docPath,new Variant(true),new Variant(false)).toDispatch();  //编码转换,是否只读
			Dispatch wordContent = Dispatch.get(doc, "Content").toDispatch(); // 取得word文件的内容
			Dispatch.call(wordContent, "InsertAfter", words);  //光标处插入一条字符串
			save();
			closeDocument();
			closeWord();
		}
				 		
}

 3、测试

	public static void main(String[] args) throws FileNotFoundException, IOException, InvalidFormatException {
		ComThread.InitSTA();// 初始化com的线程,非常重要!!使用结束后要调用 realease方法
	//	new DOC_Jacob_Tool().createNewDoc();
        //      new DOC_Jacob_Tool().openDoc("E:/jsL/2007.docx");
	//	new DOC_Jacob_Tool().insertPic("E:/jsL/2007.docx", "e:/jsL/20130415161705906.jpg");
		new DOC_Jacob_Tool().insertString("E:/jsL/2007.docx", "e:/jsL/20130415161705906.jpg");
		
	        ComThread.Release();//释放com线程。根据jacob的帮助文档,com的线程回收不由java的垃圾回收器处理
		System.out.println("以上工作已完成");
	}

 

  • 大小: 91.1 KB
  • 大小: 67 KB
  • 大小: 83.9 KB
分享到:
评论

相关推荐

    SWT 中嵌入Word 控件应用

    9. **SWT布局管理**:为了在SWT界面中合理展示Word控件,需要理解并运用SWT的布局管理器,如`FillLayout`、`GridLayout`等。 通过以上步骤,可以将Word控件无缝集成到SWT应用中,提供一个完整的、原生感觉的文档...

    jacob给Word文档添加页脚

    根据描述,“可以给Word文档使用jacob控件来添加页脚,然而使用jacob来处理Word文档的页脚自己找了很久都没能找到解决的办法,只有自己动手解决了。”这表明在实际操作中,开发者遇到了一定的难题,在网络上寻找解决...

    jacob.dll控件下载

    这个库提供了丰富的功能,例如访问Excel、Word等Office应用程序,或者操作ActiveX控件,从而极大地扩展了Java应用程序在Windows环境下的能力。 **二、jacob.dll的用途** 1. **与Office集成**:Java开发者可以使用...

    jacob操作office文档大全

    【Jacob 操作 Office 文档详解】 Jacob 是一个 Java 到微软 COM 接口的桥梁,它使得 Java 应用程序可以调用 COM 对象,从而处理 Microsoft Office 中的文档,如 Word 和 Excel。Jacob 已经成为一个开源项目,可以在...

    java打印word的jacob

    JACOB通过JNI(Java Native Interface)技术,使得Java可以利用COM对象,从而在没有使用ActiveX控件或服务器的情况下操作Word文档。 在Java中使用JACOB打印Word文档,首先需要安装JACOB库,并将其添加到项目的类...

    jacob配置以及使用说明

    本教程将详细讲解如何配置Jacob并利用其在Java项目中操作Word文档。 ### 1. 安装与配置Jacob 首先,你需要下载Jacob的JAR文件。在这个案例中,我们有名为`jacob_1.9.rar`的压缩文件,解压后会得到`jacob.jar`。将...

    Jacob根据模版动态生成word文档

    3. **Word对象的创建和操作**:使用Jacob,你可以创建一个`ActiveXComponent`对象来代表Word应用,然后通过该对象调用Word的API。例如,可以使用`doc = new Dispatch("Word.Application")`创建一个Word实例,`doc....

    jacob,java对word操作的包

    jacob是java对word操作的两种途径之一,由于是调用原有word中的方法原理,所以比较好用,格式也可以尽可能的保留。但由于基于dll控件,所以只能在windows系统中运行。 我的包中有jacob的包和一下说明文档

    jacob技术开发文档

    java调用ocx控件的方法,jacob技术调用ocx控件的步骤、流程,java项目调用具体代码,java调用ocx控件参数传递,jacob调用ocx控件常见bug解决办法,并且附上了java调用word控件的demo代码

    jacob1.18源码和jar包

    以前曾经被称为OLE 和OCX activeX web插件可以用于各种非HTML的工作 比如 对MicrosoftExcel 或 MicrosoftWord 文件做操作 解析JS VB脚本 播放FA有一点可以确定的是在JACOB内部 com jacob activeX是建立在com jacob ...

    jacob1.9 jacob1.12 jacob1.14

    这使得Java开发者能够利用大量的Windows平台特有的功能和服务,如Excel自动化、Word文档处理、PDF操作等,而无需编写C++或VB代码。 1. Jacob 1.9:这是早期的一个版本,可能包含了基础的COM支持和基本的错误处理...

    jacob-1.20jar 官方最新版

    Jacob是Java和COM之间的一个桥梁,它允许Java应用程序与COM组件进行交互,从而在Java环境中调用Windows API和ActiveX控件。Jacob这个名字是“Java和COM桥接”的首字母缩写。在这个“jacob-1.20jar 官方最新版”中,...

    jacob-1.14.3-x64

    - 与ActiveX控件交互,例如在Web浏览器中操作Flash内容。 - 使用各种Windows API函数,增强应用程序的系统功能。 在实际开发中, Jacob的使用方法大致如下: 1. 引入Jacob库:在Java项目中添加Jacob的jar文件,通常...

    jacob操作详解

    在Java中使用Jacob进行操作,首先需要在系统路径下放置Jacob的动态链接库文件(jacob.dll)。对于不同的操作系统版本,可能需要使用对应版本的dll文件,通常将其放置于C:\Windows\System32目录下。然后,引入Jacob的...

    jacob1.18源码+jar包

    以前曾经被称为OLE 和OCX activeX web插件可以用于各种非HTML的工作 比如 对MicrosoftExcel 或 MicrosoftWord 文件做操作 解析JS VB脚本 播放FA有一点可以确定的是在JACOB内部 com jacob activeX是建立在com jacob ...

    jacob1.18,jacob1.19.zip两个版本

    Jacob的主要应用场景包括但不限于:自动化办公软件操作(如Word、Excel)、数据库访问(通过ADO)、利用ActiveX控件等。其工作原理是通过Java Native Interface (JNI) 实现Java和本地代码的交互,使得Java代码可以...

    jacob-1.20 jacob-1.19 jacob-1.17

    通过Jacob,Java开发者可以利用在Windows环境中广泛使用的OCX功能,如Excel、Word等Office组件,或其他自定义的OCX控件。 Jacob库的核心是动态链接库(DLL),它作为Java和COM之间的桥梁。在使用Jacob时,需要将...

    jacob(jacob.dll,jacob.jar)

    例如,你可以使用Jacob来操作Excel、Word等Office应用程序,或者与ActiveX控件进行交互。 Jacob的使用步骤大致如下: 1. **添加依赖**:将`jacob.jar`添加到项目的类路径(ClassPath)中。 2. **配置DLL路径**:...

    Qt调用微软word

    在Windows操作系统上,Qt提供了一种与ActiveX控件交互的方式,这使得开发者能够利用像Word这样的Office应用程序的功能。 首先,Qt的QAxWidget类是实现此功能的关键。QAxWidget是一个通用的窗口部件,可以用来嵌入...

    jacob(包含jacob-1.19-x64.dll和jacob-1.19-x86.dll)

    1. **COM互操作性**:Jacob使得Java开发者可以方便地访问和控制任何COM接口,包括ActiveX控件、Office应用(如Excel、Word)、Windows API等。这对于需要在Java应用中集成Windows特定功能的开发者来说尤其有用。 2....

Global site tag (gtag.js) - Google Analytics