weboffice控件 源码

2015-12-31 14:10:00 weixin_30596735 阅读数 131
 目前WebOffice使用比较多主要有两个公司的产品,分别是江西金格和北京点聚。但是点聚的是免费的,虽然有欠缺之处,但是经过个人修改还是比较好用的,关键一点是,它免费啊!

      把一个最主要加载页面,如果读懂了这个页面的使用,其他的相当就好理解了。

      (如果需要组件和源码的给我留言)

     

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DocEdit.aspx.cs" Inherits="DocEdit" %>
<%@ Import Namespace="System.Data.OleDb"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>编辑正文</title>
    <!-- 编辑控件主要集中在此页面 -->
</head>
<body>
    <form name="myform" action="#" method="post">
      <% //获取服务器的地址
        string URL = this.Session["URL"].ToString();
        string ID;
        string DocType;
        string DocTitle = "";
        //起草文件,则ID为NULL,否则为记录的主键
        ID = Request.QueryString["ID"];
        if (ID == null || ID == "")
        {
            //获取新建文件的类型        
            DocType = Request.Form["DocType"];
        }
        else
        {
            //获取DocTitle
            DocTitle = Request.QueryString["DocTitle"];
            //获取文件的 类型      
            DocType = Request.QueryString["DocType"];
        }
      
          //默认为word文档,如果异常进入则按word处理,组织部基本处理的都是word
        if (DocType == null || DocType == "")
        {
            DocType = "doc";
        }
 %> 
     <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
          <TR>
            <TD bgColor=#3366cc><IMG height=1 alt="" width=1></TD>
          </TR>
    </TABLE>

   <table style="width: 100%" border = "0" cellpadding="0" cellspacing="0">
       <tr>
           <td valign="top" bgColor="#e5ecf9" style="height: 21px;"><p align="left"><b><strong>WebOffice演示</strong></b>
    </p></td>
       </tr>
   </table>
   <br /> <br />
    <table width="100%"  border="0" cellpadding="0" cellspacing="1" bgcolor="#3366cc">

    <tr bgcolor="#FFFFFF">
        <td bgcolor="#ffffff" rowspan="2">
            <div align="center"><strong>标题</strong></div>
        </td>
        <td rowspan="2">
            <input name="DocTitle" value= "<%if(DocTitle=="" ) {Response.Write("text");} else {Response.Write(DocTitle);} %>" size="14" id="Text1"/></td>
    <td  rowspan="2" >
              &nbsp; &nbsp;<input name="DocFilePath" type="file" size="34" />
       <input type="button" value="打开本地文件" onclick="return docOpen()" id="Button1" style="width: 115px" /></td>
    <td rowspan="2" bgcolor="#FFFFFF" style="width: 344px"><div align="center">
      <input type="button" class="btn" value="显示最终文稿" onclick="return UnShowRevisions()" />
            <input type="button"  value="从服务器下载"  onclick="return WebOffice1_NotifyCtrlReady()" style="width: 96px"/>
            <input type="button"  value="上传到服务器"  onclick="return SaveDoc()" style="width: 98px"/>
              <input type="button" style="display:none" value="返回"  onclick="return return_onclick()"/></div></td>
    </tr>

    <tr bgcolor="#FFFFFF">
 </tr>

    <tr bgcolor="#FFFFFF">
   <td valign="top" bgcolor="#FFFFFF" style="height: 560px">
  <!-- -------------------===  Start 嵌套Table ===------------------------------- -->
  <table width="100%"  border="0" cellpadding="0">

          <tr>
            <td  class="maintxt">用户名:<br />
              <input name="UserName" type="text" value="Test" style="width:74px;" maxlength="10" /><br />
                <input type="button" value="设置用户"  onclick="return SetUserName()" class="btn" /></td>
    </tr>

          <tr><td class="maintxt">
   <hr  size="1" />保护密码:<br />
              <input name="docPwd" type="text" value="Password" style="width:74px;" maxlength="10" /><br />
       <input type="button" class="btn" value="保护文档" onclick="return ProtectFull()" /></td>
    </tr>

          <tr><td><input type="button" class="btn" value="解除保护" onclick="return UnProtect()" /></td></tr>

          <tr><td>
   <hr  size="1" />
     <input  type="button" class="btn" value="修订文档" onclick="return ProtectRevision()" /></td>
    </tr>

          <tr><td><input type="button" class="btn" value="显示修订" onclick="return ShowRevisions()" /></td></tr>
          <tr><td><input type="button" class="btn" value="隐藏修订" onclick="return UnShowRevisions()" /></td></tr>
          <tr><td><input type="button" class="btn" value="接受修订" onclick="return AcceptAllRevisions()" /></td></tr>

          <tr><td>
   <hr size="1" />
             <input  type="button" class="btn" value="设置书签" onclick="return addBookmark()" /></td>
       </tr>

          <tr>
              <td rowspan="4">
                  <input  type="button" class="btn" value="套加红头" onclick="return addRedHead()" /></td>
          </tr>
        </table>
     <!-- -------------------=== End 嵌套Table ===------------------------------- -->
                <select id="Select1" name="select" style="width: 83px">
                    <option selected="selected" value="<%=URL %>/template/tmp1.doc">部模板1</option>
                    <option value="<%=URL %>/template/tmp2.doc">市模板1</option>
                    <option value="<%=URL %>/template/tmp3.doc">县模板1</option>
                </select>
            </td>

   <td colspan="3" valign="top" style="height: 560px">
  <!-- -----------------------------== 装载weboffice控件 ==----------------------------------->  
    <script src="LoadWebOffice.js"></script>
        <!-- --------------------------------==  结束装载控件 ==------------------------------------->
   </td>
    </tr>
  </table>
  <br />  <br />
          <table style="width: 100%" border = "0" cellpadding="0" cellspacing="0">
               <tr>
                   <td valign="top" bgColor="#e5ecf9" ><span style="color: red">服务器地址:<%=this.Session["URL"].ToString() %> </span>
                </td>
               </tr>
           </table>
          <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
          <TR>
            <TD bgColor=#3366cc><IMG height=1 alt="" width=1></TD>
          </TR>
    </TABLE>
</form>
</body>
</html>
<script language="javascript" type="text/javascript">
// ---------------------== 关闭页面时调用此函数,关闭文档--------------------- //
function window_onunload() {
 document.all.WebOffice1.Close();
}
 
// ---------------------------== 解除文档保护 ==---------------------------------- //
function UnProtect() {
 document.all.WebOffice1.ProtectDoc(0,1, myform.docPwd.value);
}

// ---------------------------== 设置文档保护 ==---------------------------------- //
function ProtectFull() {
 document.all.WebOffice1.ProtectDoc(1,1, myform.docPwd.value);
}
// -----------------------------== 修订文档 ==------------------------------------ //
function ProtectRevision() {
 document.all.WebOffice1.SetTrackRevisions(1)
}

// -----------------------------== 隐藏修订 ==------------------------------------ //
function UnShowRevisions() {
 document.all.WebOffice1.ShowRevisions(0);
}

// --------------------------== 显示当前修订 ==---------------------------------- //
function ShowRevisions() {
 document.all.WebOffice1.ShowRevisions(1);

}

// -------------------------== 接受当前所有修订 ------------------------------ //
function AcceptAllRevisions() {
  document.all.WebOffice1.SetTrackRevisions(4);
}

// ---------------------------== 设置当前操作用户 ==------------------------------- //
function SetUserName() {
 if(myform.UserName.value ==""){
  alert("用户名不能为空");
  myform.UserName.focus();
  return false;
 }
  document.all.WebOffice1.SetCurrUserName(myform.UserName.value);
}

// -------------------------=== 设置书签套加红头 ===------------------------------ //
function addBookmark() {
 document.all.WebOffice1.SetFieldValue("mark_1", "安徽省委组织部红头文件::ADDMARK::");     
}

// -------------------------=== 设置书签套加红头 ===------------------------------ //
function addRedHead() {
    if(document.getElementById("Select1").value == "")//判断是否选择模板
    {
    alert("请选择模板!")
    return false;
    }
   
    document.all.WebOffice1.SetFieldValue("mark_1", "", "::ADDMARK::");   // 添加书签
 document.all.WebOffice1.SetFieldValue("mark_1", document.getElementById("Select1").value, "::FILE::");
}

// -----------------------------== 返回首页 ==------------------------------------ //
function return_onclick() {
 document.all.WebOffice1.Close();
 window.location.href  = "Default.aspx"
}
// 打开本地文件
function docOpen() {
    //alert(myform.DocFilePath.value)
 if(myform.DocFilePath.value == "") {
  alert("文件路径不可以为空");
  myform.DocFilePath.focus();
  return false;
 }
 var flag;
 //LoadOriginalFile接口装载文件

 flag = document.all.WebOffice1.LoadOriginalFile(myform.DocFilePath.value,"<%=DocType%>");
 if( 0 == flag){
  alert("文件打开失败,请检查路径是否正确");
  myform.DocFilePath.focus();
  return false;
 } 
}
 
// -----------------------------== 保存文档 ==------------------------------------ //
function SaveDoc() {
  if(myform.DocTitle.value ==""){
  alert("标题不可为空")
  myform.DocTitle.focus();
  return false;
 }
 //恢复被屏蔽的菜单项和快捷键
    document.all.WebOffice1.SetToolBarButton2("Standard",1,3);
    document.all.WebOffice1.SetToolBarButton2("Standard",2,3);
    document.all.WebOffice1.SetToolBarButton2("Standard",3,3);
    document.all.WebOffice1.SetToolBarButton2("Standard",6,3);          
    <%if (DocType   == "doc") {%>
        //恢复文件菜单项
        document.all.WebOffice1.SetToolBarButton2("Menu Bar",1,4);
        //恢复 保存快捷键(Ctrl+S)
        document.all.WebOffice1.SetKeyCtrl(595,0,0);
        //恢复 打印快捷键(Ctrl+P)
        document.all.WebOffice1.SetKeyCtrl(592,0,0);
    <%}else if(DocType   == "xls") {%>
        //恢复文件菜单项
        document.all.WebOffice1.SetToolBarButton2("Worksheet Menu Bar",1,4);        
    <%} %>
//初始化Http引擎
 document.all.WebOffice1.HttpInit();   
//添加相应的Post元素
 <%
 if(ID != ""){         
 %>
 document.all.WebOffice1.SetTrackRevisions(0);
 document.all.WebOffice1.ShowRevisions(0);
 document.all.WebOffice1.HttpAddPostString("ID","<%=ID%>");
  <%
  }
  %> 
 document.all.WebOffice1.HttpAddPostString("DocTitle", myform.DocTitle.value);
 document.all.WebOffice1.HttpAddPostString("DocType","<%=DocType%>");
 //把当前文档添加到Post元素列表中,文件的标识符䶿DocContent
 document.all.WebOffice1.HttpAddPostCurrFile("DocContent","");  // 涓婁紶鏂囦欢
 var vtRet;
    //HttpPost执行上传的动仿WebOffice支持Http的直接上传,在upload.aspx的页面中,解析Post过去的数慿
    //拆分出Post元素和文件数据,可以有选择性的保存到数据库中,或保存在服务器的文件中⾿
 //HttpPost的返回值,根据upload.aspx中的设置,返回upload.aspx中Response.Write回来的数据
 vtRet = document.all.WebOffice1.HttpPost("<%=URL %>/upload.aspx");

  //alert(vtRet.Trim());
  if(vtRet.Trim() == "succeed"){
  alert("文件上传成功"); 
 }else{
  alert("文件上传失败");
 }
 //return_onclick();
}
//-->
</script>
<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>
<!--
    //实现Trim,LTrim和RTrim的功能
    String.prototype.Trim = function()
    {
    return this.replace(/(^\s*)|(\s*$)/g, "");
    }

    String.prototype.LTrim = function()
    {
    return this.replace(/(^\s*)/g, "");
    }

    String.prototype.RTrim = function()
    {
    return this.replace(/(\s*$)/g, "");
    }

function WebOffice1_NotifyCtrlReady() {
 //LoadOriginalFile接口装载文件,
 //如果是编辑已有文件,则文件路径传给LoadOriginalFile的第一个参数
 alert("终于执行这里了!");
 <%
     if (ID == null || ID==""){
    %>
        document.all.WebOffice1.LoadOriginalFile("","<%=DocType%>");
 <%}
 else
 {%>       
       // document.all.WebOffice1.LoadOriginalFile("<%=URL %>/GetDoc.aspx?ID=<%=ID%>","<%=DocType%>");
       //alert("<%=URL %>/GetDoc.aspx?ID=yangweili1");
        document.all.WebOffice1.LoadOriginalFile("<%=URL %>/GetDoc.aspx?ID=yangweili1","doc");
       alert("加载成功了!");
      document.all.WebOffice1.SetTrackRevisions(1);
        document.all.WebOffice1.ShowRevisions(1);   
    <%}%>        
 

    //屏蔽标准工具栏的前几个按钮
    document.all.WebOffice1.SetToolBarButton2("Standard",1,1);
    document.all.WebOffice1.SetToolBarButton2("Standard",2,1);
    document.all.WebOffice1.SetToolBarButton2("Standard",3,1);
    document.all.WebOffice1.SetToolBarButton2("Standard",6,1);   
          
   <%if (DocType   == "doc") {%>
        //屏蔽文件菜单项
        document.all.WebOffice1.SetToolBarButton2("Menu Bar",1,1);
        //屏蔽 保存快捷键(Ctrl+S)
        document.all.WebOffice1.SetKeyCtrl(595,-1,0);
        //屏蔽 打印快捷键(Ctrl+P)
        document.all.WebOffice1.SetKeyCtrl(592,-1,0);
    <%}else if(DocType   == "xls") {%>
        //屏蔽文件菜单项
        document.all.WebOffice1.SetToolBarButton2("Worksheet Menu Bar",1,1);        
    <%} %>
}

//-->
</SCRIPT>
<!-- --------------------===  Weboffice初始化完成事件--------------------- -->

<SCRIPT LANGUAGE=javascript FOR=WebOffice1 EVENT=NotifyCtrlReady>
<!--
 WebOffice1_NotifyCtrlReady() // 在装载完Weboffice(执行<object>...</object>)控件后自动执行WebOffice1_NotifyCtrlReady方法
//-->
</SCRIPT>

 

转载于:https://www.cnblogs.com/xuxiaoshuan/p/5091571.html

2009-08-18 10:24:00 nhmsunny 阅读数 1563

WebOffice是一款由北京点聚信息技术有限公司提供的完全免费(商业用途也免费)且功能强大的在线Word/excel/wps编辑辅助控件,可以实现:
1.在线编辑Word、Excel、PPT、WPS... ...
2.全面支持MS Office的界面定制,包括对于Office2007的全面支持
3.修订留痕
4.限制打印、保存、复制
5.直接保存到服务器,支持标准Http Post协议
6.强大的书签管理
7.套红、文档保护
8.模板管理
9.其他功能扩展
10.提供开发论坛http://www.dianju.cn/forum/,在其中提供软件更新及问题回答服务

本控件不同于其它同类软件,不是基于微软的开放源码DsoFramer,也不基于OLE,可以解决DsoFramer及其派生产品的一些稳定性问题
本控件不同于其它同类收费软件,本控件完全免费和界面完全可控制。
点聚会定期更新本控件,并解答论坛上的询问,免费不代表免服务,每一个使用者都能得到及时服务。
安装包内包含:
1.WebOffice安装包(仅包含WebOffice控件)
2.WebOffice接口SDK
3.WebOffice网页接口调用例子
4.DES手写及签章系统(Office签章系统)试用版。
5.点聚产品白皮书

WebOffice组件可以无缝集成点聚公司的电子签章和手写审批类产品。

点聚信息(http://www.dianju.com.cn)是国内专业的安全和文档中间件软件制造商。公司注重自主知识产权产品的研发,始终坚持技术为本、服务为先的原则,在电子印章、手写签批、安全版式文档和电子表单等领域处于国内领先水平。
点聚自主研发的版式文件系统独创性的将整个系统缩小为1M大小的组件,并在多项重要技术指标上领先PDF和其它版式格式。
点聚支持全系列手写及签章解决方案,可同时提供Office签章系统(Word/Excel/Wps)、网页签章系统、版式签章系统.
点聚是国内唯一一家同时拥有国密和军密资质的电子印章及安全文档产品提供商(国密、军密、公安部销售许可)。

 

服务器下载地址:http://www.dianju.com.cn/download/weboffice.zip
其他网站下载地址:

http://www.dianju.com.cn/download/weboffice.zip
http://www.duote.com/soft/18241.html#comment
http://xiazai.zol.com.cn/detail/38/375881.shtml
http://mydown.yesky.com/soft/utilitie/officetools/234/459234.shtml
http://www.newhua.com/soft/90267.htm

2010-01-23 23:09:41 iteye_2812 阅读数 371

 

OA办公都离不在一个在线的Office编辑功能,在政府的办公系统中,在线的Office文档编辑及审批功能是必不可少的,微软目前提供了一个dsoframer.ocx控件可以实现这个功能,不过这个控件并没有较好提供完善的升级服务,所以对Office2007的支持并不好,而国内有不少公司或开发人员却基于此开发了不少的功能,不过大部分都需要收费,北京却有一家点聚的公司开发了WebOffice在控件,并且提供免费升级服务,这让OA开发用户多了一种新的选择。

 

出于此免费的方案,Joffice有其中一个方案是基于它来集成在线的文档编辑功能,而电子签章可以根据用户的需求与该公司进行购买集成,以下为Joffice集成的JOffice控件其中一个界面,支持保留痕迹,清除痕迹。

 

 

 

代码如下:

 

/**
 * @author csx
 * @description 公文模板在线显示及编辑窗口
 * @company 广州宏天软件有限公司
 * @param {} docPath
 * @param {} readOnly
 */
var OfficeTemplateView=function(docPath,readOnly,callback){
	this.docPath=docPath;
	this.readOnly=readOnly==null?false:readOnly;
	
	var objHtml = "<object id='WebOfficeObj' height='100%' width='100%' style='LEFT: 0px; TOP: 0px'  classid='clsid:E77E049B-23FC-4DB8-B756-60529A35FAD5' codebase='"+__ctxPath+"/js/core/weboffice/HWPostil_V3074.cab#V6,0,4,2'>";
				objHtml+="<param name='TitlebarColor' value='7898C2'/>";
				objHtml +="</object>";
				//文件保存在服务器端的路径			
				var win=new Ext.Window({
					title:'公文模板详细信息',
					height:500,
					width:700,
					maximizable:true,
					html:objHtml
				});
				
				//是否只读
				if(!this.readOnly){
					win.buttonAlign='center';
					win.buttons=[
					{
						iconCls:'btn-save',
						text:'保存',
						handler:function(){
							
								var url=__fullPath+"/file-upload";
								document.all.WebOfficeObj.HttpInit();
								document.all.WebOfficeObj.HttpAddPostString('file_cat', 'archive');
								//overwrite file path
								document.all.WebOfficeObj.HttpAddPostString('file_path', docPath);
								
								document.all.WebOfficeObj.HttpAddPostCurrFile("AipFile ","");	
								// 提交上传文件
								returnValue = document.all.WebOfficeObj.HttpPost(url);
								var obj;
								eval('obj='+returnValue+";");
								
								if(obj.success){
									Ext.ux.Toast.msg('操作信息','已经成功保存至服务器!');
									if(callback!=null){
										callback.call(this,obj.fileId,obj.filePath);
									}
									win.close();
								}else{
									Ext.ux.Toast.msg('操作信息','操作出错,请联系管理员!');
								}
							
						}//end of handler
					},
					{
						iconCls:'btn-cancel',
						text:'关闭',
						handler:function(){
							win.close();
						}
					},
					{
						text:'保留修改痕迹',
						handler:function(){
							 document.all.WebOfficeObj.SetTrackRevisions(1);
				 			 document.all.WebOfficeObj.SetCurrUserName(curUserInfo.fullname);
						}
					},
					{
						text:'取消保留痕迹',
						handler:function(){
							 document.all.WebOfficeObj.SetTrackRevisions(0);
						}
					},
					{
						text:'清除痕迹',
						handler:function(){
							 document.all.WebOfficeObj.SetTrackRevisions(4);
						}
					}
					];
				}
				
				win.show();
				//隐藏保存与返回的按钮
				//document.all.WebOfficeObj.HideMenuItem(0x04 + 0x2000);
				document.all.WebOfficeObj.ShowToolBar=false;
				var fullDocPath=''
				if(this.docPath!=null && this.docPath!=''){
					fullDocPath=__fullPath+'/attachFiles/' + this.docPath;
				}
				document.all.WebOfficeObj.LoadOriginalFile(fullDocPath,'doc');
				
				//一定需要加上这个控制,保证关闭窗口后,office实例也需要关闭
				win.on('close',function(){
					try{
						document.all.WebOfficeObj.Close();
					}catch(ex){
					}
				});
				//当窗口关闭时也需要做同样的操作
				window.onUnload=function(){
					try{
						document.all.WebOfficeObj.Close();
					}catch(ex){
					}
				}
};
 
2012-07-28 10:39:00 weixin_33958366 阅读数 33

最近项目中需要用到在线编辑Office文档。最后找来找去发现有个免费的控件“点聚WebOffice”。经过两天的测试发现还不错。虽然里面也有些不完善的地方。先说一下不足吧,想用的同学可以斟酌。

1、在Widnows 7 x64下运行不稳定,经常会导致ie浏览器崩溃。

2、打开的本地文件不能是2007新格式的文档,如:docx/xlsx。如果打开一个docx的文档,然后保存到服务器端时会发现没有任何数据(使用PHP时,查看$_FILES)。

3、客户端安装的即便是Office2010,通过控件新建一个文档,然后保存到服务器端时,格式还是2003以前的文档格式。即后缀还是使用doc/xls。

4、客户端安装的Office最好是完整版的,不要安装精简版的。会导致打不开应用程序(官方的QQ群里有些同学提出的此bug)。

5、控件不支持https。

 

下面是我使用PHP时的demo,此demo是根据官方提供的asp版来修改的,仅做了项目中用到的一部分,如:新建与编辑文档。

1、首先看一下目录结构:

在站点的根目录下weboffice_v6.0.5.0.cab是必须的,这样的话,当客户端没有安装控件时,我们就可以直接通过让浏览器下载此文件来安装。

2、开始编写demo.php页面,此页面有3个按钮:新建Word文档、新建Excel文档、刷新服务器端文件列表。

刷新服务器端文件列表按钮的作用是获取我们保存的文档列表,即uploadfiles目录下面的所有的文档。

当单击新建时会通过一个隐藏的form表单来打开一个新的页面(webOffice.php),通过GET方式传递fileType参数。fileType值为:doc或xls。

通过单击服务器端文件列表右侧的编辑按钮道理相同,仅传递的参数有所不同。编辑文件时只需要传递fileName即可。

View Code
 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>WebOffice Demo</title>
 6 <script type="text/javascript">
 7     function editFile(path) {
 8         var f = document.myForm;
 9         f.action = 'webOffice.php?fileName=' + path;
10         f.target = '_blank';
11         f.submit();
12     }
13     
14     function createFile(type) {
15         var f = document.myForm;
16         f.action = 'webOffice.php?fileType=' + type;
17         f.target = '_blank';
18         f.submit();
19     }
20 </script>
21 </head>
22 
23 <body>
24 <form name="myForm" action="webOffice.php" method="post">
25     <input type="hidden" id="fileName" name="fileName" />
26     <input type="button" id="newDoc" name="newDoc" value="新建Word文档" onclick="createFile('doc')" />
27     <input type="button" id="newDoc" name="newDoc" value="新建Excel文档" onclick="createFile('xls')" />
28 </form>
29 <form action="?" method="post">
30 <input type="submit" id="getFiles" name="getFiles" value="刷新服务器端文件列表" />
31 </form>
32 <table border="1" width="400" cellspacing="0" cellpadding="0">
33     <tr>
34         <th>文件名称</th>
35         <th width=60>操作</th>
36     </tr>
37 <?php
38     if ($_POST['getFiles'] != '') {
39         $files = array();
40         $path = dirname(__FILE__) . "/uploadfiles";
41         
42         if ($handle = opendir($path)) {
43             while (false !== ($file = readdir($handle))) {
44                 $ext = substr($file, -3);
45                 
46                 if ($ext == 'doc' || $ext == 'xls') {
47                     // 如果服务器是Windows,文件名称需要转换成UTF-8
48                     $files[] = $_ENV['OS'] == 'Windows_NT' ? iconv('GB18030', 'UTF-8//IGNORE', $file) : $file;
49                 }
50             }
51             closedir($handle);
52         }
53         
54         if (count($files) > 0) {
55             foreach ($files as $file) {
56                 echo "<tr><td>$file</td><td><input type='button' value='编辑' onclick='editFile(\"" . $file . "\")' /></td>";
57             }
58         }
59     }
60 ?>
61 </table>
62 </body>
63 </html>

3、编写webOffice.php页面。首先要嵌入webOffice控件,可以通过script标签来插入,官方提供的这个js文件其实很简单,就是输出一个object标签对象。在这里面需要注意的是控件的高度,最好不要使用100%而是使用一个固定的值,如果使用百分比,那么控件所属的容器就要指定高度。

1 var s = ""
2 s += "<object id=WebOffice1 height=586 width='100%' style='LEFT: 0px; TOP: 0px'  classid='clsid:E77E049B-23FC-4DB8-B756-60529A35FAD5' codebase=weboffice_v6.0.5.0.cab#Version=6,0,5,0>"
3 s +="<param name='_ExtentX' value='6350'><param name='_ExtentY' value='6350'>"
4 s +="</OBJECT>"
5 document.write(s)

嵌入控件之后要监听控件的NotifyCtrlReady事件,官方提供的方式是使用script标签的方式来监听,而不是通过attachEvent的方式,标签方式有一个优点即可以不必将代码写在嵌入控件之后,我们可以将其放在head部分。

 1 <SCRIPT LANGUAGE=javascript FOR=WebOffice1 EVENT=NotifyCtrlReady>
 2 <!--
 3     var fn = '<?php echo $fileName; ?>';
 4     
 5     if (fn) {
 6         fn = './uploadfiles/' + fn;
 7     }
 8     
 9     // 在装载完Weboffice(执行<object>...</object>)控件后执行 "WebOffice1_NotifyCtrlReady"方法
10     WebOffice1_NotifyCtrlReady(fn, "<?php echo $fileType; ?>");
11 //-->
12 </SCRIPT>

这个事件也就是调用WebOffice1_NotifyCtrlReady函数,而这个函数的作用则是根据fileName来判断是新建一个文档还是打开一个文档。

 1     /**
 2      * 控件初始化WebOffice方法
 3      * @param {String} fileName 要打开的文件名称
 4      * @param {String} fileType 要打开的文件类型,doc/
 5      */
 6     function WebOffice1_NotifyCtrlReady(fileName, fileType) {
 7         var office = document.all.WebOffice1;
 8         if (fileName) {
 9             office.LoadOriginalFile(fileName, fileType);
10         } else {
11             office.LoadOriginalFile("", fileType);
12         }
13     }

最后一步也就是如何保存到服务器端。要将文档保存到服务器端需要分四步走。

第一步,初始化HTTP。office.HttpInit();

第二步,由于weboffice的提交数据跟平常的form表单的提交没什么区别,因此我们可以在此进行附加一些其他的数据,如文件名。office.HttpAddPostString("fileName", fileName);

第三步,将我们需要保存的文档附加进来。office.HttpAddPostCurrFile("docContent", '');第二个参数就是以什么文件名传递给服务器,直接传递一个空字符串即可。

第四步,将数据提交到一个php接收页。office.HttpPost("./resources/php/upload.php");

这四步,除了第二步之外其他的三步都是必不可少的。

下面是webOffice.php页面的完整代码:

View Code
 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>Office在线编辑器</title>
 6 </head>
 7 <?php
 8     $fileName = $_GET['fileName'];
 9     
10     $fileType = $_GET['fileType'];
11     
12     if ($fileType == '') {
13         $fileType = strtolower(substr($fileName, -3)) == 'doc' ? 'doc' : 'xls';
14     }
15 ?>
16 <script type="text/javascript">
17     /**
18      * 控件初始化WebOffice方法
19      * @param {String} fileName 要打开的文件名称
20      * @param {String} fileType 要打开的文件类型,doc/
21      */
22     function WebOffice1_NotifyCtrlReady(fileName, fileType) {
23         var office = document.all.WebOffice1;
24         if (fileName) {
25             office.LoadOriginalFile(fileName, fileType);
26         } else {
27             office.LoadOriginalFile("", fileType);
28         }
29     }
30     
31     // 关闭页面时调用此函数,关闭文件
32     function window_onunload() {
33         document.all.WebOffice1.Close();
34     }
35     
36     function SaveDoc() {
37         var fileType = '<?php echo $fileType; ?>',
38             fileName = document.myForm.fileName.value,
39             office   = document.all.WebOffice1;
40         
41         if (!~fileName.indexOf('.' + fileType)) { fileName += '.' + fileType; }
42         
43         office.HttpInit();
44         
45         // 添加相应的Post元素 
46         office.HttpAddPostString("fileName", fileName);
47         
48         office.HttpAddPostCurrFile("docContent", '');        // 上传文件
49     
50         var result = office.HttpPost("./resources/php/upload.php");
51         
52         if("OK" == result){
53             alert("文件上传成功");    
54             window.close();
55         }else
56             alert("文件上传失败")
57     }
58 
59 </script>
60 <SCRIPT LANGUAGE=javascript FOR=WebOffice1 EVENT=NotifyCtrlReady>
61 <!--
62     var fn = '<?php echo $fileName; ?>';
63     
64     if (fn) {
65         fn = './uploadfiles/' + fn;
66     }
67     
68     // 在装载完Weboffice(执行<object>...</object>)控件后执行 "WebOffice1_NotifyCtrlReady"方法
69     WebOffice1_NotifyCtrlReady(fn, "<?php echo $fileType; ?>");
70 //-->
71 </SCRIPT>
72 
73 <body onunload="window_onunload()">
74 <form name="myForm" method="post">
75     <label for="fileName">文件名:</label>
76     <input type="text" id="fileName" name="fileName" value="<?php echo $fileName; ?>" />
77     <input type="submit" id="saveFile" name="saveFile" value="保存文件到服务器" onclick="SaveDoc()" />
78 </form>
79 <script src="resources/js/LoadWebOffice.js"></script>
80 </body>
81 </html>

4、编写upload.php页面。即接收上传的文件并且保存到uploadfiles目录下。大家还是直接看代码吧,php上传没什么可说的,很简单,不像是ASP那么麻烦。

在upload.php页面中用到了一个uf.class.php类,我简单的封装的一个上传类。

uf.class.php
  1 <?php
  2     /**
  3      * PHP上传文件
  4      * 公开属性,overwrite,默认true
  5      */
  6     class uploadFile {
  7         private $name;                // 上传表单的name
  8         private $fileName;            // 文件名
  9         private $uploadDir;            // 文件存放目录
 10         private $type;                // 允许上传的文件类型
 11         public $overwrite;            // 是否覆盖已存在的文件
 12         
 13         function __construct() {
 14             $this->name = 'file';
 15             $this->fileName = '';
 16             $this->uploadDir = 'D:/Codes/WebOffice/uploadfiles/';
 17             $this->type = array("xlsx", "doc", "docx", "xls");
 18             $this->overwrite = true;
 19         }
 20         
 21         /**
 22          * 检测文件后缀
 23          * @param {String} $f 要检测的文件名称
 24          */
 25         public function fileExt($f) {
 26             return substr(strrchr($f, '.'), 1);
 27         }
 28         
 29         /**
 30          * 设置上传表单的name
 31          * @param {String} $n 表单的name
 32          */
 33         public function setName($n) {
 34             if ($n == '') {
 35                 return false;
 36             } else {
 37                 $this->name = $n;
 38             }
 39         }
 40         
 41         /**
 42          * 设置文件名
 43          * @param {String} $fn 文件名
 44          */
 45         public function setFileName($fn) {
 46             if ($fn == '') {
 47                 return false;
 48             }
 49             $this->fileName = $fn;
 50             return true;
 51         }
 52         
 53         /**
 54          * 设置文件存放目录
 55          * @param {String} $p 文件存放目录
 56          */
 57         public function setPath($p) {
 58             if ($p == '') {
 59                 return false;
 60             }
 61             $this->uploadDir = $p;
 62             return true;
 63         }
 64         
 65         /**
 66          * 设置允许上传的文件格式
 67          * @param {Array} $t 文件格式数组
 68          */
 69         public function setFileType($t) {
 70             if (is_array($t)) {
 71                 $this->type = $t;
 72                 return true;
 73             } else {
 74                 return false;
 75             }
 76         }
 77         
 78         /**
 79          * 上传文件
 80          */
 81         public function upload() {
 82             if ($this->fileName == '') {
 83                 $this->fileName = $_FILES[$this->name]['name'];
 84             }
 85             
 86             //判断文件类型
 87             /*if(!in_array(strtolower($this->fileExt($_FILES[$this->name]['name'])), $this->type)) {
 88                 echo "<script>alert('您只能上传以下类型文件: ".implode(",",$this->type)."');</script>";
 89                 return '';
 90             } else {*/
 91                 $uploadfile = $this->uploadDir.$this->fileName;
 92                 
 93                 if (!$this->overwrite && file_exists($uploadfile)) {
 94                     /*echo "<script>alert('文件已经存在!');</script>";*/
 95                     return '';
 96                 }
 97                 
 98                 if (move_uploaded_file($_FILES[$this->name]['tmp_name'], $uploadfile)) {
 99                     /*echo "<script>alert('上传成功!');</script>";*/
100                     return $uploadfile;
101                 }
102             /*}*/
103         }
104     }
105 ?>
 1 <?php
 2     require_once('uf.class.php');
 3     $upload = new uploadFile();
 4     $upload->setName('docContent');
 5     if ($_ENV['OS'] != 'Windows_NT') {
 6         $upload->setPath('/var/ins-g/webOffice/uploadfiles/');
 7     }
 8     $upload->setFileName($_POST['fileName']);
 9     $result = $upload->upload();
10     
11     echo "OK";
12 ?>

5、如果有同学跟我一样,项目是跑在https下,但此控件又不支持https,所以我们还是创建一个虚拟主机来专门的跑这个在线编辑。这也是没有办法的办法。

找到apache的配置文件httpd.conf。在最后添加以下几行配置信息。

Listen 88
<VirtualHost *:88>
    DocumentRoot /var/ins-g/webOffice
    SSLEngine off
</VirtualHost>

Documentroot的路径即为插件程序所在的目录。SSLEngine off即关闭ssl而用http来访问。

还要注意要设置uploadfiles目录有可写的权限。

一切就绪后重启apache即可。

 

完整的示例与官方开发文档可以单击下面的链接进行下载。

http://pan.baidu.com/netdisk/singlepublic?fid=759613_3581574499

转载于:https://www.cnblogs.com/AUOONG/archive/2012/07/28/2612884.html