`

Java操作dll等active控件的使用,即jacob包的使用

    博客分类:
  • Java
阅读更多

简要说明:

jacob.dll 放到 C:\WINDOWS\system32 下
jacob.dll 放到 %JAVA_HOME%\bin 下,这个比较关键,决定你项目启动时候是否报错的问题
jacob.jar 放到应用开发项目的 lib里面

我使用的Jacob版本是jacob_1.9

 

以下是我在实际开发中写的一个实现类

package cn.com.ivisions.management;

import java.io.*;
import java.net.URL;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import cn.com.ivisions.dipper2.Dipper;

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

import cn.com.ivisions.management.DocManage;

public class COMBridge 
{
	private static final Log log = LogFactory.getLog(COMBridge.class);
	lugb.util.NamedIndexedHashMap constants = Dipper.getConfigInfo().getConstants();
	 //方正公章服务器地址
	
	private String Founder_Host = constants.get("SEAL_SERVER").toString();

	  //判断CEB是否盖章文件
	  public boolean isCertifiedCEB(String fileurl)
	  {
	  	try
	  	{
		  	String test1=getCEBID(fileurl);
		  	if(test1==null)
		  	{
		  		return false;
		  	}
		  	if(getCEBID(fileurl).equals(getCEBID(fileurl)))
		  	{
		  		return true;
		  	}
		  	else
		  	{
		  		return false;
		  	}
	  	}
	  	catch(Exception e)
	  	{
	  		return false;
	  	}
	  }
	  
	  //得到CEB的UUID
	  public String getCEBID(String fileurl)
	  {
	  	try
	  	{
	  		ActiveXComponent objArchSend = new ActiveXComponent("PrintURLChangeSvr.ChangePrintURL");
	    	Dispatch myCom = (Dispatch) objArchSend.getObject();
	    	String returnString = Dispatch.call(myCom, "ChangeURL",fileurl, "http://"+Founder_Host).getString();
	    	//objArchSend.release();
	    	return returnString;
	 	}
	 	catch(Exception e)
	 	{
	 		return "";
	 	}
	  }
	  //生成XML jason
	  public boolean getPrintXml(String strXml,String XmlUrl)
	  {
	  	ActiveXComponent objArchSend = new ActiveXComponent("StampPubCom.StampPubFuncCom");
		Dispatch myCom = (Dispatch) objArchSend.getObject();
	  	try
	  	{ 	
		    Dispatch.call(myCom, "BSTR2File",strXml,XmlUrl).getString();
		//    System.out.println(Dispatch.call(myCom, "GetErrorMessage").getString());
		    //objArchSend.release();
		    
		    return true;
	 	}
	 	catch(Exception e)
	 	{
	 		System.out.println(Dispatch.call(myCom, "GetErrorMessage").getString());
	 		e.printStackTrace();
	 		return false;
	 	}
	  }
	  //上传公文分数XML到公章服务器
	  public boolean uploadCountXml(String XmlUrl)
	  {
	  	ActiveXComponent objArchSend = new ActiveXComponent("LocalSealStamp.ConductFile");
		Dispatch myCom = (Dispatch) objArchSend.getObject();
	  	try
	  	{ 	
		    Dispatch.call(myCom, "HTTPUploadFile",XmlUrl, "http://"+Founder_Host+"/stampserver/extend/interfaces/printlic2db.aspx").getString();
		//    System.out.println(Dispatch.call(myCom, "GetErrorMessage").getString());
		    //objArchSend.release();
		    
		    return true;
	 	}
	 	catch(Exception e)
	 	{
	 		System.out.println(Dispatch.call(myCom, "GetErrorMessage").getString());
	 		e.printStackTrace();
	 		return false;
	 	}
	  }
	  //上传XML到OA服务器
	  public boolean uploadFileforXml(String XmlUrl,String serverURL)
	  {
	  	ActiveXComponent objArchSend = new ActiveXComponent("ASPCom.PostRecv");
		Dispatch myCom = (Dispatch) objArchSend.getObject();
	  	try
	  	{ 	
		    Dispatch.call(myCom, "HTTPUploadFile",XmlUrl, serverURL).getString();
		    return true;
	 	}
	 	catch(Exception e)
	 	{
	 		System.out.println(Dispatch.call(myCom, "GetErrorMessage").getString());
	 		e.printStackTrace();
	 		return false;
	 	}
	  }
	  //文件上传到服务器的方法
	  public boolean SendFileEx(String strURL,String strRetFileName)
	  {
	  	try
	  	{
	//	  System.runFinalizersOnExit(true);
	
		    ActiveXComponent objArchSend = new ActiveXComponent("ASPCom.PostRecv");
		    Dispatch myCom = (Dispatch) objArchSend.getObject();
		    Variant vResult = Dispatch.call(myCom, "SendFile",
		                                    new Variant(strURL),
		                                    new Variant(strRetFileName)
											);
	
		    Variant vResult1 = Dispatch.call(myCom, "GetErrorMessage");
	
			int nRes = vResult.getInt();
		    String strError = vResult1.getString();
		    
		    //objArchSend.release();
		    
		//    if(nRes == SysConfig.RET) return true;
		
			if(strError != null && strError.equals("S_OK")) return true;
		    
		    return false;
	 	}
	 	catch(Exception e)
	 	{
	 		
				e.printStackTrace();
		
	 		return false;
	 	}
	  } 
	  //JAVA实现的文化下载 Jason
	  public void downloadFile(String urls,String strRetFileName) throws IOException{
		  URL url=new URL(urls);
		  InputStream in= url.openConnection().getInputStream();
		  File file=new File(strRetFileName);
		  FileOutputStream out=new FileOutputStream(file,true);
		  //计数器
		  int counter=0;
		  //开始读
		  int ch;
		  byte[] buffer=new byte[1024];
		  while((ch=in.read(buffer))!=-1){
		  out.write(buffer,0,ch);
		  counter+=ch;
		  }
		  out.flush();
		  in.close();
		  out.close();

		  }
	
	  //文件下载到本地的方法
	  public boolean HTTPDownloadFile(String strURL,String strRetFileName)
	  {
		  	try
		  	{
		//	  System.runFinalizersOnExit(true);
		
			    ActiveXComponent objArchSend = new ActiveXComponent("ASPCom.PostRecv");
			    Dispatch myCom = (Dispatch) objArchSend.getObject();
			    Variant vResult = Dispatch.call(myCom, "HTTPDownloadFile",
			                                    new Variant(strURL),
			                                    new Variant(strRetFileName)
												);
		
			    Variant vResult1 = Dispatch.call(myCom, "GetErrorMessage");
		
				int nRes = vResult.getInt();
			    String strError = vResult1.getString();
			    
			    //objArchSend.release();
			    
			//    if(nRes == SysConfig.RET) return true;
			
				if(strError != null && strError.equals("S_OK")) return true;
			    
			    return false;
		 	}
		 	catch(Exception e)
		 	{
		 		
					e.printStackTrace();
			
		 		return false;
		 	}
	  }
	  //删除本机的各种临时文件 jason
	  public void deleteTempFile(String fileUrl)
	  {
	  	ActiveXComponent objArchSend = new ActiveXComponent("StampPubCom.StampPubFuncCom");
		Dispatch myCom = (Dispatch) objArchSend.getObject();
	  	try
	  	{ 	
		    Dispatch.call(myCom, "DeleteFile",fileUrl).getString();
	 	}
	 	catch(Exception e)
	 	{
	 		System.out.println(Dispatch.call(myCom, "GetErrorMessage").getString());
	 		e.printStackTrace();
	 	}
	  }
	  public boolean sendXmlToFounder(int docId,String serverPath,String serverProPath){
		  try{
			  COMBridge com=new COMBridge();
			  DocManage docManage=new DocManage();
			  //打印份数
			  String printNum = constants.get("PRINT_NUM").toString();
			  //文档后缀名
			  String sealGwExtend = constants.get("SEAL_GW_EXTEND").toString();
			  //默认下载路径
			  String download_dir = constants.get("DOWNLOAD_DIR").toString();
			  //获得主送和抄送单位
			  String receiveDept = docManage.getReceiveDepts(docId);
			  String printNums = "";
				for(int i=0;i<receiveDept.split(";").length;i++){
					printNums += printNum+";";
				}
				if(printNums.length()>0) printNums = printNums.substring(0,printNums.length()-1);
				
				//获得公文附件是ceb的附件
				String[] attachFile =  docManage.getAttachment(docId,sealGwExtend);
				for(int i=0;i<attachFile.length;i++){
					  String cebfileName=attachFile[i];
					  String fileurl=download_dir+cebfileName;
					  String remoteFileUrl=serverPath+"/files/upload/"+cebfileName;
					  //下载ceb文件到本地
					  com.downloadFile(remoteFileUrl,fileurl);
					  //获取CEBID
					  String cebId=com.getCEBID(fileurl);
					  //拼装方正公章接口的XML
					  String strXml = "<?xml version = \"1.0\" encoding=\"gb2312\"?>";
					  strXml +="<Doc>";
					  strXml +="<DocumentID>"+cebId+"</DocumentID>";              
					  strXml +="<Receivers>"+receiveDept+"</Receivers>";     
					  strXml +="<PrnNums>"+printNums+"</PrnNums>";                     
					  strXml +="<SendType>1</SendType>";                          
					  strXml +="<Count>"+receiveDept.split(";").length+"</Count>";                               
					  strXml +="</Doc>";
					  log.info("strXml==="+strXml);
					  String xmlFileName=docId+"["+i+"]"+".xml";
					  String xmlUrl=download_dir+xmlFileName;
					  //生成本地的XML
					  boolean flag1=com.getPrintXml(strXml,xmlUrl);
					  String strURL="http://"+Founder_Host+"/stampserver/extend/interfaces/PrintLic2DB.aspx";
					  //上传本地的XML到方正公章服务器
					  boolean flag2=com.SendFileEx(strURL, xmlUrl);
					  String strOAURL=serverProPath+"/apabi/upload.jsp?fileName="+xmlFileName;
					  //上传本地的XML到OA服务器
					  boolean flag3=com.uploadFileforXml(xmlUrl,strOAURL);
					  //删除本机的各种临时文件包括下载的CEB和生成的XML
					  deleteTempFile(fileurl);
					  deleteTempFile(xmlUrl);
				}
				return true;
			  }catch(Exception ex){
				  ex.printStackTrace();
				  return false;
			  }
	  } 
}












 

分享到:
评论

相关推荐

    java调用ocx控件,jacob,jar和dll文件

    接下来,为了能够在Java应用中使用Jacob,你需要确保系统路径中包含了`jacob.dll`。这个动态链接库文件实现了Java层与COM层的桥接,使得Java能够调用COM组件。通常,`jacob.dll`需要放在Java的系统库目录下,或者在...

    通过 JACOB 实现 Java调用ocx控件

    因此,需要将jacob-1.17-x64.dll和jacob-1.17-x86.dll文件拷贝到Java开发工具包(JDK)的bin目录下。此外,需要在项目中导入jacob.jar包,这样才能在Java代码中调用JACOB的API。 接下来是OCX控件的注册。这一步骤与...

    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....

    jacob-1.18的jar包以及.dll文件

    6. **使用Jacob**:在Java项目中使用Jacob时,需要将Jacob的.jar文件添加到项目的类路径中,并根据系统的架构选择合适的.dll文件放置在正确的位置,通常是系统的PATH环境变量所包含的目录下。然后,通过导入Jacob...

    Java操作ddl使用jacob

    Java操作DDL(Data Definition Language)通常指的是在Java应用程序中创建、修改或删除数据库结构,如表、视图、索引等。在这个场景中,"Java操作DDL使用jacob"指的是利用Jacob库来实现这一功能。Jacob是Java和COM...

    jacob-1.14.3的jar包及其dll

    通过Jacob,你可以执行诸如操作Excel、Word文档,控制Internet Explorer浏览器等任务。 **平台依赖:jacob-1.14.3-x64.dll和jacob-1.14.3-x86.dll** Jacob库虽然以Java编写,但为了实现与COM组件的交互,还需要...

    最全的Jacob各种版本号及对应的dll包

    Jacob允许Java代码调用COM对象的方法,访问其属性,实现与Windows系统的深度集成,比如自动化Office文档处理、利用ActiveX控件等。此资源集合包含了Jacob的多个版本,包括1.15、1.16、1.17以及1.9,同时提供了适用于...

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

    这个压缩包"jacob1.19"包含了两个版本的Jacob动态链接库(DLL)文件:jacob-1.19-x64.dll适用于64位系统,而jacob-1.19-x86.dll则适用于32位系统。这两个文件是Jacob库的核心组成部分,它们实现了Java和COM之间的...

    jacob-1.18的 jar 和 dll(x62、x32)文件打包下载

    Jacob是Java和COM之间的一个桥梁,它允许Java代码与COM组件进行交互,使得开发者能够利用Java编程语言调用Windows下的各种ActiveX控件或者DLL库。这个资源是关于Jacob的版本1.18,其中包含了重要的组件——jar和dll...

    jacob-1.18-x64.dll文件

    在使用Jacob时,我们首先需要将jacob-1.18-x64.dll添加到系统的PATH环境变量中,这样Java虚拟机才能找到并加载这个库。此外,还需要在项目中添加对Jacob.jar的引用,这包含了Java层面的API,供开发者编写调用COM组件...

    jacob的jar和dll文件

    5. **配置环境**:使用Jacob前,除了在项目中添加`jacob.jar`到类路径外,还需要在系统环境变量`PATH`中添加Jacob的dll文件路径,或者在Java代码中使用`System.loadLibrary()`方法指定dll文件的位置。 6. **文件...

    jacob.dll控件下载

    1. **与Office集成**:Java开发者可以使用jacob.dll来读写Excel电子表格、创建Word文档、处理PowerPoint演示文稿等,使得Java程序具备了与Microsoft Office深度集成的能力。 2. **自动化任务**:通过COM接口,jacob...

    java朗读简单字符串所需的jacob包及dll文件 jacob_1.19

    如果你在其他操作系统上,如Linux或macOS,可能需要寻找其他解决方案,如使用Java的`javax.speech`包或者跨平台的TTS库如`eSpeak`。 总的来说,`jacob`为Java开发者提供了一种方便的方式来调用Windows的本地资源,...

    Java调用C# dll jacob包类资源.zip

    Java调用C# DLL是跨语言交互的一种常见需求,特别是在企业级应用开发中,可能会遇到已有的C#组件需要在Java环境中使用的场景。Jacob(Java COM Bridge)是一个开源项目,它提供了一个Java到COM(Component Object ...

    java操作word之jacob(jacob.dll + jacob.jar),绝对实用

    使用Jacob进行Java操作Word的基本步骤如下: 1. **添加依赖**:首先,将`jacob.jar`添加到项目的类路径中。如果是Windows环境,还需要将`jacob.dll`放到系统PATH环境变量所包含的目录下,或者放在Java运行时可以...

    jacob-1.18-x64.dll jacob-1.18-x86.dll jacob.jar

    "jacob-1.18-x64.dll" 和 "jacob-1.18-x86.dll" 是Jacob库的动态链接库文件,分别对应于64位和32位的Windows操作系统。Jacob的核心功能就是通过这些DLL文件来实现Java和COM接口的通信。 "jacob.jar" 是Jacob的Java...

    jacob-1.18-M2的jar及dll配置位置说明

    在使用Jacob时,正确配置dll和jar文件的位置至关重要,否则可能会导致运行时错误。本文将详细解释如何设置Jacob-1.18-M2的dll和jar文件。 首先,我们来了解Jacob的核心组件。Jacob项目包含两个主要部分:一个Java...

    最新版jacob 1.20.jar jacob-1.20-x64.dll jacob-1.20-x86.dll

    这个压缩包包含了Jacob的最新版本,即1.20版,包括两个动态链接库(DLL)文件:`jacob-1.20-x64.dll`和`jacob-1.20-x86.dll`,以及Java类库`jacob-1.20.jar`。这些文件分别用于64位和32位的Windows系统,确保了在...

    jacob-1.14.3.dll及使用方法

    通过理解`jacob-1.14.3.dll`的作用,以及如何正确配置和使用Jacob库,开发者可以轻松地在Java项目中集成Office文档处理、PDF生成等功能,提高工作效率。在实际开发中,一定要根据具体需求选择合适的dll版本,并确保...

    jacob/js调用ocx控件的demo

    本示例"jacob-js调用ocx"提供了一个详细的教程,演示了如何使用Jacob库在Java中调用OCX控件,并通过JavaScript在网页中与之通信。 首先,Jacob库是一个Java到COM(Component Object Model)桥接器,它允许Java应用...

Global site tag (gtag.js) - Google Analytics