目录
- 前言
- 什么是ntko
- 准备工作
- 实战演练
- 总结
一、前言
Web开发中经常需要用到在线处理office文档的功能,现在市面上有一些常用的Web页面调用显示Office的控件技术,用起来很方便。 有一些第三方ActiveX浏览器控件:比如科瀚的SOAOffice中间件、卓正软件的pageoffice控件、WebOffice控件还有我这篇文 章所要说到的NTKO。
二、什么是NTKO
通俗易懂来讲就是能够直接在浏览器上查看编辑word文档,并保存到web服务器上的控件。
借用官方的话,是能够在IE,火狐,谷歌等内核浏览器中直接编辑WPS,MS Office ,金山电子表等文档并保存到web服务器上,实现文档和电子表格的统一管理。并具备痕迹保留、模板套红、二维码、pdf及tif阅读等办公自动化系统的必 备功能。大家可以具体查看官网释义。
优点:
- 能够支持跨浏览器编辑文档。
- 支持多种开发语言(asp、asp.net、jsp、php、vb.net、c#等)。
- 支持多线程上传下载等
缺点:
- 打开文档速度有点慢,可能和电脑性能有关系。
- 目前功能还不完善,暂时没有SOAOffice提供的功能多。
三、准备工作
测试环境:浏览器:IE7及以上;操作系统:Windows操作系统;本地Office:Office 2003-2013;(听说ntko还不支持office 2016)注意Office必须是完整版的
官方提供的js,css,cab: 1.ntko.js 2.ntkoofficecontrol.js 3.ComFun_OA8.js 4.OfficeControl.cab 5.Css_One.css (这些官网都能下载到)
.cab文件百度百科的意思是:windows的压缩格式,用winrar可以打开,但有些是经过加密的,用一般的压缩程序都是打不开的。这里的OfficeControl是必不可少的,他是Web页面调用本地服务器的接口。
由于NTKO是ActiveX控件,通过浏览器操作本地控件时,需要通过操作的用户权限必须是管理员用户,这样才能正常加载。因此通过将应用系统站点加入到IE浏览器可信任站点中可以解决这个问题。设置完成之后重启浏览器
如果出现不能装载文档控件,请在检查浏览器的选项中检查浏览器的安全设置。官网的解决办法如下:
此问题和控件本身无关,为了解决NTKO不能自动装载的问题,我们先来看看浏览器对象所涉及到的步骤。
首先是HTML中引用的代码:
<object id="TANGER_OCX" classid="clsid:C9BC4DFF-4248-4a3c-8A49-63A7D317F404" codebase="/path/to/OfficeControl.cab#version=4,0,0,5" width="100%" height="100%">
1.id="TANGER_OCX" 是标识控件js的编程标识,通过documnet.all("TANGER_OCX")得到控件的引用。
2.clsid:C9BC4DFF-4248-4a3c-8A49-63A7D317F404 标识ntko文档的唯一标识,浏览器通过clsid来判定访问网页的客户机有没有安装ntko。
3.codebase 这个不用说了,看一下大概知道这是放置文件路径的意思,version代表控件版本号。
出现装载文档控件,请在检查浏览器的选项中检查浏览器的安全设置问题大概有下面几个原因
1)本地Internet选项中的安全设定,在当前区域禁止下载已签名的ActiveX控件;
2)引用控件的网页中,<object 标记中的codebase属性指定不正确,导致浏览器无法下载OfficeControl.cab文件;
3)服务器上的OfficeControl.cab被破坏,失去正确的签名,或者使用了不正确的版本;
4)虽然服务器上的OfficeControl.cab正确,但是浏览器下载的有问题。这个可能会因为某些WEB服务器的mime的错误配置引起,导致服务器将OfficeControl.cab不以二进制文件的形式发送给浏览器;
5)本地Internet选项中的安全设定,在当前区域不允许运行ActiveX控件和插件;
6)还有可能是由于微软的补丁引起,或者其他防病毒软件或者过滤软件阻止了控件安装
如果还有其他问题,可以登录官网问题处理解决。
四、实战演练
下面就利用我最近在做的一个项目实例讲一下ntko的原理,功能需求就贴图显示把。
首先是在页面中新增数据,提交操作后往对应数据库数据表中插入数据。
图1
其次在提交操作提示成功后,在申报材料下填报,点击填报后,跳转申报表页面,调用ntko控件,如图3。
图2
申报表页面如下图,因为是调用的本地Office,所以页面上保留Office中所带有的功能,包括常见的字体设置,插入,设计等等。
图3
至于在线编辑word中的内容是数据库中对应字段通过书签形式绑定到word模板中,如图4。在线编辑首先需要创建一个空word模板,当然word中样式自己排版,然后将需要绑定字段的地方插入书签,书签是对应数据表中的字段绑定。
图4
最后在html页面 首次加载页面js中引用一下方法,有些不懂的释义可以查阅官网Api了解。
function window_onload() {
var DocPrintUrl = '<%=ViewState["DocPrintUrl"].ToString() %>';//获取doc模板地址
//var DocPrintUrl = 'PX_OpenFile_List.aspx';
OpenEditOffice(DocPrintUrl, "1");//调用ntko.js中编辑文档方法
SetReviewMode(true);//修订模式
setShowRevisions(false);//显示痕迹
TANGER_OCX_OBJ.Menubar = true;//是否显示菜单栏
TANGER_OCX_OBJ.TitleBar = true;//是否显示标题栏
SetBookmarkValue("ZX_QYMC", '<%=ViewState["UnitName"].ToString()%>');//往word书签中增加内容
}
五、总结
NTKO以及其他第三方ActiveX控件带给我们很大的便利性,它能够自动识别修改过得文档,提示保存服务器中,免去了之前下载----修改 ----上传的复杂过程,实现了在线编辑,在线预览,电子印章,附件管理,大文件上传等等功能。但也有不少缺点,在Html,Css以及桌面逐渐转换,控 件也有可能早晚会被淘汰。
NTKOOFFICE文档控件使用说明
第一章 文档控件运行环境
目前NTKO OFFICE文档控件只支持windows操作系统的32位标准IE内核浏览器,支持的环境如下所示:
操作系统:windows系统; 浏览器:IE7-IE11 32位浏览器;
本地Office:32位完整版office 2003~office 2010。
第二章 浏览器自动加载文档控件
NTKO OFFICE文档控件是ActiveX控件,通过浏览器操作本地的office,所以说系统用户的权限必须管理员身份,这样控件才能正常的加载;还有就是访问的系统里面有文档控件,必须将这个系统加入到IE的可信任站点中去;
加入可信任站点如图:IE工具栏-Internet选项;该保护模式不启用;注意将https验证取消,然后点击添加就行了;
1.0自动加载问题
1.1 NTKO OFFICE文档控件为何不能自动装载
控件不能自动加载主要有以下原因导致: 1)本地Internet选项中的安全设定,在当前区域禁止下载已签名的ActiveX控件;
2)引用控件的网页中,<object 标记中的codebase属性指定不正确,导致浏览器无法下载OfficeControl.cab文件;
3)服务器上的OfficeControl.cab被破坏,失去正确的签名,或者使用了不正确的版本;
4)虽然服务器上的OfficeControl.cab正确,但是浏览器下载的有问题。这个可能会因为某些WEB服务器的mime的错误配置引起,导致服务器将OfficeControl.cab不以二进制文件的形式发送给浏览器;
5)本地Internet选项中的安全设定,在当前区域不允许运行ActiveX控件和插件;
6)还有可能是由于微软的补丁引起,或者其他防病毒软件或者过滤软件阻止了控件安装;
1.2 不能加载文档控件的解决步骤?
1) 确认本地Internet选项中的安全设定中,允许下载已签名的ActiveX控件,并允许运行ActiveX控件和插件。
2)确认引用控件的网页中,<object 标记中的codebase=部分,正确指向了服务器上的
OfficeControl.cab文件的URL[相对当前网页或者相对服务器根]。
3)从浏览器地址栏直接输入服务器上的OfficeControl.cab文件的URL,包含主机名,确认浏览器出现下载提示并且在下载保存后的
OfficeControl.cab文件上,点击右键看属性,在出现的对话框中具有“数字签名”,且签名正确。
4)如果以上方法还不能解决问题,并且您的系统安装了“微软累积安全更新 MS05-052补丁”,请尝试如下步骤:
警告:如果使用注册表编辑器或其他方法错误地修改了注册表,则可能导致严重问题。这些问题可能需要重新安装操作系统才能解决。 1、单击“开始”,单击“运行”,键入 Regedit.exe,然后单击“确定”。 2、找到以下注册表子项:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerActiveX Compatibility 3、右键单击“ActiveX Compatibility”,查找NTKO OFFICE文档控件的
CLSID:{C9BC4DFF-4248-4a3c-8A49-63A7D317F404},如果该项目存在,右键单击右边的“Compatibility Flags”项目,然后单击“修改”。在“数值数据”框中,选择16进制,输入00800000,然后单击“确定”。
4、如果该NTKO OFFICE文档控件的CLSID不存在,则右键单击“ActiveX Compatibility”,指向“新建”,单击“项”,键入NTKO OFFICE文档控件的
CLSID:{C9BC4DFF-4248-4a3c-8A49-63A7D317F404},然后按 Enter。
5、右键单击您在步骤 4 中创建的项,指向“新建”,然后单击“DWORD 值”。
6、键入 Compatibility Flags,然后按 Enter。 7、右键单击“Compatibility Flags”,然后单击“修改”。
8、在“数值数据”框中,选择16进制,输入00800000,然后单击“确定”。 9、退出注册表编辑器。
5)如果以上方法还不能解决问题,尝试暂时关闭防病毒软件或者其他过滤软件再进行安装。 6)如果还是不能解决问题,可能是机器配置被破坏,可以尝试进行手工安装。具体请参考相关文档。
2.0加载文档时出现“下载文档数据失败”对话框是什么原因,如果解决?
错误原因是后台url数据错误。可以尝试从浏览器打开url,如果是后台错误,可以看到详细的错误信息。如果浏览器可以打开,控件不能打开,则可以试试设定控件属性
<param name=”IsUseUTF8URL” value=”-1”>
3.0加载文档时出现“您没有正确安装OFFICE,或者请求创建一个系统不支持的OLE文档类型”错误,请给出详细解决过程?
这个错误是因为接口没有注册。跟控件本身无关。可以尝试
1、打开windows的“写字板”应用程序,选择插入word文档对象。如果这个出错,可以确定是office安装问题,或者是因为ole32.dll没有注册。
2、可以尝试在命令行运行“regsvr32.dll”,再试试。 3、如果不行,可以彻底卸载office,重新安装。
4.0控件为什么有时加载文档显示空白,有时可正常加载?如何解决?
这个可能是在body中直接调用
OpenFromUrl/BeginOpenFromUrl,但此时控件并未完全初始化/加载完毕,所以出现空白。
解决:可以在<body onload=”„”>中调用js函数,这样可以确保在浏览器加载控件完毕之后,才在该js函数中调用OpenFromUrl/BeginOpenFromUrl,这样就可以解决了
5.0文件存取错误
首先按照备注操作,将系统加入到IE的可信站点中去;如果加入了可信站点还是报文件存取错误的话那就是本机office的问题了,本机office是精简版的office,卸载了本机的然后重装一个完整的office; 1.环境问题,按照以下步骤检查
1)在写字板插入word对象试试,如果不报错,说明office是正确安装的
2)打开命令行,然后输入regsvr32 ole32.dll (win7需要这样打开:所有程序附件命令行#鼠标右键以管理员身份执行)
3)如果1)2)都没有问题,可以打开任务管理器看看是否有未结束的WINWORD.EXE EXCEL.EXE进程,关闭试试
4)删除normal.dot normal.dotx试试,这两个文件是office的模板文件,在目录C:Documents and Settings当前用户Application DataMicrosoftTemplates下
5)windows7还可以尝试把OA或系统的IP加入信任站点,取消保护模式试试
6)如果以上方法都不行,请重新安装office试试(推荐完全安装)
只有部分文档打开时报错 2.文档被损坏
1)由于未知原因,文档被损坏,这时,可以把从本地打开这个文档,另存一份出来试试控件是否能打开
件存取错误的原因有下面几种:
1:文档不是一个标准的office/wps文档.(这种你可以通过指定强制使用office/wps的某个程序来打开.)
控件对象.OpenFromUrl(url,"word.document");//第2个参数"word.document"强制调用word打开该文档,也可以为"excel.sheet"等.
2:文档数据被破坏,没有办法解决.
3:用office2003打开office2007的文档.
解决方法是:在服务器保存用office2003上创建的空白文档,客户端新建文档时默认打开服务器上的这个空白文档,编辑保存后都是2003的文档格式.这样就保证了保证服务器上的文档都是2003格式.
4:本机office没有安装好,请重新完整的安装office.
6.0使用文档控件打开服务器上面的文档时,出现文件传输错误有哪些原因导致?
控件对象.openFromUrl(url);参数url必须能够返回标准文档的二进制数据流。它可以直接指向服务器上的一个word文档或者页面(这个页面读取文档的数据流,并返回给客户端)。 出现错误分为下面几种情况
1:url错误。如果url没有问题在浏览器的地址栏直接url有问题,控件无法获取文档数据,就会提示“文件传输错误”。
2:编码问题。比如url中带有中文字符,浏览器对url编码导至url被破坏。服务器根据被破坏的url当然也不能返回正确的word二进制流。可以通过设置控件的isuseutf8url=-1(即使用utf8对url编码)。有的时候即使设置了isuseutf8url=-1也不能解决问题。根据经验,可以调用url=escape(url);来重新对url编码一次,然后再调用openFromUrl(url)。 3:服务器设置本身就不支持中文的url。比如tomcat服务器,是可以通过服务器配置文件来设置url编码,有的编码格式本来就不支持中文。这种情况就需要重新设置能够支持中文的url编码格式。 保存文档回服务器时报“文件传输错误” 解决方案
SaveToUrl()方法的返回值就是url指向页面的执行完后整个页面的内容.如果后台url程序有错误,保存不成功.控件就会提示"文件传输错误",并且SaveToUrl()方法的返回值中就包含了错误信息,可以通过类似下面的代码查看错误信息,并对url页面进行排错: var resTTML = 控件对象.saveToUrl(url,..); alert(resTTML);
7.0 控件使用一段时间后突然提示"您正在运行的NTKO OFFICE文档控件是演示版本已经到期,不能继续使用。"
出现以上问题可能有以下三种情况:
1.用的试用版。我们网站发布的演示版本控件都有一定的试用使用时期。请重新网站下载新的演示版本。 2.密钥不对。不是我们发布的正式密钥或者书写错误。 3.密钥和版本不匹配。正式版本控件和授权密钥必须一一对应。请参考我们发布产品时附带的相关文件。
8.0 检测其他地方没有任何问题就是文档保存的时候出现不知名错误?
可能引起的原因就是在:打开文档Openfromurl第二个参数或者BeginOpenfromURL第三个只读属性设置为true,这样就不能将文档保存回服务器;所以解决方案就是将这个参数设置为false就可以解决;
9.0当客户端的office版本含有2003、2007和2010,保存文档的时候怎样处理兼容问题
因为低版本的office不能兼容高版本的office文档格式(如office2003不能打开07和10文档),所以建议在保存文档时候可以使用SaveAsOtherFormatToURL方法,该方法用来将文档保存为其他格式的文件到指定的URL。除第一个参数之外,其他参数的格式以及返回值,和SaveToURL方法的参数一致。