`

jacob学习总结

    博客分类:
  • java
 
阅读更多

JACOB 就是 JAVA-COM Bridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的。

/**
 * 将jacob.dll放入JDK的bin目录下
 * 把jacob.jar放入项目的WEB-INF\lib目录下
 */
public class JacobHelper {
	private ActiveXComponent word;
	private Dispatch documents;
	private Dispatch doc;
	private Dispatch selection;
	
	private ActiveXComponent excel;
	private Dispatch workbooks;
	private Dispatch workbook;
	
	private void wordInit(){
		if(word==null){
			//创建一个word对象
			word = new ActiveXComponent("Word.Application");
			word.setProperty("Visible", new Variant(false)); //word不可见
			word.setProperty("AutomationSecurity", new Variant(3)); //禁用宏
		}
		
		if(documents==null){
			//获取文挡属性
			documents = word.getProperty("Documents").toDispatch();
		}
	}
	
	private void wordDestory(){
		try{
			if(doc!=null){
				//Dispatch.call(doc, "Close", new Variant(true));
				Dispatch.invoke(doc, "Close", Dispatch.Method, new Object[]{new Variant(true)}, new int[1]);
				doc = null;
			}
			if(word!=null){
				word.invoke("Quit", new Variant[]{}); 
				word.safeRelease();
				word = null;
				documents = null;
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
	
	/**
	 * 合并Word文档
	 */
	public boolean wordUnite(String[] filePath, String outputPath){
		if(filePath==null || filePath.length==0) return false;
		
		boolean successful = false;
		try{
			wordInit();
			
			//添加一个新文挡
			doc = Dispatch.call(documents, "Add").toDispatch(); 
			
			selection = word.getProperty("Selection").toDispatch();
			
			for(int i=0;i<filePath.length;i++){
				Dispatch.call(selection, "insertFile", filePath[i]);
				if(i<filePath.length-1){
					Dispatch.call(selection, "TypeParagraph"); //换行
				}
			}
			
			//文件另存为
			Dispatch.call(doc, "SaveAs", outputPath); 

			successful = true;
			
		}catch(Exception ex){
			successful = false;
			ex.printStackTrace();
		}finally{
			wordDestory();
		}
		
		return successful;
	}
	
	/**
	 * Word转Html
	 */
	public boolean word2html(String wordFilePath, String htmlFilePath){
		boolean successful = false;
		
		try{
			wordInit();
			
			//对象数组第三个表示是否以只读方式打开文件
			doc = Dispatch.invoke(documents, "Open", Dispatch.Method, 
					new Object[]{wordFilePath, new Variant(false), new Variant(true)}, new int[1]).toDispatch();
			
			//另存为
			Dispatch.invoke(doc, "SaveAs", Dispatch.Method,
					new Object[]{htmlFilePath, new Variant(8)}, new int[1]); //html-new Variant(8) txt-new Variant(2)

			successful = true;
			
		}catch(Exception ex){
			successful = false;
			ex.printStackTrace();
		}finally{
			wordDestory();
		}
		
		return successful;
	}
	
	private void excelInit(){
		if(excel==null){
			ComThread.InitSTA();
			excel = new ActiveXComponent("Excel.Application");
			excel.setProperty("Visible", new Variant(false));
		}
	}
	
	private void excelDestory(){
		try{
			if(workbook!=null){
				Dispatch.call(workbook, "Close", new Variant(true)); 
				workbook = null;
			}
			if(excel!=null){
				excel.invoke("Quit", new Variant[]{}); 
				ComThread.Release();
				excel = null;
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
	
	public boolean excel2html(String excelFilePath, String htmlFilePath){
		boolean successful = false;
		
		try{
			excelInit();
			
			//先删除旧文件
			File file = new File(htmlFilePath);
			if(file.exists() && file.canRead()){
				file.delete();
			}
			
			workbooks = excel.getProperty("Workbooks").toDispatch(); 
			
			workbook = Dispatch.invoke(workbooks, "Open", Dispatch.Method, 
					new Object[]{excelFilePath, new Variant(false), new Variant(true)}, new int[1]).toDispatch(); //以只读方式打开
			
			Dispatch.invoke(workbook, "SaveAs", Dispatch.Method, new Object[]{htmlFilePath, new Variant(44)}, new int[1]); 
			
			successful = true;
			
		}catch(Exception ex){
			successful = false;
			ex.printStackTrace();
		}finally{
			excelDestory();
		}
		
		return successful;
	}
}
//设置字体
Dispatch font = Dispatch.get(selection, "Font").toDispatch();
Dispatch.put(font, "Size", "10");
Dispatch.put(font, "Name", new Variant("宋体"));
//设置段落格式
Dispatch align = Dispatch.get(selection, "ParagraphFormat").toDispatch(); 
Dispatch.put(align, "Alignment", "1"); //1:置中 2:靠右 3:靠左
//插入文本字符串
Dispatch.put(selection, "Text", "经理例会重点问题(" + DatetimeUtil.getToday("MMdd") + ")");  
//回车换行
Dispatch.call(selection, "MoveDown"); 
Dispatch.call(selection, "TypeParagraph");
//重新设置文档内容的字体
selection = Dispatch.get(doc, "Content").toDispatch();
font = Dispatch.get(selection, "Font").toDispatch();
Dispatch.put(font, "Size", "10");
Dispatch.put(font, "Name", new Variant("宋体"));
Dispatch.put(font, "Bold", new Variant(false));

 

分享到:
评论

相关推荐

    jacob学习笔记

    ### Jacob 学习笔记 #### 一、Jacob 概述 Jacob,即 Java COM Bridge,是一种用于连接 Java 应用程序与 COM 组件的技术。它允许开发者利用 Java 的跨平台特性,同时能够调用 Windows 平台上丰富的 COM 接口。这种...

    jacob-1_jacob-1.1864_jacob-1.18dll_jacob64_源码.zip

    总结,Jacob库为Java开发者提供了与Windows COM组件交互的能力,尽管存在性能和平台限制,但在许多场景下,它是连接Java与COM世界的重要工具。通过理解其工作原理,我们可以更好地利用这一资源,解决实际项目中的...

    jacob-1.19-x86.dll , jacob-1.19-x64.dll ,jacob.jar

    总结来说,Jacob是Java开发中一个强大的工具,它允许开发者充分利用Windows生态系统的丰富资源,而无需学习新的编程语言或技术。通过`jacob-1.19-x86.dll`和`jacob-1.19-x64.dll`,以及`jacob.jar`,开发者能够实现...

    jacob使用手册

    在实际开发中,Jacob提供了简单的API,使得Java程序员能够以相对较低的学习曲线来掌握COM编程。 **Jacob的安装与配置** 首先,需要下载Jacob的jar文件和对应的dll动态链接库。dll文件通常需要放在系统的PATH环境...

    jacob-1.18-x64.dll文件

    总结起来,jacob-1.18-x64.dll是Java与Windows COM组件通信的关键,通过Jacob库,Java开发者得以充分利用Windows平台的资源,实现更丰富的功能。尽管存在一定的性能挑战和学习曲线,但其带来的便利性和广泛的应用...

    jacob-1.17-M2-x64.dll,jacob-1.17-M2-x32.dll

    总结来说,这个压缩包提供了Jacob的1.17-M2版本,包含适用于不同体系结构的DLL文件以及相关文档,是Java开发者在Windows环境下利用COM组件进行开发的重要工具。了解和掌握Jacob的使用方法,可以帮助开发人员提高工作...

    jacob-1.16-M1 官方最新版

    总结,Jacob-1.16-M1是Java开发者在Windows环境中利用COM组件的得力工具,它简化了Java与COM之间的交互,提高了开发效率。了解并熟练掌握Jacob的使用,对于提升Java应用的Windows兼容性和功能性具有重要意义。

    jacob-1.18.zip

    总结起来,Jacob-1.18是一个强大的工具,使得Java开发者能够利用Windows的COM组件扩展其应用程序的功能,无需学习新的编程语言或技术。通过理解并正确使用jacob-1.18-x64.dll、jacob-1.18-x86.dll和jacob-1.18.jar,...

    jacob-1.18-M2.zip

    总结起来,Jacob是Java开发者与Windows COM世界沟通的重要桥梁。通过深入理解Jacob-1.18-M2中的内容,开发者可以有效地利用这一工具解决跨平台交互的问题,提升Java应用程序的功能和灵活性。在实际开发中,结合示例...

    jacob与jdk1.6成功案例

    通过这个示例,我们可以学习到如何在Java代码中引入和使用Jacob,以及如何组织代码来调用COM接口。 在资源包jacob_1.11.zip中,包含了Jacob库的完整版本1.11。这个库不仅包含了Jacob的Java类库,还可能包含必要的...

    jacob-1.18.rar

    总结,Jacob-1.18是一个强大的工具,能够让Java开发者充分利用Windows生态中的COM组件。通过理解它的核心功能、文件结构以及如何使用,你可以在Java项目中实现与Windows系统的深度集成。不过,需要注意的是,Jacob只...

    (转)Java jacob调用打印机打印word文档

    开发者可以通过阅读源码来学习和调试相关功能,工具在这里可能指的是Jacob库和相关的IDE,如Eclipse或IntelliJ IDEA,它们可以帮助开发者更方便地管理项目和调试代码。 总结起来,Java Jacob库为Java开发者提供了一...

    超级实用jacob-1.19.zip

    总结来说,Jacob-1.19是一个强大的工具,为Java开发者打开了通往Windows COM世界的大门,让Java应用程序能够充分利用Windows系统的丰富功能。正确理解和使用Jacob,可以帮助开发者提升工作效率,解决特定环境下的...

    jacob-1.14.3

    总结,Jacob-1.14.3是一个强大的工具,让Java开发者能够充分利用Windows平台上的COM组件资源。无论是自动化办公任务、集成第三方软件,还是开发与Windows环境紧密交互的应用,Jacob都是一个值得信赖的选择。

    jacob_1.9.rar java调用activex

    Java调用ActiveX技术主要涉及的是Java与COM(Component Object Model)组件的交互,而Jacob库正是实现这一功能的关键工具。Jacob全称为"Java ...提供的文档和资源对于学习和使用Jacob进行实际开发具有很高的价值。

    jacob以目录和段落分析读取Word文档(自己写的)

    在IT行业中,处理和操作Microsoft Word文档是一项常见的任务。在这个场景下,我们关注的是使用Jacob库来实现对Word文档的...通过深入学习和应用Jacob,开发者可以构建强大的Word文档自动化处理工具,适应各种业务需求。

    jacob-1.19(包含dll).zip

    《Jacob-1.19与Java的交互:深入理解DLL集成》 Jacob,全称Java-COM Bridge,是一个Java库,允许Java程序直接调用Windows ...通过学习和实践,开发者可以充分利用Jacob实现各种高级功能,提升Java应用的效率和灵活性。

    jacob 操作word完整代码实例,绝对实用

    总结一下,Jacob库为Java开发者提供了一种有效的方式来操作Microsoft Word,通过COM接口实现与Word的交互。这个“Jacob操作Word完整代码实例”是学习和实践这一技术的好材料,它涵盖了从打开文档、编辑内容到保存和...

    jacob源码加示例文档

    总结,JACOB作为一个连接Java与COM的强大工具,为开发者提供了灵活的接口,使得在Java平台上操作Windows应用程序成为可能。通过深入学习其源码和实践应用,开发者可以更好地理解和利用这一技术,提升工作效率,解决...

Global site tag (gtag.js) - Google Analytics