选择题库中的试题动态生成试卷(word格式)

来源:互联网 发布:帝国cms自动加alt 编辑:程序博客网 时间:2024/06/06 05:55

 

       相信做教育系统的公司都会有这个需求,对于试题的管理最终还是要生成试卷的,怎么生成试卷呢?html当然可以在页面里拼成一个试卷了,不过html页面排版是这个问题,打印出来的效果自然不行;还有一个更重要的原因是如果生成的试卷是html格式的,那么复杂点的试题保存就是个问题。比方说有一个选择题的四个选项是四个不同的图片,又比如试题中有复杂的公式,这样的题用数据库字段去保存的话,确实是个大问题了,毕竟数据库字段只能保存字符串或二进制流嘛。

 

       word保存各个试题怎么样呢?一个word文件保存一个试题的话,不管是公式还是图片反正都保存到一个文件中肯定是没有问题的,问题是如果生成试卷的时候把多个试题合并到一个word文件中能不能做到,用什么技术可以做到?这里用了一个第三方的文档中间件产品soaoffice,有两个方法都可以,ApplyTemplateFromURLInsertDocumentFromURL,前者是soaoffice给套红需求设计的,所以插入一个word文件的话,直接就把word文件插入到整个文件的最前面了;后者是插入一个word文件到当前光标处,这里使用后者InsertDocumentFromURL来实现试题文件的合并生成试卷。

 

       思路:给教师一个选择试题的界面,选择需要使用的试题以后点“生成试卷”按钮就打开一个空白的word文件,然后用程序对应的生成多条InsertDocumentFromURL命令(就是js代码),文档打开的时候自动调用InsertDocumentFromURL方法,把教师选择的试题一个一个的插入到这个空白的word文件中,生成一个试卷。

方法:function InsertDocumentFromURL( DocURL);

功能:插入指定URLWord文件到当前光标处。

说明:DocURL:字符串类型,Word文件的相对当前页面的URL位置。
如果DocURL参数的第一个字符是"/",那么不管当前页面路径是什么,相对路径都是Web根路径 Http://yourWebSite/开始。

 

       细节1:本demo中打开的不是一个空白的word文件,是有个标题的“中学期中考试试题”还有个“一。 选择题” 的开头,word打开文件时默认光标位置在整个文件的最前面,所以需要把光标定位到文档末位,用js调用的officeVBA接口(soaoffice是支持js调用VBA接口的,这也是为什么用soaoffice的原因)定位光标到文档末尾:

       document.getElementById('SOAOfficeCtrl').Document.Application.Selection.EndKey(6);

 

       细节2:每插入一个试题之前给试题添加一个编号,还是用soaofficejs调用的officeVBA接口功能,pNum是保存试题的编号:

       document.getElementById('SOAOfficeCtrl').Document.Application.Selection.Range.Text = '" + String.valueOf(pNum) + ".';

 

       细节3:本demo把各个试题文件(doc格式)直接保存到数据库字段中了,可以打开demo/demodata/soademo.mdb文件,stream表中两个字段:IDWordword字段中保存的“长二进制数据”就是试题文件。用soaoffice打开各个试题文件编辑的时候是用openfile.jsp页读取指定的文件输入的文件流,见代码edit.jsp中:  SOACtrl.webOpen("openfile.jsp?ID="+sID, 2, "somebody", "Word.Document");

保存文件的时候,使用savefile.jsp保存文件流到数据库字段中,见代码edit.jsp中:      SOACtrl.SaveDocURL = "savefile.jsp?ID=" + sID;

 

       没做的细节:如果利用soaofficeDocText属性在编辑试题的时候把试题的文本获取到,同样保存到数据库的文本字段里,那样就可以对试题做全文检索了,也可以做试题的预览功能,如果谁有兴趣的话,可以参考链接http://soaoffice.javaeye.com/blog/771100中的方法添加上这个功能,可惜这个文章里用的是.Net,看起来会麻烦点。

 

demo代码下载:http://ishare.iask.sina.com.cn/f/10669215.html

 

原创粉丝点击