A39F1330-3322-4a1d-9BF0-0BA2BB90E970'codebase='OfficeControl.cab#version=5,0,1,0'width='100%'height='100%'>");
document.write("red'>不能装载文档控件。
请在检查浏览器的选项中检查浏览器的安全设置。
");
document.write('');
document.write('');
document.write("");
document.write("");
document.write("");
从上面的代码可以看出,genOfficeControl.js实际上是在IE浏览器中创建一个ActiveX对象——NTKO控件。
3.2.2用NTKO控件打开office文档
NTKO控件目前支持所有的MicrosoftOffice2000版或以上的文档格式,除此以外还支持WPS等办公软件。
如何使用框架中的NTKO控件打开office文档呢?
首先在你的页面中引用OfficeContorlFunctions.js,代码如下。
OfficeContorlFunctions.js封装对NTKO控件调用的常用函数。
然后,在你的页面中为body标签添加onload事件处理函数,代码如下,
其中intializePage将去读取要打开的文件,url为要打开的文件的地址。
url可以有两种形式:
第一种:
直接读取服务器下的文件,比如要打开服务器tomcat下webapps/engine5/fawen/xxx.doc文件,
url取值为”/engine5/fawen/xxx.doc”
第二种:
读取二进制文件流,url通常为一个某一个Action的一个方法,该方法去后台读取某一个office文件的二进制流。
例如:
url取值为:
“${ctx}/sysfile/sys-file!
readAttachment.action?
sysFileId=${sysFileId}”
3.2.3保存NTKO控件打开的Office文件
如何保存NTKO控件打开的office文件呢?
实际上NTKO控件把打开的office文件以“附件”形式上传到后台服务器磁盘。
所以同普通附件上传一样,有以下几个注意事项:
1、
2、
下面是保存NTKO控件打开的office文件的代码:
其中url为你要提交到服务端的访问地址,url取值请参考附件组件的文档。
3.2.4NTKO常用javascript函数介绍
在OfficeContorlFunctions.js中封装了常用的javascript函数,如下表:
函数名
参数
功能
intializePage
url
在页面打开时,用NTKO控件打开url所指向的office文件
saveFileToUrl
保存NTKO打开的office文件到磁盘
setFileOpenedOrClosed
bool
把文档标记为“打开”或“关闭状态”。
Bool取值为true时把文档标记为“打开”状态,否则标记为“关闭”状态
onPageClose
在关闭打开的office文件时提示是否保存
openTemplateFileFromUrl
templateUrl
用NTKO控件打开templateUrl所指向的office文件
insertRedHeadFromUrl
headFileURL
插入红头文件,headFileURL为红头文件所在的地址
SetReviewMode
boolvalue
当为word文件时,设置文件的是否保留修改痕迹。
当boolvalue取值为true时保留修改痕迹,否则不保留。
setShowRevisions
boolvalue
当为word文件时,是否显示修改痕迹。
setFileNew
boolvalue
是否屏蔽“新建(N)”菜单
setFileSave
boolvalue
是否屏蔽“保存(S)”菜单
setFileSaveAs
boolvalue
是否屏蔽“另存为(A)”菜单
setIsNoCopy
boolvalue
是否禁止粘贴
saveFileAsHtmlToUrl
url
把打开office文件保存为html文件
saveFileAsPdfToUrl
url
把打开office文件保存为pdf文件
addServerSecSign
插入服务端电子签名
addLocalSecSign
插入本地电子签名
addHandSecSign
插入手写签名
3.2.5常用NTKO控件事件
常用NTKO控件事件如下表:
事件名称
功能
OnDocumentOpened
打开office文档时触发
OnDocumentClosed()
关闭office文档时触发
如何针对NTKO控件的事件进行编程呢?
//此处添加打开office文件时事件处理函数
//此处添加关闭office文件时事件处理函数
3.2.6利用NTKO控件实现动态打印
以前所阐述的都是静态的,在实际应用中经常需要动态打印,如下图所示:
显然,每次显示的标题、内容、发布人、发布时间都是动态变化的。
如何利用NTKO控件实现此功能呢?
要实现此功能,步骤如下:
1、首先要做一个打印模板,即在制定位置插入四个书签,如下图:
插入的书签显示如图:
2、在你的页面中调用js代码打印书签内容,即在打开NTKO控件事件处理函数中添加打印书签的js代码,
如打印上面的标题,js代码如下:
//打印标题
OFFICE_CONTROL_OBJ.SetbookmarkValue('title','关于中秋节放假的通知');
4NTKO控件在公文流转中的应用
4.1痕迹保留
在公文流转过程中,通常需要记录“是谁在什么时候修改了公文的什么内容”,即痕迹保留。
如何利用NTKO控件实现痕迹保留呢?
实际上是在用NTKO控件打开word文档时,把文档设置为“修订”模式。
例子代码如下:
//设置保留痕迹
SetReviewMode(true);
//记录是哪个用户修改的
OFFICE_CONTROL_OBJ.ActiveDocument.Application.Username='登录用户的用户名';
4.2制文
在办公自动化系统的发文管理中有个常见操作就是制作公文,简称制文。
制文需要以下几个要素:
1、红头文件;
2、制文模板文件;
3、正文
所以制文以前要准备好红头文件、制文模板文件和正文。
值得注意的是,在制文模板文件中必须要有“zhengwen”书签,该书签用来预留插入正文的位置。
如下图所示,该打印模板中就有”zhengwen”书签。
制文源代码如下:
//制文
functionmakeDocument(printData){
varntko=document.all.item("NTKO_OCX");
//插入正文
ntko.AddTemplateFromURL("${ctx}/${zhengwenPath}");
//插入模板
vartemplateFilePath="${ctx}/${printTplPath}";
insertTempAndPutZhengWenInside(templateFilePath,ntko);
//打印表单数据
if(printData){
for(varpinprintData){
if(typeof(printData[p])!
="function"){
ntko.SetbookmarkValue(p,printData[p]);
}
}
}
//插入红头
insertRedHeadFromUrl("${ctx}/${redHeadPath}");
}
详细代码见make-document.jsp文件。