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

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

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

方法:function InsertDocumentFromURL( DocURL);

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

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

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

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

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

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

细节3:本demo把各个试题文件(doc格式)直接保存到数据库字段中了,可以打开demo/demodata/soademo.mdb文件,stream表中两个字段:ID和Word,word字段中保存的“长二进制数据”就是试题文件。用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;

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

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

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

  1. mysql题库随机抽取试题_Python从MySQL数据库中面抽取试题,生成试卷

    一.背景 本文章主要是分享如何使用Python从MySQL数据库中面抽取试题,生成的试卷每一份都不一样. 二.准备工作 1.安装Python3 2.安装库 pip install python-doc ...

  2. java 复杂word_Java 动态生成复杂 Word

    Java 动态生成复杂 Word 阅读目录 1. 制作 Word 模版,将你需要动态生成的字段用${}替换. 2. 将 Word文档保存为 xml . 3. 引入项目. 项目中需要用 java 程序生 ...

  3. Springboot中使用freemarker动态生成word文档

    文章目录 freemarker模板动态生成word文档 前言 准备 简单模板准备 <一> `word 2003` 新建`.doc` 模板 <二> 另存为`.xml` 文件,格式 ...

  4. java 生成复杂的word_Java 动态生成复杂 Word

    项目中需要用 java 程序生成doc 文件,百度一番,发现FreeMarker 的评价比较高. FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出,至于想详细了解 Fr ...

  5. navicat中导出数据表结构为word格式

    1.对于要导出的表执行sql语句如下: SELECTCOLUMN_NAME 列名,COLUMN_TYPE 数据类型,DATA_TYPE 字段类型,IS_NULLABLE 是否为空,COLUMN_DEF ...

  6. JSTL标签库动态生成表格

    项目中遇到一个动态生成表格的问题,由于表格的行和列都不是固定的,而是从数据库中取得的,因此需要动态的创建表格. 由于规范中要求使用JSTL标签库,避免JSP页面冗余java代码,而我的数据库暂时又连不 ...

  7. 通过 Java + wordgo 生成试卷

    本文讲解通过 WordGo,生成word文件,并通过该项目实现,生成试卷 word 文件. 业务背景 一个试题库系统组卷功能,需要将获取到的试题,通过一定排版,生成word文件.通常来说我们可以通过f ...

  8. JAVA基础加强(张孝祥)_类加载器、分析代理类的作用与原理及AOP概念、分析JVM动态生成的类、实现类似Spring的可配置的AOP框架...

    1.类加载器 ·简要介绍什么是类加载器,和类加载器的作用 ·Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader ...

  9. java中的静态、动态代理模式以及Spring中的CgLib动态代理解读(面试必问)

    java中的静态.动态代理模式以及Spring中的CgLib动态代理解读(面试必问) 静态代理 动态代理 CgLib动态代理     基础知: 反射知识 代理(Proxy)是一种设计模式,提供了对目标 ...

最新文章

  1. 好程序员web前端分享值得参考的css理论:OOCSS、SMACSS与BEM
  2. Epson投影仪指示灯信息
  3. Kubernetes 第五章 YAML
  4. 模拟电路技术之基础知识(一)
  5. 《Python Cookbook 3rd》笔记(5.6):字符串的 I/O 操作
  6. mockjs语法规范、设置mockjs拦截响应时间、Mock.Random占位符生成随机数据
  7. 【操作系统】独立进程与协作进程
  8. VR来了,科技的各行各业要如何做好准备?
  9. arcgis python 教程-终于晓得arcgis-python入门教程
  10. vs2019写c语言用不了scanf,VS2010里编C程式不能用scanf()吗?
  11. ios+android+内存管理,iOS内存管理
  12. 外行也看得懂!了解量子计算的奇迹
  13. 在华为工作十年的感悟
  14. 现在国内程序员的工资是什么行情?
  15. C语言—打印1000年到2000年的闰年
  16. 社交网络中节点重要性的度量
  17. 《个人理财》书中的精髓:如何通过金融学理论知识的学习,建立更加完善的金融体系,让自己更加富有。
  18. 服务器关闭微软小娜,win10小娜总是自动弹出怎么禁止-禁止win10小娜自动弹出的方法 - 河东软件园...
  19. then里面调用 await
  20. win10电脑防火墙允许ping设置

热门文章

  1. CentOS-5.6-x86_64 配置SSH无密码登陆
  2. php 实现店铺装修5
  3. 刘涛代言的美丽田园冲刺港股:年内盈利2亿 突击分红1.2亿
  4. java上课听不懂怎么办_上课听不懂怎么办?我们告诉你解决办法!
  5. 计量广义差分操作过程_计量学堂 | 计量经济学最基本的31个问题
  6. 怎么用svg画一个圆圈(一)
  7. steps_per_epoch=2000,epochs=100之间的区别
  8. 用计算机专业怼人,专业示范,教你如何用所学专业知识“怼人”
  9. js基本概念(上)之数据类型
  10. win10下,扩展屏不清晰模糊。