web 开发中经常需要用到在线处理 office 文档的功能,现在市面上有一些常用的 Web 页面调用显示 Office 的控件技术,用起来很方便。有一些第三方 ActiveX 浏览器控件:比如科瀚的 SOAOffice 中间件、卓正软件的 pageoffice 控件、WebOffice 控件还有我这篇文章所要说到的 NTKO。
通俗易懂来讲就是能够直接在浏览器上查看编辑 word 文档,并保存到 web 服务器上的控件。
借用官方的话,是能够在 IE, 火狐,谷歌等内核浏览器中直接编辑 WPS,MS Office , 金山电子表等文档并保存到 web 服务器上,实现文档和电子表格的统一管理。并具备痕迹保留、模板套红、二维码、pdf 及 tif 阅读等办公自动化系统的必备功能。大家可以具体查看释义。
优点:
缺点:
测试环境:浏览器:IE7 及以上;操作系统:Windows 操作系统;本地 Office:Office 2003-2013;(听说 ntko 还不支持 office 2016) 注意 Office 必须是完整版的
官方提供的 js,CSS,cab:1.ntko.js2.ntkoofficecontrol.js 3.ComFun_OA8.js4.OfficeControl.cab5.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)引用控件的网页中,
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 以及桌面逐渐转换,控件也有可能早晚会被淘汰。
来源: