套红说明Word下载.docx
《套红说明Word下载.docx》由会员分享,可在线阅读,更多相关《套红说明Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
3-6.jpg(128.16K)
(图3-6模板中套入正文)
3-7.jpg(75.35K)
(图3-7模板中套入正文)
这样,只要简单的操作编辑好的正文就能套用在事先定制好的模板里,形成一个正式的公文。
可能大家会不清楚模板文件在哪里,我带大家找一下。
其实,在iWebOffice2003/2006的演示包中,会有一个Document目录,我们调用的模板文件就在这个里面。
3-8.jpg(84.11K)
(图3-8Document目录)
3-9.jpg(59.78K)
(图3-9模板文件)
就这样,在应用iWebOffice2003/2006网络文档控件提供的功能后,用户只需要进行简单的操作,就可以使用“模板套红”这样看似复杂的功能。
3.2模板套红开发流程
应用也许很简单,当开发人员可能更关心功能的实现方法。
下面,针对刚才的功能,说明一下“模板套红”的开发流程。
3.2.1定义标签
进入“标签管理”,可以进如下面的界面,在这里自己定义需要的标签。
在模板文档中定位要插入的正文位置,是通过标签(也就是WORD中的书签)来实现的。
金格提供的DEMO中使用了Content这个标签定位正文插入的位置。
3-10.jpg(107.80K)
(图3-10标签管理)
标签都是有名称的,为了实现动态的取数据库的数据设置到文档中,可以把这里的标签名称和数据库的字段名称对应起来(这个以后再做介绍)。
说明一下表格中对应的内容:
编号:
无特殊意思,唯一编号用;
标签名称:
标签的名称,插入WORD后就是书签的名称;
标签说明:
插入WORD后会用这个占据标签对应的位置,方便查看标签区域;
标签备注:
这里的内容在通过标签填充模板时用到,模板套红功能暂时用不到。
3.2.2制作模板
先看看Document目录下提供的两个模板
3-10-2.jpg(86.24K)
(图3-10模板文件内容)
3-11.jpg(73.97K)
(图3-11模板文件内容)
通过菜单的“插入”→“书签”我们可以看到当前文档中的标签。
选择标签名称后点定位可以看到标签所覆盖的区域。
标签所覆盖的区域在插入正文后将直接被插入的内容替换掉。
3-12.jpg(89.50K)
(图3-12模板文件中的标签)
从效果上看,套红的过程就是打开了模板文件,然后把正文插进来替换调了Content这个标签所在的区域。
3.2.3数据库模板
模板当然不止能保存在服务器的文件夹里,金格的演示中也提供了应用数据库保存和使用模板的方法。
在列表页面进入“模版管理”,我们可以看到一些演示提供的模板。
3-13.jpg(112.63K)
(图3-13模板管理列表页)
我们在这里可以新建自己的模版,或者编辑已经存在的模板。
3-14.jpg(53.29K)
(图3-14新建模板)
这里演示的操作都是可以提供给最终应用客户使用的,也只有客户自己才知道需要什么样的模板。
最重要的地方应该是为模板放置标签了,如果没有标签,那我就真不知道怎么插文档进来了。
当然,插入用的标签名称不止是Content,完全可以是别的任意什么名称,只是后期开发中需要在服务器处理页面中把这个名称对应起来。
后面我就来说处理页面中的开发。
3-15.jpg(57.08K)
(图3-15设置标签)
3.2.4编辑页面中的接口调用
金格iWebOffice2003/2006控件提供了丰富的接口,调用的方式为直接用JavaScript方式。
先来看一下“套用模版定稿”按钮所应用到的代码:
1.
2.//作用:
套用模版定稿
3.functionWebInsertFile(){
4.varmDialogUrl="
Template/TemplateForm.asp"
;
5.varmObject=newObject();
6.mObject.Template="
"
7.window.showModalDialog(mDialogUrl,mObject,"
dialogHeight:
200px;
dialogWidth:
360px;
center:
yes;
scroll:
no;
status:
);
8.if(mObject.Template=="
){//判断用户是否选择模板
9.StatusMsg("
取消套用模"
10.returnfalse;
11.}else{
12.SaveDocument();
//保存当前编辑的文档
13.//设置变量COMMAND="
INSERTFILE"
,在WebLoadTemplate()时,一起提交到OfficeServer中
14.据库…axunwebform.WebOffice.WebSetMsgByName("
COMMAND"
"
15.//全局变量Template赋值
16.webform.WebOffice.Template=mObject.Template;
17.if(webform.WebOffice.WebLoadTemplate()){//交互OfficeServer的OPTION="
LOADTEMPLATE"
18.//SetBookmarks("
Title"
关于中间件研发工作会议通知"
19.//填充模板其它基本信息,如标题,主题词,文号,主送机关等
20.if(webform.WebOffice.WebInsertFile()){//填充公文正文,OPTION="
21.StatusMsg(webform.WebOffice.Status);
22.}else{
23.StatusMsg(webform.WebOffice.Status);
24.}
25.}else{
26.StatusMsg(webform.WebOffice.Status);
27.}
28.}
29.}
复制代码
通过代码我们可以清楚的看到套用模板的整个调用过程,其实是个组合过程,把一些接口操作按顺序调用来达到效果:
1.弹出选择模板的窗口;
2.保存当前编辑的文档;
(这里很重要)
3.设置"
变量,内容为"
,如果打开服务器文件夹里的模板就设置,从数据库中打开就不设置。
(作用在处理页面中讲)
4.获得返回的选择的模板名称;
5.调模板文件;
6.插入之前保存的正文。
在二次开发中这些代码基本都是可以重用的,但值得注意的是金格的DEMO中套用模板是从文件夹里取模板的,如果需要从数据库中取需要做一些修改:
弹出的模板选择页面中(如TemplateForm.asp)需要改成从数据库取模板表生成选择列表;
返回的值也从文件名称改成记录编号。
3.2.5处理页面中的开发
编辑页面的控件接口被调用了,信息将传进处理页面中。
处理页面内完成两个操作:
1.)调用模板文件
2.case"
'
下面的代码为打开服务器数据库里的模板文件
3.mTemplate=MsgObj.GetMsgByName("
TEMPLATE"
)'
取得模板文档类型
4.'
本段处理是否调用文档时打开模版,
5.'
还是套用模版时打开模版。
6.mCommand=MsgObj.GetMsgByName("
取得客户端定义的变量COMMAND值
7.if(mCommand="
)then
8.mFilePath=Server.MapPath("
."
)
9.MsgObj.MsgTextClear
10.if(MsgObj.MsgFileLoad(mFilePath+"
\Document\"
+mTemplate))then'
调入模板文档
11.MsgObj.SetMsgByName"
STATUS"
打开模板成功!
设置状态信息
12.MsgObj.MsgError="
清除错误信息
13.else
14.MsgObj.MsgError="
打开模板失败!
设置错误信息
15.endif
16.else
17.MsgObj.MsgTextClear'
清除文本信息
18.ifLoadTemplate()then'
19.MsgObj.MsgFileBody=mFileBody'
将文件信息打包
20.MsgObj.SetMsgByName"
21.MsgObj.MsgError="
22.else
23.MsgObj.MsgError="
24.endif
25.endif
首先,可以看到这里有个mCommand,他在前面是取了客户页面传过来的"
变量的内容,内容是"
(这个在编辑页面中打过招呼了)。
另外可以看到这里打开的是指定好路径的一个文档,文档的名称是编辑页面中获得后传进来的:
1.MsgObj.MsgFileLoad(mFilePath+"
+mTemplate)
如果是需要从数据库取文档,这里就要注意了。
mCommand的价值就在这里,如果没有"
,就是从数据库取模板了。
看代码应该很好理解了吧。
2.)调用正文
2.case"
'
下面的代码为插入文件
3.mRecordID=MsgObj.GetMsgByName("
RECORDID"
)'
取得文档编号
4.mFileName=MsgObj.GetMsgByName("
FILENAME"
取得文档名称
5.mFileType=MsgObj.GetMsgByName("
FILETYPE"
取得文档类型
6.MsgObj.MsgTextClear'
7.if(LoadFile())then'
调入文档
8.MsgObj.MsgFileBody=mFileBody'
9.MsgObj.SetMsgByName"
POSITION"
Content"
设置插入的位置[书签]
10.MsgObj.SetMsgByName"
打开成功!
11.MsgObj.MsgError="
12.else
13.MsgObj.MsgError="
打开失败!
14.endif
调用正文就很简单了,只要是正文保存在数据库里就用这个插正文。
这里要注意一个地方,不知道大家看见了没有,就是MsgObj.SetMsgByName"
。
这里设置POSITION参数的作用是制定要插入到的模板中的哪个标签位置,演示DEMO中设置的是Content标签,如果模板里定义了别的标签名称用来插入正文,则在这里设置相应的标签名称就可以了。
四、数据库模板篇
4.1套用数据库中的模板演示
1.)查看数据库中,备用的模板。
(制作模板的流程与套用文件夹里的一样)
4-1.jpg(119.97K)
(图4-1排版好的模板)
2.)编辑好文档的正文,准备套红:
4-2.jpg(125.77K)
(图4-2辑好的正文,准备套模板)
3.)选择数据库里面的红头模板:
4-3.jpg(155.85K)
(图4-3择数据库中的模板)
4.)套红之后的效果:
4-4.jpg(156.03K)
(图4-4用数据库模板之后的效果)
4.2套用数据库中的模板代码示例
为了配合我们用简短的代码来描述情况,我们以金格科技提供的开发示例包(iWebOffice2006.ocx.jsp.Mssql.rar)为基础,进行说明。
要从数据库中取出模板,进行套红,我们先来看一下,代码的开发流程。
首先我们得从数据库中读取模板,以供选择。
确定了要套用的模板之后,我们接下来的,就是要清楚iWebOffice控件的套用模板的工作流程:
1、保存准备套模板的正文;
2、通过WebLoadTemplate()接口,与后台处理程序OfficeServer.jsp的OPTION="
交互,实现从调用数据库中的模板。
注意模板里面一定要有一个可以让正文放置的书签;
3、把保存的正文文档插入到模板的书签位置。
现在我们来看一下具体的实现代码:
1.)做好数据库得到模板的页面:
1.//在下拉框中,读取数据库中的模板名和编号,因为主要是数据库操作,这里只给出关键的几个步骤
2.publicStringLoadDataWordList(){
3.StringmWordList="
<
selectname=DWordListstyle='
width:
240px;
>
//打开数据库
4.StringmSql="
SelectRecordID,FileType,FileName,DescriptFromTemplate_FileorderbyTemplateIDdesc"
5.//查询数据库略…
6.ResultSetresult=DbaObj.ExecuteQuery(mSql);
7.while(result.next()){
8.mWordList=mWordList+"
optionvalue='
+result.getString("
RecordID"
)+"
Descript"
/option>
9.//中间部分略…
10.mWordList=mWordList+"
/select>
11.return(mWordList);
12.}
2.)HTML里面的按钮
1.<
inputtype=buttonclass=buttonvalue="
套数据库模板"
onclick="
WebInsertDM()"
3.)按钮触发的JS函数:
即WebInsertDM()里面的函数。
这里面的功能主要有三部分。
第一部分,是指定网页,从中读取数据库里面的模板。
具体代码如下:
2.varmDialogUrl="
Template/TempDataFrm.jsp"
//读取数据库模板的列表页面
3.varmObject=newObject();
4.mObject.Template="
5.window.showModalDialog(mDialogUrl,mObject,"
第二部分,是判断是否取得模板。
具体的代码如下:
1.//判断用户是否选择模板
2.if(mObject.Template=="
){
3.alter("
取消套用模板"
4.returnfalse;
5.}else{
6.//接第三部分的代码,与后台处理程序交互,套用模板
第三部分,与后台处理程序交互进行套用模板。
2.SaveDocument();
3.//全局变量Template赋值,读取数据库中模板,Template值为数据库中的模板编号
4.//注:
模板中有要标签Content,区分大小写
5.webform.WebOffice.Template=mObject.Template;
6.if(webform.WebOffice.WebLoadTemplate()){
7.//交互OfficeServer的OPTION="
8.if(webform.WebOffice.WebInsertFile()){
9.//填充公文正文交互OfficeServer的OPTION="
10.alert(webform.WebOffice.Status);
12.alert(webform.WebOffice.Status);
13.}
14.}else{
15.alert(webform.WebOffice.Status);
16.}
17.}
4.)后台通过OPTION交互的代码:
1.elseif(mOption.equalsIgnoreCase("
)){
2.
3.//下面的代码为打开服务器数据库里的模板文件
4.mTemplate=MsgObj.GetMsgByName("
MsgObj.MsgTextClear();
//清除文本信息
5.if(LoadTemplate()){//调入模板文档
6.MsgObj.MsgFileBody(mFileBody);
//将文件信息打包
7.MsgObj.SetMsgByName("
//设置插入的位置[书签]
8.MsgObj.SetMsgByName("
//设置状态信息
9.MsgObj.MsgError("
//清除错误信息
10.}
11.else{
12.MsgObj.MsgError("
//设置错误信息
14.}
5、后台处理程序中,调用加载指定模板的函数:
2.//功能是调出模板文档,将模板文档内容保存在mFileBody里,以便进行打包
3.//因为都是对数据库进行操作,这里只给出主要的代码
4.privatebooleanLoadTemplate(){
5.booleanmResult=false;
6.StringSql="
SELECTFileBody,FileSizeFROMTemplate_FileWHERERecordID='
+mTemplate+"
7.//查询数据库略…
8.mFileBody=result.getBytes("
FileBody"
9.//关闭数据库略…
10.mResult=false;
11.return(mResult);