摘要:随着信息化的发展电子签章已经越来越多的被用到很多OA系统中,今天就来看一下如何使用iWebOffice来实现电子签章功能。
内容:
1.iWebOffice2003的基本原理
2.使用iWebOffice2003实现电子签章
一、iWebOffice2003的基本原理
在开始今天的主题之前先简单的说一下iWebOffice的原理。iWebOffice控件由两部分组成:一个是用于集成在页面上的iWebOffice2003.ocx文件,另一个是运行在后台服务器上的iMsgServer2000.dll文件。前者就是大家所熟知的ActiveX插件,当然要使用它在客户端必须安装此插件,后者是用于配合前者的请求进行通信,事实上控件工作的原来正是前后台通信和处理的过程。iWebOffice2003.ocx集成在页面上,通过js脚本调用,用户文档的编辑以及传递消息到服务器;iMsgServer2000.dll在服务器端运行,用于解析iWebOffice2003.ocx控件发过来的信息包,以及将服务器上处理的结果反馈给客户端iWebOffice2003.ocx。
首先来看前端的代码,可以说同其他ActiveX几乎完全一样。classid是固定的,是控件的注册id,这也是所有com组件必须拥有的;codebase由两部分组成#version之前的是控件的下载地址,后面是控件版本号,这两者当然务必要写正确,否则会造成控件不能正常下载、显示和使用。
前端页面代码:
<OBJECT id="CWebOffice" width="100%" height="100%" classid="clsid:23739A7E-5741-4D1C-88D5-D50B18F7C347" codebase=" iWebOffice2003.ocx#version=6,0,0,4 " ></OBJECT>
如果classid和version没有设置错的话运行会显示控件(前提是客户端安装了iWebOffice插件),当然此时还不能打开文档,因为前端还没有js调用。为了方便调用,这里将js操作部分加以封装(注意封装部分用到了Ext面向对象):
/*
Author:KenshinCui
Date:2011.11.16
Description:weboffice operate class.
*/
Ext.useShims=true;
Ext.namespace("Cmj.Web.ExtExtend");
Cmj.Web.ExtExtend.WebOffice=Ext.extend(Ext.util.Observable,{
constructor:function(config){
// this.addEvents("beforeopen");
// this.addEvents("open");
// this.addEvents("beforeprint");
// this.addEvents("print");
// this.addEvents("beforeopen");
// this.addEvents("open");
// this.addEvents("beforeopen");
// this.addEvents("open");
this.listeners=config.listeners;
Cmj.Web.ExtExtend.WebOffice.superclass.constructor.call(this,config);
this.objectID=config.objectID;//客户端对象id
this.webUrl=config.webUrl;//weboffice 的服務器端操作url
this.fileName=config.fileName;//文件名称(不包含完整路径并且后缀可有可无,如果没有后缀的话则必须配置fileType属性)
if(config.fileType!=void 0){
this.fileType=config.fileType;
}else{
this.fileType="";
}
this.webOffice=Ext.getDom(this.objectID);
},
getObject:function(){
return this.webOffice;
},
load:function(){
WebOffice=this.webOffice;
try{
WebOffice.WebUrl=this.webUrl;
WebOffice.RecordID="cid";
WebOffice.Template="";
WebOffice.FileName=this.fileName;
WebOffice.FileType=this.fileType;
WebOffice.EditType="1";
WebOffice.UserName="SYSTEM";
WebOffice.WebOpen(); //打开该文档
window.status=WebOffice.Status;
}catch(e){
Ext.Msg.alert("系统提示","打开文档过程中发生错误,错误信息:"+e.message);
}
},
showMenu:function(bool){
try{
this.webOffice.ShowMenu=bool?"1":"0";
}catch(e){
Ext.Msg.alert("系统提示","设置菜单显示状态时发生错误,错误信息:"+e.message);
}
},
addMenus:function(menuArray){
try
{
var menu=Ext.getDom('menuEventScript');
for(var i=1;i<=menuArray.length;++i){
if(menuArray[i-1]=="save"){
this.webOffice.AppendMenu(i,"保存");
menu.text+="if(Index=="+i+"){Ext.getDom('CWebOffice').WebSave();}";
}else if(menuArray[i-1]=="saveAs"){
this.webOffice.AppendMenu(i,"另存为");
menu.text+="if(Index=="+i+"){Ext.getDom('CWebOffice').WebSaveLocal();}";
}else if(menuArray[i-1]=="print"){
this.webOffice.AppendMenu(i,"打印");
menu.text+="if(Index=="+i+"){Ext.getDom('CWebOffice').WebOpenPrint();}";
}else if(menuArray[i-1]=="signature"){
this.webOffice.AppendMenu(i,"电子签章");
menu.text+="if(Index=="+i+"){Ext.getDom('CWebOffice').WebOpenSignature();}";
}
}
}catch(e){
Ext.Msg.alert("系统提示","创建菜单过程中发生错误,错误信息:"+e.message);
}
},
save:function(){//保存到服务器
try{
this.webOffice.WebSave();
}catch(e){
Ext.Msg.alert("系统提示","文档保存时发生错误,错误信息:"+e.message);
}
},
saveAs:function(){//另存到客户端
try{
this.webOffice.WebSaveLocal();
}catch(e){
Ext.Msg.alert("系统提示","文档另存时发生错误,错误信息:"+e.message);
}
},
print:function(){
try{
this.webOffice.WebOpenPrint();
}catch(e){
Ext.Msg.alert("系统提示","文档打印时发生错误,错误信息:"+e.message);
}
},
signature:function(type){//打开电子签章操作窗口
try{
if(arguments.length>0){
this.webOffice.WebOpenSignature(type);
}else{
this.webOffice.WebOpenSignature();
}
}catch(e){
Ext.Msg.alert("系统提示","打开电子签章窗口时发生错误,错误信息:"+e.message);
}
}
});