使用asp和word进行服务器端拼写检查
本文讨论的问题与下列方面相关:
microsoft word 97 for windows
microsoft visual interdev, version 6.0
microsoft internet information server version 4.0
概要
本文描述了如何使用microsoft word在web页面asp文件中添加拼写检查功能。
详细的步骤
按照下列步骤建立asp应用程序:
1、在web服务器所在机器上,启动microsoft visual interdev 6.0,选择file/new project。
2、在“新工程”对话框的名字编辑域中,输入“webspell”,然后双击新web工程图标。
3、在接着出现的web工程向导对话框中,输入或者选择你的web服务器名字。将工作模式默认为master,点击next,再点击
“finish”。
4、在visual interdev创建工程完成后,打开工程菜单,选择“添加web item\html页面”,命名为“checkspelling”,
然后点击open。
5、添加的html页面默认状态下以设计视图打开。在页面上拖出一个html文本区域,放置一个html提交按钮,根据你的爱好
进行布局,在页面上输入一些文字,告诉用户在文本域中输入需要进行拼写检查的文字。
6、选择页面上的所有对象(ctrl+a),然后从visual interdev的 html菜单中选择form,将对象包裹在表单中。
7、点击当前窗口底部的源码功能页面,切换到源码显示视图。修改html开放< form >标记的action属性值为
results.asp。
8、打开project菜单,选择“添加web item\active server page”,命名为“results”,然后点击“open”。
9、对于新页面,切换到源码视图,在<body>标记之间输入下面的代码:
<!– page header –>
<p><center><font size=+4 color=red>spelling results</font></center><hr>
<!– show user the text they entered –>
<p>the text you entered was:<p>
<font color=blue><%=request("textarea1")%></font><p><hr><p>
<!– begin server-side script to check spelling errors –>
<%
dont allow other sessions to re-enter
do while(application("wordinuse") = 1)
loop
application("wordinuse") = 1
get word references created in global.asa.
dim wdapp
set wdapp = application("wordapp")
dim wddoc
set wddoc = application("worddoc")
clear current contents.
dim wdrange
set wdrange = wdapp.selection.range
wdrange.wholestory
wdrange.delete
set wdrange = nothing
add the text the web user entered.
dim txt
txt = request("textarea1")
wdapp.selection.typetext cstr(txt)
check spelling without prompting.
wddoc.checkspelling , , 0
get spelling errors collection.
dim wderrors
set wderrors = wddoc.spellingerrors
%>
<% handle no-error condition.
if wderrors.count = 0 then
%>
there were no spelling errors.
<%
otherwise build a table of suggestions.
else
%>
<!– build a table to show errors & suggestions –>
<font color=red>there were <%=wderrors.count%> spelling error(s).</font><p>
<table border=1 cellpadding=1 cellspacing=1 width=75%>
<tr>
<td><b><font size=+1>word</font></b></td>
<td><b><font size=+1>suggestions</font></b></td></tr>
<%
for each wderror in wderrors
write the word in question.
response.write("<tr><td>")
response.write(wderror.text)
response.write("</td><td>")
get spelling suggestions for it.
dim wdsuggestions
set wdsuggestions = wdapp.getspellingsuggestions(wderror.text)
if wdsuggestions.count <> 0 then
a comma-separated list of suggestions.
dim strsuggestions
strsuggestions = ", "
for each wdsuggestion in wdsuggestions
strsuggestions = strsuggestions & wdsuggestion.name & ", "
next
remove extra comma & space.
strsuggestions = right(strsuggestions, len(strsuggestions)-2)
write out suggestions.
response.write(strsuggestions)
else
response.write("none.")
end if
set wdsuggestions = nothing
response.write("</td></tr>")
next
end if
release references.
set wderrors = nothing
set wddoc = nothing
set wdapp = nothing
were done, allow other sessions to continue.
application("wordinuse") = 0
%>
10、在visual interdev 工程浏览窗口中,双击global.asa文件,在< script >标记之间添加下面2段子程序:
sub application_onstart()
launch word.
dim wdapp
set wdapp = createobject("word.application")
set application("wordapp") = wdapp
add a document.
set application("worddoc") = wdapp.documents.add
release reference.
set wdapp = nothing
end sub
sub application_onend()
get automation references.
dim wdapp
set wdapp = application("wordapp")
dim wddoc
set wddoc = application("worddoc")
tell word to shutdown.
wddoc.saved = true
wdapp.quit
release references.
set application("worddoc") = nothing
set application("wordapp") = nothing
set wddoc = nothing
set wdapp = nothing
end sub
11、最后,在工程浏览窗口中用鼠标右键单击checkspelling.htm文件,选择“设置为初始页面”。
12、从file菜单中选择“保存所有”(ctrl+shift+s),再从build菜单中选择“build”(control-shift+b)。
现在可以进行测试了,在客户端输入“http:///webspell/checkspelling.htm”。
在web页面的文本域中输入一些文字,点击“submit”,然后就可以看到results.asp对你输入的文字报告一些错误拼写和
建议。
工程的工作流程
当用户首次浏览到checkspelling.htm页面时,application_onstart()事件被触发。这个过程启动microsoft word,为拼
写检查做准备,保存应用和文档对象到2个asp应用程序级别的变量中。这使页面变得很有效率,因为你可以再次调用word
的同一实例,而不是为每一次拼写检查要求都执行多次实例。接着,当用户点击按钮submit时,result.asp页面通过asp的
request对象获取输入值,然后利用存储的microsoft word对象来执行拼写检查。result.asp注意了当多个用户会话同时使
用同一实例时可能发生的问题,如果一个用户正在使用,就进行调度处理。
注意:一旦一个web用户登录了工程文件,web服务器就会有一个winword.exe进程在后台运行,它将处理拼写检查的请求。
当应用程序发生onend()事件时,asp应用程序才会释放这个实例,而onend()事件只有当web服务停止时才被触发。可
以通过运行下列的命令来停止并重新启动web服务:
net stop w3svc
net start w3svc