本章包括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("以上工作已完成"); }
相关推荐
9. **SWT布局管理**:为了在SWT界面中合理展示Word控件,需要理解并运用SWT的布局管理器,如`FillLayout`、`GridLayout`等。 通过以上步骤,可以将Word控件无缝集成到SWT应用中,提供一个完整的、原生感觉的文档...
根据描述,“可以给Word文档使用jacob控件来添加页脚,然而使用jacob来处理Word文档的页脚自己找了很久都没能找到解决的办法,只有自己动手解决了。”这表明在实际操作中,开发者遇到了一定的难题,在网络上寻找解决...
这个库提供了丰富的功能,例如访问Excel、Word等Office应用程序,或者操作ActiveX控件,从而极大地扩展了Java应用程序在Windows环境下的能力。 **二、jacob.dll的用途** 1. **与Office集成**:Java开发者可以使用...
【Jacob 操作 Office 文档详解】 Jacob 是一个 Java 到微软 COM 接口的桥梁,它使得 Java 应用程序可以调用 COM 对象,从而处理 Microsoft Office 中的文档,如 Word 和 Excel。Jacob 已经成为一个开源项目,可以在...
JACOB通过JNI(Java Native Interface)技术,使得Java可以利用COM对象,从而在没有使用ActiveX控件或服务器的情况下操作Word文档。 在Java中使用JACOB打印Word文档,首先需要安装JACOB库,并将其添加到项目的类...
本教程将详细讲解如何配置Jacob并利用其在Java项目中操作Word文档。 ### 1. 安装与配置Jacob 首先,你需要下载Jacob的JAR文件。在这个案例中,我们有名为`jacob_1.9.rar`的压缩文件,解压后会得到`jacob.jar`。将...
3. **Word对象的创建和操作**:使用Jacob,你可以创建一个`ActiveXComponent`对象来代表Word应用,然后通过该对象调用Word的API。例如,可以使用`doc = new Dispatch("Word.Application")`创建一个Word实例,`doc....
jacob是java对word操作的两种途径之一,由于是调用原有word中的方法原理,所以比较好用,格式也可以尽可能的保留。但由于基于dll控件,所以只能在windows系统中运行。 我的包中有jacob的包和一下说明文档
java调用ocx控件的方法,jacob技术调用ocx控件的步骤、流程,java项目调用具体代码,java调用ocx控件参数传递,jacob调用ocx控件常见bug解决办法,并且附上了java调用word控件的demo代码
以前曾经被称为OLE 和OCX activeX web插件可以用于各种非HTML的工作 比如 对MicrosoftExcel 或 MicrosoftWord 文件做操作 解析JS VB脚本 播放FA有一点可以确定的是在JACOB内部 com jacob activeX是建立在com jacob ...
这使得Java开发者能够利用大量的Windows平台特有的功能和服务,如Excel自动化、Word文档处理、PDF操作等,而无需编写C++或VB代码。 1. Jacob 1.9:这是早期的一个版本,可能包含了基础的COM支持和基本的错误处理...
Jacob是Java和COM之间的一个桥梁,它允许Java应用程序与COM组件进行交互,从而在Java环境中调用Windows API和ActiveX控件。Jacob这个名字是“Java和COM桥接”的首字母缩写。在这个“jacob-1.20jar 官方最新版”中,...
- 与ActiveX控件交互,例如在Web浏览器中操作Flash内容。 - 使用各种Windows API函数,增强应用程序的系统功能。 在实际开发中, Jacob的使用方法大致如下: 1. 引入Jacob库:在Java项目中添加Jacob的jar文件,通常...
在Java中使用Jacob进行操作,首先需要在系统路径下放置Jacob的动态链接库文件(jacob.dll)。对于不同的操作系统版本,可能需要使用对应版本的dll文件,通常将其放置于C:\Windows\System32目录下。然后,引入Jacob的...
以前曾经被称为OLE 和OCX activeX web插件可以用于各种非HTML的工作 比如 对MicrosoftExcel 或 MicrosoftWord 文件做操作 解析JS VB脚本 播放FA有一点可以确定的是在JACOB内部 com jacob activeX是建立在com jacob ...
Jacob的主要应用场景包括但不限于:自动化办公软件操作(如Word、Excel)、数据库访问(通过ADO)、利用ActiveX控件等。其工作原理是通过Java Native Interface (JNI) 实现Java和本地代码的交互,使得Java代码可以...
通过Jacob,Java开发者可以利用在Windows环境中广泛使用的OCX功能,如Excel、Word等Office组件,或其他自定义的OCX控件。 Jacob库的核心是动态链接库(DLL),它作为Java和COM之间的桥梁。在使用Jacob时,需要将...
例如,你可以使用Jacob来操作Excel、Word等Office应用程序,或者与ActiveX控件进行交互。 Jacob的使用步骤大致如下: 1. **添加依赖**:将`jacob.jar`添加到项目的类路径(ClassPath)中。 2. **配置DLL路径**:...
在Windows操作系统上,Qt提供了一种与ActiveX控件交互的方式,这使得开发者能够利用像Word这样的Office应用程序的功能。 首先,Qt的QAxWidget类是实现此功能的关键。QAxWidget是一个通用的窗口部件,可以用来嵌入...
1. **COM互操作性**:Jacob使得Java开发者可以方便地访问和控制任何COM接口,包括ActiveX控件、Office应用(如Excel、Word)、Windows API等。这对于需要在Java应用中集成Windows特定功能的开发者来说尤其有用。 2....