`

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
分享到:
评论

相关推荐

    jacob给Word文档添加页脚

    可以给Word文档使用jacob控件来添加页脚,然而使用jacob来处理Word文档的页脚自己找了很久都没能找到解决的办法,只有自己动手解决了。 此函数可以自动把页码作为文档的页脚,页脚可以随着页码的值自动改变,页码的...

    jacob,java对word操作的包

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

    jacob技术开发文档

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

    jacob配置以及使用说明

    配置jacob详细教程, 操作word ,解决jdk1.6与jacob版本冲突问题,附上workspace

    jacob1.18源码和jar包

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

    jacob1.18源码+jar包

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

    jacob1.9 jar包和组件jacob.dll

    java进行word操作,可以有效操作word文档。有些项目需要用到此包和控件。

    Java 控制Office 控件

    Java 控制Office 控件是非常麻烦的一件事情。 自从有了JACOB后,事情变得简单多了。 但是要实现Java灵活的控制Word还是一件非常麻烦的事情。 附件介绍几个WORD常见的对象以及一些典型的处理过程,希望对大家有...

    jacob_1.10.zip

    详细说明:JAVA调用Activex控件,利用它可以在JAVA程序中,执行Word和Excel等应用程序的操作-JAVA called ActiveX controls, it can use the Java process, the implementation of Word and Excel applications such ...

    word、txt、png、excel等换PDF

    基于jacob的word、png、excel、txt等类型的文件转换成PDF文件

    javascript下用ActiveXObject控件替换word书签,将内容导出到word后打印第1/2页

    由于时间比较紧,没多的时候去学习研究上述工具包,现在用javascript操作ActiveXObject控件,用替换word模板中的书签方式解决。 前提条件: 1.浏览器安全级别降低,可以使用ActiveXObject控件。 2.装有office word...

    JAVA 深度控制 WORD

    Java 控制Office 控件是非常麻烦的一件事情。 自从有了JACOB后,事情变得简单多了。 但是要实现Java灵活的控制Word还是一件非常麻烦的事情。

    JAVA 深度控制WORD带完整样例

    Java 控制Office 控件是非常麻烦的一件事情。自从有了JACOB后,事情变得简单多了。但是要实现Java灵活的控制Word还是一件非常麻烦的事情。

    SOAOFFICE - 微软 OFFICE 中间件

    9. 使用COM服务器自动化技术调用Word/Excel经常产生死进程或系统不稳定的; 10.Web系统中调用Word/Excel的页面有大量并发用户访问的; 11.使用jacob、jxl、apache poi的; 12.需要在Web中调用Word/Excel,并且追求...

    pageoffice工具包

    对于读写Office文档问题,有用服务器自动化技术(ASP.NET引入Office类型库,Java用Jacob库)读写Word、Excel的,代码复杂、运行稳定性差,并且服务器只能采用Windows平台;有用POI库的,代码复杂、只能读写格式简单...

    java开源包9

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    JAVA上百实例源码以及开源项目源代码

    9个目标文件 内容索引:JAVA源码,综合应用,目录监视  用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源...

    JAVA上百实例源码以及开源项目

    9个目标文件 内容索引:JAVA源码,综合应用,目录监视  用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源...

    java开源包1

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

Global site tag (gtag.js) - Google Analytics