通过 Java + wordgo 生成试卷
本文讲解通过 WordGo
,生成word文件,并通过该项目实现,生成试卷 word 文件。
业务背景
一个试题库系统组卷功能,需要将获取到的试题,通过一定排版,生成word文件。通常来说我们可以通过freemark
模板引擎生成试卷,但是需要编写固定的模板文件,十分繁琐与麻烦,不够灵活。wordgo 是一个通过Java
实现的word文件生成工具。通过其提供的 API 方法,我们可以很便捷生成所需格式的 word 文件。
WordGo 介绍
WordGO - 让Java生成word文档更容易。更多API方法,请看官方项目文档。
导入
不知道为什么通过maven下载不了,我是通过jar包引入的。
- IDEA导入:点击
File-Project Structure
;然后在左侧找到Modules
并点击;最后在右侧点击绿色的+号,选择JARs or directories
选取要导入的jar包即可。 - Maven导入:添加下述maven依赖即可。
<dependency><groupId>com.github.qrpcode</groupId><artifactId>wordgo</artifactId><version>1.0-SNAPSHOT</version>
</dependency>
常用 API 方法
// 设置word页面大小为 A3,纸张横向显示
WordPaper paper = new WordPaper("A3", true);// 新建一个word
WordGo wordGo = new WordGo(paper);// 添加文字,并设置文字样式
wordGo.add("Hello World", "font-size: 15; color: #FF0000");// 添加文字,并设置文字样式,并在后面添加换行符
wordGo.addLine("Hello World", "font-size: 15; color: #FF0000");// 生成文件,文件名必须以.docx结尾
wordGo.create("C:\\demo.docx");
生成试卷
数据表信息
question_single_choice
:单选题:question_multiple_choice
:多选题:question_case_father
:案例题(题干,一个案例题由多个小题组成)question_case_child
:案例题(小题)question_case_father_child_relation
:案例题(主题、子题关联)
生成单选题
private void generatorSingleChoiceQuestion(WordGo word, int i, @NotNull List<QuestionSingleChoice> singleChoiceListList) {generatorQuestionTitle(word, "(一)单项选择题(每题正确答案选项仅为一个,每题1分)");// 简单的输出换行符,通过 数字指定换行数量addBlankLine(word, 1);for (; i < singleChoiceListList.size(); i++) {// 生成题目题干generatorQuestion(word, i, singleChoiceListList.get(i).getQuestion());// 生成单选题选项generatorQuestionOptions(word, singleChoiceListList.get(i));addBlankLine(word, 1);}addBlankLine(word, 1);
}// 生成题目标题
private void generatorQuestionTitle(WordGo word, String title) {word.addLine(title, "font-width:bold;font-family:宋体;");
}// 生成题目
private void generatorQuestion(WordGo word, int i, String question) {word.addLine((i + 1) + ". " + question, "font-size:五号;font-family:宋体;");
}// 生成单选题目选项
private static void generatorQuestionOptions(WordGo word, QuestionSingleChoice singleChoice) {generatorOptions(word, singleChoice.getA(), singleChoice.getB(), singleChoice.getC(), singleChoice.getD(), singleChoice.getE());
}// 生成题目选项
private static void generatorOptions(WordGo word, String a, String b, String c, String d, String e) {// 通用样式 "font-size: 五号; font-family: 宋体;"word.addLine("A" + ". " + a, COMMON_FONT_STYLE);word.addLine("B" + ". " + b, COMMON_FONT_STYLE);word.addLine("C" + ". " + c, COMMON_FONT_STYLE);word.addLine("D" + ". " + d, COMMON_FONT_STYLE);word.addLine("E" + ". " + e, COMMON_FONT_STYLE);
}
生成多选题
// 主要代码与上面单选题一致,省略部分代码。
private void generatorMultipleChoiceQuestion(WordGo word, int i, @NotNull List<QuestionMultipleChoice> multipleChoiceListList) {// 生成多选题标题generatorQuestionTitle(word, "(二)多项选择题(题目答案为不少于两个选项,错选、漏选、多选均不得分,每题1分)");addBlankLine(word, 1);for (; i < multipleChoiceListList.size(); i++) {// 生成题目题干generatorQuestion(word, i, multipleChoiceListList.get(i).getQuestion());// 生成多选题选项generatorQuestionOptions(word, multipleChoiceListList.get(i));addBlankLine(word, 1);}addBlankLine(word, 1);
}
生成案例题
private void generatorCaseQuestion(WordGo word, int i, @NotNull List<QuestionCaseFather> caseFatherList){// 生成案例标题generatorQuestionTitle(word, "(三)案例题(部分题目以案例内容作为共用题干,共用题干下的题目考查内容皆与案例相关;除在题目前注明“单选题”的题目正确答案为单选项外,其余题目正确答案皆为不定项,即不限定答案选项个数,可为单个,可为多个,错选、多选、漏选,均不得分。)");addBlankLine(word, 1);for (; i < caseFatherList.size(); i++) {List<QuestionCaseChild> childList = getCaseChildByFatherId(caseFatherList.get(i).getId());if (CollUtil.isEmpty(childList)){continue;}// 生成案例题题干generatorQuestion(word, i, caseFatherList.get(i).getQuestion());for (int j = 1; j < childList.size(); j++){generatorCaseChoiceQuestion(word, i, childList.get(j));generatorQuestionOptions(word, childList.get(j));addBlankLine(word, 1);}addBlankLine(word, 1);}addBlankLine(word, 1);
}
生成试卷
private void generator() {LOGGER.info("start generating paper!");WordGo word = new WordGo();word.addLine("试卷标题", TITLE_FONT_STYLE);addBlankLine(word, 2);int i = 0;generatorSingleChoiceQuestion(word, i, getQuestionSingleChoiceList());generatorMultipleChoiceQuestion(word, i, getQuestionMultipleChoiceList());generatorCaseQuestion(word, i, getQuestionCaseFatherList());word.create("E:\\wordgo\\demo.docx");LOGGER.info("end generating paper!");
}
样例效果
推荐
坚持探索、尝试新技术,并作总结并不是一件容易的事情,如能对您有所帮助,我感到非常高兴。
如果觉得文章还不错,欢迎收藏 & 分享给小伙伴。
期待关注我的微信公众号 「 编程图解 」,查看最近的文章和动态。
通过 Java + wordgo 生成试卷相关推荐
- 基于Java的学校试卷生成系统设计与实现(附数据库)
概要 最近脑瓜疼,没事干,突然想搞点事情,随后就拉上三五同学组了一个Team,开发一些自己喜欢的东西,...... 好了,废话不多说,本次发文主要还是介绍基于Java的学校试卷生成系统设计与实现,该系 ...
- 2022-3-26 Java SE检测试卷
2022-3-26 Java SE检测试卷 一.选择题(30分,每题2分) 二.判断题(20分,每题2分) 三.编程题(50分) 一.选择题(30分,每题2分) 1.java的编程思想是什么? A. ...
- java创建榨汁机_苏州大学Java程序设计课程试卷含答案(B)
苏州大学Java程序设计课程试卷含答案(B) 文章<苏州大学Java程序设计课程试卷含答案(B)>是由[作文仓库]的会员[上山豹,下山虎i]为大家整理并分享的,仅供大家参考,欢迎阅读! 苏 ...
- 苏大JAVA题库_苏州大学Java程序设计课程试卷含答案(B)
苏州大学Java程序设计课程试卷(B)卷及参考答案共6页 一.选择题(2分*25= 50分) 1.Java语言的最大优点是:它是一种( C )的程序设计语言. A) 安全性 B) 多线性 C) 跨平台 ...
- Java条形码生成技术-Barcode4j
背景 目前二维码的应用场景已经遍布各类互联网平台,通常是将产品/商品的唯一编号存储于二维码中以做扫码识别. 而用于生产环境的条形码技术仍然存在,如硬件设备制造.供应.物流运输等等. 在常见的产品信息管 ...
- java随机生成不重复的数组_Java生成不重复的随机数组的方法
一.JAVA中生成随机数的方式 1.在j2se中使用Math.random()令系统随机选取一个01之间的double类型小数,将其乘以一个数,比如25,就能得到一个025范围内的随机数,这个在j2m ...
- 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题
因为和同学分开做的android软件,现在想整合他做的界面部分,于是拷贝了res和src文件夹的文件,其中包括一个res.menu文件夹中的XML.但是每次将该文件导入到工程总无法自动在R.java中 ...
- 【开发环境】Java 文件生成 Windows 系统 .bat 批处理文件并自动执行 ( 输出 GB2312 格式处理中文乱码 | \r\n换行 | Runtime 执行 Cmd 命令 )
文章目录 Java 文件生成 Windows 系统 .bat 批处理文件并自动执行 1.生成 bat 脚本注意事项 2.Java 执行 Cmd 命令 3.完整代码示例 4.执行结果 Java 文件生成 ...
- Java动态生成类以及动态添加属性 本篇文章来源于 Linux公社网站(www.linuxidc.c
2019独角兽企业重金招聘Python工程师标准>>> 有个技术实现需求:动态生成类,其中类中的属性来自参数对象中的全部属性以及来自参数对象propertities文件. 那么技术实 ...
最新文章
- 转载:k2pdfopt详细教程-让kindle看遍所有pdf
- 【软件安装】sublime安装方法
- mysql服务器的HA集群之corosync+drbd+pacemaker实现 上
- PandasGUI:使用图形用户界面分析 Pandas 数据帧
- Vue中子组件如何向父组件传递数据?
- 微信停止服务印度手机号注册用户!
- Qt on Android 蓝牙通信开发
- 状态码301和302的区别?
- STL学习笔记--歌唱比赛(综合题)
- Firebird 问题总结
- 2021-09-1017. 电话号码的字母组合
- cisco思科交换机命令参考大全
- 北京54坐标系转经纬度坐标系教程
- daemontools安装和使用
- C语言之简单英语词典实现
- 基于android的影音设计,基于Android的车载影音导航系统软件设计与实现
- 过年了,想窝在家里把这些黑客电影都看完(附剧情简介和评分)
- 彻底搞懂AQS-重点方法精讲 [并发劝退- 哭唧唧]
- Bootstrap栅格系统 xs sm md lg xl
- 鸿蒙系统升级到第几批了,鸿蒙系统第四批升级名单有哪些 鸿蒙系统第四批升级机型介绍...