求 office 痕迹 保留 签名 资料?(来者有分) 求 office 痕迹 保留 签名 资料?(来者有分) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 office 啊www.xjtushare.com找找 呵呵,电子签章嘛,我也在搞,多交流![email protected] ActiveX WebOffice Version 1.0.0.2开发目的针对公司项目[辽河油田工程设计网上签署认证系统]的需要:需要将Office集成到浏览器以实现B/S模式下在线编辑Word等Office桌面办公软件的复合文档并加以操控[即:所见即所得].特提出满足功能如下:1. 在浏览器中针对Word等处理动作[在线打开,编辑,保存]2. 复合文档数据存储在企业数据库中3. 支持图件组态操作4. 修改留痕及版本控制技术总结1. ActiveDocument复合文档技术2. OfficeVBA3. OLE容器4. COM组件5. Code Sign6. 自动初始化安全组件种类7. 与企业级关系数据库交互接口说明[方法OpenDoc] void OpenDoc(void);描述:打开文档[文档为属性FileName指定的URL][方法SaveDoc] void SaveDoc(void);描述:保存文档[文档为属性DesignFile指定的URL][方法SetData] void SetData(void);描述:初始化数据[依据规则填充Word数据][方法LoadUnit] void LoadUnit(void);描述:加载图元[图元路径在属性UnitName中指定,URL格式][方法ShowDlg] void ShowDlg(SHORT iIndex);描述:显示Word的186个对话框[参数iIndex为对话框索引号][方法SetField] void SetField(BSTR strFieldName, BSTR strFieldValue);描述:按照RFC1867文档规定,设置非二进制流格式数据[参数strFieldName为表单域名,strFieldValue为表单域值][方法SetProtect] void SetProtect(SHORT iIndex, SHORT iProtect, LPCTSTR strPassword);描述:文档加锁[参数iIndex为节索引号,iProtect为是否加锁,strPassword为加锁(解锁)口令][方法SetSign] void SetSign(BSTR strRule, BSTR strSign);描述:设置签名[strRule为签名位置[规则形如: #,1,1,2,#意为Word中第一表格1行2列],strSign为签名内容][方法SetSignEx] void SetSignEx(BSTR strRule, BSTR strSign);描述:设置签名[strRule为签名位置[规则形如: #,1,1,2,#意为Word中第一表格1行2列],strSign为签名内容],并且收集表单数据提交Word文档[方法SetReadOnly] void SetReadOnly(BSTR strTrue);描述:设置Word是否只读[参数strTrue内容为布尔宏:True,False][方法PrintPreview] void PrintPreview(void);描述:打印预览[方法SetTrack] void SetTrack(LPCTSTR strTrack);描述:显示隐藏留痕[方法SetTrackUser] void SetTrackUser(LPCTSTR strTrackUser);描述:设置应用文档用户[方法GetTableRow] SHORT GetTableRow(SHORT iTableIndex);描述:返回指定表格行数[参数为当前文档的表格索引号][方法SetHead] void SetHead(LPCTSTR strHead);描述:设置页眉[参数为页眉内容][属性 FileName] BSTR FileName;描述:打开文件方法调用所需的URL[同时支持虚拟路径与物理路径][属性 ReturnData] BSTR ReturnData;描述:依据规则返回格式化数据[属性 Rule] BSTR Rule;描述:规则[属性 InitData] BSTR InitData;描述:依据规则要初始化的数据[属性 DesignFile] BSTR DesignFile;描述:保存文件方法调用所需的URL[同时支持虚拟路径与物理路径][属性 UnitName] BSTR UnitName;描述:图元路径URL[同时支持虚拟路径与物理路径][属性 ServerName] BSTR ServerName;描述:Web Server的主机名称或者IP[属性 ServerPort] BSTR ServerPort;描述:Web Server提供服务的端口[属性 PageType] BSTR PageType;描述:Word的板式[横向,纵向][属性 DocStatus] BSTR DocStatus;描述:控制文档是否可编辑注意事项1. 在引用前必须注册该WebOffice.ocx控件[如果从浏览器访问,会自动下载WebOffice.cab包注册:提示用户(证书警告)]手工注册可以用RegSvr32.exe WebOffice.ocx来注册或者采用控件提供的注册程序: RegOCX.exe来注册2. 该ActiveX在Win2000+Office2000环境下测试成功.开发环境为Visual Studio .NET3. 运行库支持:ASYCFILT.DLL, MFC70.DLL, MSVCR70.DLL, MSVCRT.DLL, OLEAUT32.DLL, OLEPRO32.DLL, STDOLE2.TLB, COMCAT.DLL说明:如果为WinNT系列用OLEAUT32.DLL,如果为Win9X系列用OLEPRO.DLL目前已经脱离运行库支持就可以运行了.4. 无网络环境时可以更改Hosts文件的IP映射来模拟网络或者添加Loopback协议5. 测试跟踪可以选用Visual Studio自带工具TSTCON32.EXE[测试], OLEVIEW.EXE[跟踪]来测试ActiveX的运行状态应用示例1. IE浏览器中应用ActiveXWebOffice.htm[客户端调用ActiveX示例]<table width='100%' border='0' cellpadding='0' cellspacing='0'> <tr> <td width="100%"><object id=DWebOffice style="left: 0px; width: 100%; top: 0px; height: 450px" classid="clsid:05430EC0-69CA-437A-B1F9-4B78B8647BEA" viewastext codebase="http://DigitalTitan:9003/ActiveX/WebOffice.cab#version=1,0,0,2"><!--<object id=DWebOffice style="left: 0px; width: 100%; top: 0px; height: 450px" classid="clsid:05430EC0-69CA-437A-B1F9-4B78B8647BEA" viewastext>--><param name="_Version" value="65536"><param name="_ExtentX" value="6959"><param name="_ExtentY" value="2699"><param name="_StockProps" value="0"><param name="FileName" value="Http://DigitalTitan:9003/Attachment/Project_Design001.doc"><param name="Rule" value="#,2,1,2,#,2,2,2,#"><!--<param name="ReturnData" value="">--><param name="InitData" value="#基础数据1#基础数据2#"><param name="VersionTrack" value="VersionTrack"><param name="DocStatus" value="DocStatus"><param name="DesignFile" value=""></object> </td> </tr> <tr> <td><script>function SelectDot(self){ for(iIndex=0;iIndex<self.length;iIndex++) { if(self.options[iIndex].selected) { return self.options[iIndex].value; } }}</script><select onchange="DWebOffice.FileName=SelectDot(this);"><option value="Http://DigitalTitan:9003/Attachment/DesignSave.doc">Http文件下载演示</option></select><input type="button" value="打开模板" onclick="DWebOffice.OpenDoc();"><input type="button" value="保存文档" onclick="DWebOffice.SaveDoc();"><input type="button" value="签名保存" onclick="DWebOffice.SetSignEx('#,1,1,2,#','同意');"><input type="button" value="初始数据" onclick="DWebOffice.SetData();"><input type="button" value="获取数据" onclick="window.confirm(DWebOffice.ReturnData);"><input type="button" value="设计签名" onclick="DWebOffice.SetSign('#,1,1,2,#','同意');"><input type="button" value="审核签名" onclick="DWebOffice.SetSign('#,1,2,2,#','同意');"><input type="button" value="领导意见" onclick="DWebOffice.SetSign('#,1,3,2,#','赞成');"><input type="button" value="主管部门" onclick="DWebOffice.SetSign('#,1,4,2,#','同意');"><input type="button" value="主管领导" onclick="DWebOffice.SetSign('#,1,5,2,#','同意');"><input type="button" value="公司意见" onclick="DWebOffice.SetSign('#,1,6,2,#','赞成');"><input type="button" value="只读设置" onclick="DWebOffice.SetReadOnly('True');"><input type="button" value="激活设置" onclick="DWebOffice.SetReadOnly('False');"><input type="button" value="打印预览" onclick="DWebOffice.PrintPreview();"><input type="button" value="显示留痕" onclick="DWebOffice.SetTrack('True');"><input type="button" value="隐藏留痕" onclick="DWebOffice.SetTrack('False');"><input type="button" value="设置用户" onclick="var strTrackUser;strTrackUser=window.prompt('输入用户名称','鲁西西');if(strTrackUser==null){DWebOffice.SetTrackUser('皮皮鲁');}else{DWebOffice.SetTrackUser(strTrackUser);}"> </td> </tr> <tr> <td> </td> </tr> <tr> <td><script>function SelectUnit(self){ for(iIndex=0;iIndex<self.length;iIndex++) { if(self.options[iIndex].selected) { return "Http://10.70.38.109:9003/Unit/"+self.options[iIndex].text; } }}</script> <select onchange="DWebOffice.UnitName=SelectUnit(this);"><option value="">1寸半油管(短).bmp</option><option value="">1寸半油管.bmp</option><option value="">K型封隔器.bmp</option><option value="">temp1.jpg</option><option value="">temp2.jpg</option><option value="">temp3.jpg</option><option value="">X型封隔器.bmp</option><option value="">Y型封隔器.bmp</option><option value="">Z型封隔器.bmp</option><option value="">丝堵.bmp</option><option value="">丢手接头.bmp</option><option value="">人工井底.bmp</option><option value="">伸缩管.bmp</option><option value="">侧孔式气举阀.bmp</option><option value="">偏心配产器.bmp</option><option value="">偏心配水器.bmp</option><option value="">公丢手接头.bmp</option><option value="">内挂式气举阀.bmp</option><option value="">冲洗器.bmp</option><option value="">减振器.bmp</option><option value="">分水接头.bmp</option><option value="">反洗滑套.bmp</option><option value="">可捞式气举阀.bmp</option><option value="">喇叭口.bmp</option><option value="">喷嘴式压裂喷砂器.bmp</option><option value="">回音标.bmp</option><option value="">固定球座.bmp</option><option value="">固定配水器.bmp</option><option value="">堵塞器.bmp</option><option value="">堵塞器滑套.bmp</option><option value="">套管.bmp</option><option value="">套管刮削器.bmp</option><option value="">套管通径规.bmp</option><option value="">套管鞋.bmp</option><option value="">安全接头.bmp</option><option value="">定位接头.bmp</option><option value="">密封块.bmp</option><option value="">导向丝堵.bmp</option><option value="">射孔套管.bmp</option><option value="">射流泵.bmp</option><option value="">常关滑套.bmp</option><option value="">常开滑套.bmp</option><option value="">开关滑套.bmp</option><option value="">弹簧扶正器.bmp</option><option value="">扶正器.bmp</option><option value="">抽油杆.bmp</option><option value="">提放管柱式支撑卡瓦(作部件用1).bmp</option><option value="">提放管柱式支撑卡瓦(作部件用2).bmp</option><option value="">提放管柱式支撑卡瓦.bmp</option><option value="">撞击接头.bmp</option><option value="">旁通式气举阀.bmp</option><option value="">普通管柱.jpg</option><option value="">柱塞器.bmp</option><option value="">标注.bmp</option><option value="">标注线.bmp</option><option value="">桥式配产器.bmp</option><option value="">桥式配水器.bmp</option><option value="">水力泵.bmp</option><option value="">水泥塞.bmp</option><option value="">油层(大).bmp</option><option value="">油层(小).bmp</option><option value="">油管(小).bmp</option><option value="">油管(短).bmp</option><option value="">油管.bmp</option><option value="">泄油器.bmp</option><option value="">泵.bmp</option><option value="">活动接头.bmp</option><option value="">活动球座.bmp</option><option value="">液压支撑卡瓦.bmp</option><option value="">滑套配产器.bmp</option><option value="">滤砂筛管.bmp</option><option value="">爆破滑套.bmp</option><option value="">特殊管柱.bmp</option><option value="">特殊管柱.jpg</option><option value="">玻璃滑套.bmp</option><option value="">电潜泵.bmp</option><option value="">电缆.bmp</option><option value="">电缆爆炸座封工具.bmp</option><option value="">磁保护器.bmp</option><option value="">空心桥塞悬挂器.bmp</option><option value="">空心配水器.bmp</option><option value="">筛管.bmp</option><option value="">缓冲式压裂喷砂器.bmp</option><option value="">脱接器.bmp</option><option value="">解封座封打捞筒.bmp</option><option value="">轨道滑套.bmp</option><option value="">连接头.bmp</option><option value="">金属绕丝管.bmp</option><option value="">锚(作封隔器部件用).bmp</option><option value="">锚.bmp</option><option value="">阀式压裂喷砂器.bmp</option><option value="">防顶卡瓦.bmp</option><option value="">隔热油管.bmp</option></select><input type="button" value="加载图元" onclick="DWebOffice.LoadUnit();"><input type="button" value="图元路径" onclick="window.confirm(DWebOffice.UnitName);"><input type="button" value="显示对话" onclick="var iResult=window.prompt('请输入1-186的索引值:','80');DWebOffice.ShowDlg(1*iResult);"><input type="button" value="设置元素" onclick="DWebOffice.SetField('Field_User','DigitalTitan');"><input type="button" value="保护段落" onclick="try{DWebOffice.SetProtect(1,1,'password');}catch(e){}"><input type="button" value="表格行数" onclick="var iTableRows=0;var iTableIndex=0;iTableIndex=window.prompt('请输入表格索引号','2');try{iTableRows=DWebOffice.GetTableRow(iTableIndex);}catch(e){}window.confirm(iTableRows);"><input type="button" value="运行命令" onclick="var iSerial=17;iSerial=window.prompt('请输入命令索引号1-37','17');try{DWebOffice.RunCommand(iSerial);}catch(e){}"><input type="button" value="设置页眉" onclick="DWebOffice.SetHead('页眉啊页眉');"> </td> </tr></table>NewResult.jsp[Servlet端处理数据流示例]<%@ page contentType="text/html; charset=gb2312"%><%@ include file="/DataIni/DataOpen.jsp"%><%@ include file="/ScriptLib/Init.jsp"%><% InputStream InData=null; int iSize,iLength; iLength=request.getContentLength(); byte[] Buffer=new byte[iLength]; byte[] Byte_File; if(iLength>0) { InData=request.getInputStream(); String ContentType=request.getContentType(); iSize=InData.read(Buffer); if(iSize!=-1) { //数据处理开始 String FileData=new String(Buffer,"ISO8859-1"); // //正则字串:"name=\""; //正则字串:"filename=\""; String strSplit=ContentType.substring(ContentType.lastIndexOf("=")+1,ContentType.length()); String strSub[]=FileData.split(strSplit); String strElement; int iBegin,iEnd; iBegin=0;iEnd=0; String FieldName,FieldValue; int bTrue; bTrue=0; int iPos; iPos=0; int iLocation; iLocation=0; for(int iIndex=0;iIndex<strSub.length;iIndex++) { strElement=strSub[iIndex]; iBegin=strElement.indexOf("name=\"",0); if(iBegin!=-1) { iEnd=strElement.indexOf("\"",iBegin+6); FieldName=strElement.substring(iBegin+6,iEnd); iBegin=strElement.indexOf("filename=\"",0); if(iBegin!=-1) { bTrue=1; } // iEnd=strElement.indexOf("\r\n\r\n",0); if(bTrue==1) { iLocation=0; iPos=FileData.indexOf("filename=\"",iPos); iPos=FileData.indexOf("\r\n",iPos)+2; iLocation=FileData.indexOf(strSplit,iPos)-2; FieldValue=FileData.substring(iPos,iLocation); //FieldValue=FieldValue.replace('\255','\0'); FieldValue=FieldValue.replaceAll("DigitalTitan","\0"); Byte_File=FieldValue.getBytes("ISO8859-1"); /* byte[] Byte_File_=FieldValue.getBytes(); Byte_File=new byte[Byte_File_.length]; for(int kIndex=0;kIndex<Byte_File_.length;kIndex++) { Byte_File[kIndex]=Buffer[iPos+0+kIndex]; } */ session.putValue(FieldName,Byte_File); } else { FieldValue=strElement.substring(iEnd+4); session.putValue(FieldName,FieldValue.substring(0,FieldValue.indexOf("\r\n"))); } bTrue=0; } } //数据处理结束 String Author,History; /* if((String)session.getValue("UserId")==null) {Author="Anonymous";} else {Author=(String)session.getValue("UserId");} */ Author="Anonymous"; java.util.Date m_Date=new java.util.Date(System.currentTimeMillis()); History=m_Date.toString(); boolean bDefault; int iC; oracle.sql.BLOB m_Blob; bDefault=odbcConn.getAutoCommit(); odbcConn.setAutoCommit(false); odbcStmt.executeUpdate("insert into Project_Design(ID,Category,Subject,Body,Author,History) values(IDSERIAL.nextval,'"+(String)session.getValue("Category")+"','"+(String)session.getValue("Subject")+"',EMPTY_BLOB(),'"+Author+"','"+History+"')"); odbcQuery="select * from Project_Design order by ID asc"; odbcRs=odbcStmt___.executeQuery(odbcQuery); odbcRs.last(); String iID=String.valueOf((int)odbcRs.getInt("ID")); odbcQuery="select Body from Project_Design where ID="+iID+" for Update"; odbcRs=odbcStmt___.executeQuery(odbcQuery); if(odbcRs.next()) { m_Blob=(oracle.sql.BLOB)odbcRs.getBlob("Body"); BufferedOutputStream pOut=new BufferedOutputStream(m_Blob.getBinaryOutputStream()); ByteArrayInputStream pIn=new ByteArrayInputStream((byte[])session.getValue("FieldName")); while((iC=pIn.read())!=-1) {pOut.write(iC);} pIn.close(); pOut.close(); } odbcConn.commit(); odbcConn.setAutoCommit(bDefault); /* odbcQuery="select * from Project_BaseInfo where well_no='"+(String)session.getValue("WellNo")+"'"; String bStatus; bStatus="false"; odbcRs=odbcStmt.executeQuery(odbcQuery); if(odbcRs.next()) { bStatus="true"; } odbcRs.close(); if(bStatus=="true") { String Base_Data[]=(String)session.getValue("WellNo").split(","); for(int oIndex=0;oIndex<Base_Data.length;oIndex++) { System.out.println(Base_Data[oIndex]); } //odbcStmt.executeUpdate("insert into Project_BaseInfo(ID,WHERE_POSITION,CREATE_POSITION,WELL_TYPE,WELL_LENGTH,WELL_DEPH_BY_DIG,WELL_DEPTH_BY_HAND,DATE_DIG,DATA_WELL,MAX_SIZE,WELL_NO) values(IDSERIAL.nextval,'"+(String)session.getValue("WellNo")+"')"); } */ System.out.println("->->->->->->->"); //response.sendRedirect("/System/Project_Design/List.jsp"); } }%><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><meta name="GENERATOR" content="Microsoft FrontPage 4.0"><meta name="ProgId" content="FrontPage.Editor.Document"><title></title><link rel="stylesheet" type="text/css" href="/StyleLib/Default_Style_Sheet.css"></head><body onload="//window.alert('添加成功,请返回确认浏览!');//window.location.href='/System/Project_Design/List.jsp';"><%@ include file="/TemplateLib/Head.jsp"%><%@ include file="/TemplateLib/Tail.jsp"%><%@ include file="/DataIni/DataClose.jsp"%></body></html>2. 应用程序中应用ActiveX等待完善1.目前程序不支持Office2003,因为不支持Unicode[目前发布版为ANSI]2. 欢迎交流心得.MSN:[email protected] 找一些Office开发的例子看看使用OleView看看Office组件提供的接口函数,呵呵 sinall() ( ) 信誉:97 2004-12-01 08:36:00 得分: 0 office 啊www.xjtushare.com找找在这个网站上输入office 没找到对应的资料,谢谢----------------------------------pepsi1980(这只老鼠不会游泳) ( ) 信誉:97 2004-12-01 09:29:00 得分: 0 呵呵,电子签章嘛,我也在搞,多交流![email protected]已发邮件,谢谢----------------- gjd111686(数字金刚) ( ) 信誉:146 ActiveX WebOffice Version 1.0.0.2不知这个控件是其他公司的,还是自己开发的,功能较全面对以下交流1. 在浏览器中针对Word等处理动作[在线打开,编辑,保存](ms 提供了一个 sample 应该可以稍加修改,即可完成)2. 复合文档数据存储在企业数据库中(IStream 和 ADO 的 IStream对象对应,我的第一想法)3. 支持图件组态操作(如果是office,直接用vba可直接操作图件)4. 修改留痕及版本控制(请教各位的)谢谢 数字金刚------------------------------------对 电子签章,大家有没有更具体的意见,我粗略看了一下 goldgrid 提供的控件那个章,是一个 ax窗口透明控件难点是怎么保证其他人修改后,可直接标记出来,看了ms的文档,做法是用证书签名方式,这部分能直接用程序实现吗。 Word本身有流痕的功能,如果将手写图片放入后改动即可看到是否修改过.证书签名用程序来实现没有做过,应该可以的.利用Microsoft CryptoAPI就可以自己在会话中验证数字签名. 看是否有用http://www.vckbase.com/document/viewdoc/?id=975 用证书签名很简单,关键是要把证书发到各个终端(就是使用者的计算机)上面去就行了,证书签名用PKCS#7,CryptoAPI对这个实现得很好,签名以后可以脱离证书进行验证(其实是证书已经包含在签名里面了).不要按照上面URL的例子去做,直接用密钥的话及不方便又不实际,而且不具备移动性. delphi写的DLL要在VC中如何声明? 想实现类似Microsoft AppLocale的功能,需要HOOK哪些API函数? 如何用OPenGL和柏林噪声做出云彩效果 c++内存分配 求教:如何完成对这种按钮的操作 关于检测网卡的问题! send的第4个参数nFlag有什么用? sdK--statusbar?? COM+中的IMDB服务怎么安装的? 新手问题:请问句柄和类在使用时有什么区别? 简单的问题!!高手帮忙!!!! 求教一个底层的问题
www.xjtushare.com找找
[email protected]
开发目的
针对公司项目[辽河油田工程设计网上签署认证系统]的需要:需要将Office集成到浏览器以实现B/S模式下在线编辑Word等Office桌面办公软件的复合文档并加以操控[即:所见即所得].特提出满足功能如下:
1. 在浏览器中针对Word等处理动作[在线打开,编辑,保存]
2. 复合文档数据存储在企业数据库中
3. 支持图件组态操作
4. 修改留痕及版本控制
技术总结
1. ActiveDocument复合文档技术
2. OfficeVBA
3. OLE容器
4. COM组件
5. Code Sign
6. 自动初始化安全组件种类
7. 与企业级关系数据库交互接口说明[方法OpenDoc] void OpenDoc(void);
描述:打开文档[文档为属性FileName指定的URL]
[方法SaveDoc] void SaveDoc(void);
描述:保存文档[文档为属性DesignFile指定的URL]
[方法SetData] void SetData(void);
描述:初始化数据[依据规则填充Word数据]
[方法LoadUnit] void LoadUnit(void);
描述:加载图元[图元路径在属性UnitName中指定,URL格式]
[方法ShowDlg] void ShowDlg(SHORT iIndex);
描述:显示Word的186个对话框[参数iIndex为对话框索引号]
[方法SetField] void SetField(BSTR strFieldName, BSTR strFieldValue);
描述:按照RFC1867文档规定,设置非二进制流格式数据[参数strFieldName为表单域名,strFieldValue为表单域值]
[方法SetProtect] void SetProtect(SHORT iIndex, SHORT iProtect, LPCTSTR strPassword);
描述:文档加锁[参数iIndex为节索引号,iProtect为是否加锁,strPassword为加锁(解锁)口令]
[方法SetSign] void SetSign(BSTR strRule, BSTR strSign);
描述:设置签名[strRule为签名位置[规则形如: #,1,1,2,#意为Word中第一表格1行2列],strSign为签名内容]
[方法SetSignEx] void SetSignEx(BSTR strRule, BSTR strSign);
描述:设置签名[strRule为签名位置[规则形如: #,1,1,2,#意为Word中第一表格1行2列],strSign为签名内容],并且收集表单数据提交Word文档[方法SetReadOnly] void SetReadOnly(BSTR strTrue);
描述:设置Word是否只读[参数strTrue内容为布尔宏:True,False]
[方法PrintPreview] void PrintPreview(void);
描述:打印预览
[方法SetTrack] void SetTrack(LPCTSTR strTrack);
描述:显示隐藏留痕
[方法SetTrackUser] void SetTrackUser(LPCTSTR strTrackUser);
描述:设置应用文档用户
[方法GetTableRow] SHORT GetTableRow(SHORT iTableIndex);
描述:返回指定表格行数[参数为当前文档的表格索引号]
[方法SetHead] void SetHead(LPCTSTR strHead);
描述:设置页眉[参数为页眉内容][属性 FileName] BSTR FileName;
描述:打开文件方法调用所需的URL[同时支持虚拟路径与物理路径]
[属性 ReturnData] BSTR ReturnData;
描述:依据规则返回格式化数据
[属性 Rule] BSTR Rule;
描述:规则
[属性 InitData] BSTR InitData;
描述:依据规则要初始化的数据
[属性 DesignFile] BSTR DesignFile;
描述:保存文件方法调用所需的URL[同时支持虚拟路径与物理路径]
[属性 UnitName] BSTR UnitName;
描述:图元路径URL[同时支持虚拟路径与物理路径]
[属性 ServerName] BSTR ServerName;
描述:Web Server的主机名称或者IP
[属性 ServerPort] BSTR ServerPort;
描述:Web Server提供服务的端口
[属性 PageType] BSTR PageType;
描述:Word的板式[横向,纵向]
[属性 DocStatus] BSTR DocStatus;
描述:控制文档是否可编辑注意事项
1. 在引用前必须注册该WebOffice.ocx控件[如果从浏览器访问,会自动下载WebOffice.cab包注册:提示用户(证书警告)]
手工注册可以用RegSvr32.exe WebOffice.ocx来注册
或者采用控件提供的注册程序: RegOCX.exe来注册
2. 该ActiveX在Win2000+Office2000环境下测试成功.开发环境为Visual Studio .NET
3. 运行库支持:
ASYCFILT.DLL, MFC70.DLL, MSVCR70.DLL, MSVCRT.DLL, OLEAUT32.DLL, OLEPRO32.DLL, STDOLE2.TLB, COMCAT.DLL
说明:如果为WinNT系列用OLEAUT32.DLL,如果为Win9X系列用OLEPRO.DLL目前已经脱离运行库支持就可以运行了.
4. 无网络环境时可以更改Hosts文件的IP映射来模拟网络或者添加
Loopback协议
5. 测试跟踪
可以选用Visual Studio自带工具TSTCON32.EXE[测试], OLEVIEW.EXE[跟踪]来测试ActiveX的运行状态
应用示例
1. IE浏览器中应用ActiveX
WebOffice.htm[客户端调用ActiveX示例]
<table width='100%' border='0' cellpadding='0' cellspacing='0'>
<tr>
<td width="100%">
<object id=DWebOffice style="left: 0px; width: 100%; top: 0px; height: 450px" classid="clsid:05430EC0-69CA-437A-B1F9-4B78B8647BEA" viewastext codebase="http://DigitalTitan:9003/ActiveX/WebOffice.cab#version=1,0,0,2">
<!--<object id=DWebOffice style="left: 0px; width: 100%; top: 0px; height: 450px" classid="clsid:05430EC0-69CA-437A-B1F9-4B78B8647BEA" viewastext>-->
<param name="_Version" value="65536">
<param name="_ExtentX" value="6959">
<param name="_ExtentY" value="2699">
<param name="_StockProps" value="0">
<param name="FileName" value="Http://DigitalTitan:9003/Attachment/Project_Design001.doc">
<param name="Rule" value="#,2,1,2,#,2,2,2,#">
<!--<param name="ReturnData" value="">-->
<param name="InitData" value="#基础数据1#基础数据2#">
<param name="VersionTrack" value="VersionTrack">
<param name="DocStatus" value="DocStatus">
<param name="DesignFile" value="">
</object>
</td>
</tr>
<tr>
<td>
<script>
function SelectDot(self)
{
for(iIndex=0;iIndex<self.length;iIndex++)
{
if(self.options[iIndex].selected)
{
return self.options[iIndex].value;
}
}
}
</script>
<select onchange="DWebOffice.FileName=SelectDot(this);">
<option value="Http://DigitalTitan:9003/Attachment/DesignSave.doc">Http文件下载演示</option>
</select>
<input type="button" value="打开模板" onclick="DWebOffice.OpenDoc();">
<input type="button" value="保存文档" onclick="DWebOffice.SaveDoc();">
<input type="button" value="签名保存" onclick="DWebOffice.SetSignEx('#,1,1,2,#','同意');">
<input type="button" value="初始数据" onclick="DWebOffice.SetData();">
<input type="button" value="获取数据" onclick="window.confirm(DWebOffice.ReturnData);">
<input type="button" value="设计签名" onclick="DWebOffice.SetSign('#,1,1,2,#','同意');">
<input type="button" value="审核签名" onclick="DWebOffice.SetSign('#,1,2,2,#','同意');">
<input type="button" value="领导意见" onclick="DWebOffice.SetSign('#,1,3,2,#','赞成');">
<input type="button" value="主管部门" onclick="DWebOffice.SetSign('#,1,4,2,#','同意');">
<input type="button" value="主管领导" onclick="DWebOffice.SetSign('#,1,5,2,#','同意');">
<input type="button" value="公司意见" onclick="DWebOffice.SetSign('#,1,6,2,#','赞成');">
<input type="button" value="只读设置" onclick="DWebOffice.SetReadOnly('True');">
<input type="button" value="激活设置" onclick="DWebOffice.SetReadOnly('False');">
<input type="button" value="打印预览" onclick="DWebOffice.PrintPreview();">
<input type="button" value="显示留痕" onclick="DWebOffice.SetTrack('True');">
<input type="button" value="隐藏留痕" onclick="DWebOffice.SetTrack('False');">
<input type="button" value="设置用户" onclick="var strTrackUser;strTrackUser=window.prompt('输入用户名称','鲁西西');if(strTrackUser==null){DWebOffice.SetTrackUser('皮皮鲁');}else{DWebOffice.SetTrackUser(strTrackUser);}">
</td>
</tr>
<tr>
<td>
</td>
</tr>
<tr>
<td>
<script>
function SelectUnit(self)
{
for(iIndex=0;iIndex<self.length;iIndex++)
{
if(self.options[iIndex].selected)
{
return "Http://10.70.38.109:9003/Unit/"+self.options[iIndex].text;
}
}
}
</script>
<option value="">1寸半油管(短).bmp</option>
<option value="">1寸半油管.bmp</option>
<option value="">K型封隔器.bmp</option>
<option value="">temp1.jpg</option>
<option value="">temp2.jpg</option>
<option value="">temp3.jpg</option>
<option value="">X型封隔器.bmp</option>
<option value="">Y型封隔器.bmp</option>
<option value="">Z型封隔器.bmp</option>
<option value="">丝堵.bmp</option>
<option value="">丢手接头.bmp</option>
<option value="">人工井底.bmp</option>
<option value="">伸缩管.bmp</option>
<option value="">侧孔式气举阀.bmp</option>
<option value="">偏心配产器.bmp</option>
<option value="">偏心配水器.bmp</option>
<option value="">公丢手接头.bmp</option>
<option value="">内挂式气举阀.bmp</option>
<option value="">冲洗器.bmp</option>
<option value="">减振器.bmp</option>
<option value="">分水接头.bmp</option>
<option value="">反洗滑套.bmp</option>
<option value="">可捞式气举阀.bmp</option>
<option value="">喇叭口.bmp</option>
<option value="">喷嘴式压裂喷砂器.bmp</option>
<option value="">回音标.bmp</option>
<option value="">固定球座.bmp</option>
<option value="">固定配水器.bmp</option>
<option value="">堵塞器.bmp</option>
<option value="">堵塞器滑套.bmp</option>
<option value="">套管.bmp</option>
<option value="">套管刮削器.bmp</option>
<option value="">套管通径规.bmp</option>
<option value="">套管鞋.bmp</option>
<option value="">安全接头.bmp</option>
<option value="">定位接头.bmp</option>
<option value="">密封块.bmp</option>
<option value="">导向丝堵.bmp</option>
<option value="">射孔套管.bmp</option>
<option value="">射流泵.bmp</option>
<option value="">常关滑套.bmp</option>
<option value="">常开滑套.bmp</option>
<option value="">开关滑套.bmp</option>
<option value="">弹簧扶正器.bmp</option>
<option value="">扶正器.bmp</option>
<option value="">抽油杆.bmp</option>
<option value="">提放管柱式支撑卡瓦(作部件用1).bmp</option>
<option value="">提放管柱式支撑卡瓦(作部件用2).bmp</option>
<option value="">提放管柱式支撑卡瓦.bmp</option>
<option value="">撞击接头.bmp</option>
<option value="">旁通式气举阀.bmp</option>
<option value="">普通管柱.jpg</option>
<option value="">柱塞器.bmp</option>
<option value="">标注.bmp</option>
<option value="">标注线.bmp</option>
<option value="">桥式配产器.bmp</option>
<option value="">桥式配水器.bmp</option>
<option value="">水力泵.bmp</option>
<option value="">水泥塞.bmp</option>
<option value="">油层(大).bmp</option>
<option value="">油层(小).bmp</option>
<option value="">油管(小).bmp</option>
<option value="">油管(短).bmp</option>
<option value="">油管.bmp</option>
<option value="">泄油器.bmp</option>
<option value="">泵.bmp</option>
<option value="">活动接头.bmp</option>
<option value="">活动球座.bmp</option>
<option value="">液压支撑卡瓦.bmp</option>
<option value="">滑套配产器.bmp</option>
<option value="">滤砂筛管.bmp</option>
<option value="">爆破滑套.bmp</option>
<option value="">特殊管柱.bmp</option>
<option value="">特殊管柱.jpg</option>
<option value="">玻璃滑套.bmp</option>
<option value="">电潜泵.bmp</option>
<option value="">电缆.bmp</option>
<option value="">电缆爆炸座封工具.bmp</option>
<option value="">磁保护器.bmp</option>
<option value="">空心桥塞悬挂器.bmp</option>
<option value="">空心配水器.bmp</option>
<option value="">筛管.bmp</option>
<option value="">缓冲式压裂喷砂器.bmp</option>
<option value="">脱接器.bmp</option>
<option value="">解封座封打捞筒.bmp</option>
<option value="">轨道滑套.bmp</option>
<option value="">连接头.bmp</option>
<option value="">金属绕丝管.bmp</option>
<option value="">锚(作封隔器部件用).bmp</option>
<option value="">锚.bmp</option>
<option value="">阀式压裂喷砂器.bmp</option>
<option value="">防顶卡瓦.bmp</option>
<option value="">隔热油管.bmp</option>
</select>
<input type="button" value="加载图元" onclick="DWebOffice.LoadUnit();">
<input type="button" value="图元路径" onclick="window.confirm(DWebOffice.UnitName);">
<input type="button" value="显示对话" onclick="var iResult=window.prompt('请输入1-186的索引值:','80');DWebOffice.ShowDlg(1*iResult);">
<input type="button" value="设置元素" onclick="DWebOffice.SetField('Field_User','DigitalTitan');">
<input type="button" value="保护段落" onclick="try{DWebOffice.SetProtect(1,1,'password');}catch(e){}">
<input type="button" value="表格行数" onclick="var iTableRows=0;var iTableIndex=0;iTableIndex=window.prompt('请输入表格索引号','2');try{iTableRows=DWebOffice.GetTableRow(iTableIndex);}catch(e){}window.confirm(iTableRows);">
<input type="button" value="运行命令" onclick="var iSerial=17;iSerial=window.prompt('请输入命令索引号1-37','17');try{DWebOffice.RunCommand(iSerial);}catch(e){}">
<input type="button" value="设置页眉" onclick="DWebOffice.SetHead('页眉啊页眉');">
</td>
</tr>
</table>
NewResult.jsp[Servlet端处理数据流示例]
<%@ page contentType="text/html; charset=gb2312"%>
<%@ include file="/DataIni/DataOpen.jsp"%>
<%@ include file="/ScriptLib/Init.jsp"%>
<%
InputStream InData=null;
int iSize,iLength;
iLength=request.getContentLength();
byte[] Buffer=new byte[iLength];
byte[] Byte_File;
if(iLength>0)
{
InData=request.getInputStream();
String ContentType=request.getContentType();
iSize=InData.read(Buffer);
if(iSize!=-1)
{
//数据处理开始
String FileData=new String(Buffer,"ISO8859-1");
//
//正则字串:"name=\"";
//正则字串:"filename=\"";
String strSplit=ContentType.substring(ContentType.lastIndexOf("=")+1,ContentType.length());
String strSub[]=FileData.split(strSplit);
int iBegin,iEnd;
iBegin=0;iEnd=0;
String FieldName,FieldValue;
int bTrue;
bTrue=0;
int iPos;
iPos=0;
int iLocation;
iLocation=0;
for(int iIndex=0;iIndex<strSub.length;iIndex++)
{
strElement=strSub[iIndex];
iBegin=strElement.indexOf("name=\"",0);
if(iBegin!=-1)
{
iEnd=strElement.indexOf("\"",iBegin+6);
FieldName=strElement.substring(iBegin+6,iEnd);
iBegin=strElement.indexOf("filename=\"",0);
if(iBegin!=-1)
{
bTrue=1;
}
//
iEnd=strElement.indexOf("\r\n\r\n",0);
if(bTrue==1)
{
iLocation=0;
iPos=FileData.indexOf("filename=\"",iPos);
iPos=FileData.indexOf("\r\n",iPos)+2;
iLocation=FileData.indexOf(strSplit,iPos)-2;
FieldValue=FileData.substring(iPos,iLocation);
//FieldValue=FieldValue.replace('\255','\0');
FieldValue=FieldValue.replaceAll("DigitalTitan","\0");
Byte_File=FieldValue.getBytes("ISO8859-1");
/*
byte[] Byte_File_=FieldValue.getBytes();
Byte_File=new byte[Byte_File_.length];
for(int kIndex=0;kIndex<Byte_File_.length;kIndex++)
{
Byte_File[kIndex]=Buffer[iPos+0+kIndex];
}
*/
session.putValue(FieldName,Byte_File);
}
else
{
FieldValue=strElement.substring(iEnd+4);
session.putValue(FieldName,FieldValue.substring(0,FieldValue.indexOf("\r\n")));
}
bTrue=0;
}
}
//数据处理结束
String Author,History;
/*
if((String)session.getValue("UserId")==null)
{Author="Anonymous";}
else
{Author=(String)session.getValue("UserId");}
*/
Author="Anonymous";
java.util.Date m_Date=new java.util.Date(System.currentTimeMillis());
History=m_Date.toString();
boolean bDefault;
int iC;
oracle.sql.BLOB m_Blob;
bDefault=odbcConn.getAutoCommit();
odbcConn.setAutoCommit(false);
odbcStmt.executeUpdate("insert into Project_Design(ID,Category,Subject,Body,Author,History) values(IDSERIAL.nextval,'"+(String)session.getValue("Category")+"','"+(String)session.getValue("Subject")+"',EMPTY_BLOB(),'"+Author+"','"+History+"')");
odbcQuery="select * from Project_Design order by ID asc";
odbcRs=odbcStmt___.executeQuery(odbcQuery);
odbcRs.last();
String iID=String.valueOf((int)odbcRs.getInt("ID"));
odbcQuery="select Body from Project_Design where ID="+iID+" for Update";
odbcRs=odbcStmt___.executeQuery(odbcQuery);
if(odbcRs.next())
{
m_Blob=(oracle.sql.BLOB)odbcRs.getBlob("Body");
BufferedOutputStream pOut=new BufferedOutputStream(m_Blob.getBinaryOutputStream());
ByteArrayInputStream pIn=new ByteArrayInputStream((byte[])session.getValue("FieldName"));
while((iC=pIn.read())!=-1)
{pOut.write(iC);}
pIn.close();
pOut.close();
}
odbcConn.commit();
odbcConn.setAutoCommit(bDefault);
/*
odbcQuery="select * from Project_BaseInfo where well_no='"+(String)session.getValue("WellNo")+"'";
String bStatus;
bStatus="false";
odbcRs=odbcStmt.executeQuery(odbcQuery);
if(odbcRs.next())
{
bStatus="true";
}
odbcRs.close();
if(bStatus=="true")
{
String Base_Data[]=(String)session.getValue("WellNo").split(",");
for(int oIndex=0;oIndex<Base_Data.length;oIndex++)
{
System.out.println(Base_Data[oIndex]);
}
//odbcStmt.executeUpdate("insert into Project_BaseInfo(ID,WHERE_POSITION,CREATE_POSITION,WELL_TYPE,WELL_LENGTH,WELL_DEPH_BY_DIG,WELL_DEPTH_BY_HAND,DATE_DIG,DATA_WELL,MAX_SIZE,WELL_NO) values(IDSERIAL.nextval,'"+(String)session.getValue("WellNo")+"')");
}
*/
System.out.println("->->->->->->->");
//response.sendRedirect("/System/Project_Design/List.jsp");
}
}
%>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title></title>
<link rel="stylesheet" type="text/css" href="/StyleLib/Default_Style_Sheet.css">
</head><body onload="//window.alert('添加成功,请返回确认浏览!');//window.location.href='/System/Project_Design/List.jsp';">
<%@ include file="/TemplateLib/Head.jsp"%>
<%@ include file="/TemplateLib/Tail.jsp"%>
<%@ include file="/DataIni/DataClose.jsp"%>
</body></html>
2. 应用程序中应用ActiveX
等待完善
1.目前程序不支持Office2003,因为不支持Unicode[目前发布版为ANSI]
2.
使用OleView看看Office组件提供的接口函数,呵呵
office 啊
www.xjtushare.com找找
在这个网站上输入office 没找到对应的资料,谢谢
----------------------------------
pepsi1980(这只老鼠不会游泳) ( ) 信誉:97 2004-12-01 09:29:00 得分: 0
呵呵,电子签章嘛,我也在搞,多交流!
[email protected]
已发邮件,谢谢
-----------------
gjd111686(数字金刚) ( ) 信誉:146 ActiveX WebOffice Version 1.0.0.2
不知这个控件是其他公司的,还是自己开发的,功能较全面
对以下交流
1. 在浏览器中针对Word等处理动作[在线打开,编辑,保存](ms 提供了一个 sample 应该可以稍加修改,即可完成)
2. 复合文档数据存储在企业数据库中(IStream 和 ADO 的 IStream对象对应,我的第一想法)
3. 支持图件组态操作(如果是office,直接用vba可直接操作图件)
4. 修改留痕及版本控制(请教各位的)
谢谢 数字金刚
------------------------------------对 电子签章,大家有没有更具体的意见,我粗略看了一下 goldgrid 提供的控件
那个章,是一个 ax窗口透明控件难点是怎么保证其他人修改后,可直接标记出来,看了ms的文档,做法是用证书签名方式,这部分能直接用程序实现吗。