本文讲解通过 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 生成试卷相关推荐

  1. 基于Java的学校试卷生成系统设计与实现(附数据库)

    概要 最近脑瓜疼,没事干,突然想搞点事情,随后就拉上三五同学组了一个Team,开发一些自己喜欢的东西,...... 好了,废话不多说,本次发文主要还是介绍基于Java的学校试卷生成系统设计与实现,该系 ...

  2. 2022-3-26 Java SE检测试卷

    2022-3-26 Java SE检测试卷 一.选择题(30分,每题2分) 二.判断题(20分,每题2分) 三.编程题(50分) 一.选择题(30分,每题2分) 1.java的编程思想是什么? A. ...

  3. java创建榨汁机_苏州大学Java程序设计课程试卷含答案(B)

    苏州大学Java程序设计课程试卷含答案(B) 文章<苏州大学Java程序设计课程试卷含答案(B)>是由[作文仓库]的会员[上山豹,下山虎i]为大家整理并分享的,仅供大家参考,欢迎阅读! 苏 ...

  4. 苏大JAVA题库_苏州大学Java程序设计课程试卷含答案(B)

    苏州大学Java程序设计课程试卷(B)卷及参考答案共6页 一.选择题(2分*25= 50分) 1.Java语言的最大优点是:它是一种( C )的程序设计语言. A) 安全性 B) 多线性 C) 跨平台 ...

  5. Java条形码生成技术-Barcode4j

    背景 目前二维码的应用场景已经遍布各类互联网平台,通常是将产品/商品的唯一编号存储于二维码中以做扫码识别. 而用于生产环境的条形码技术仍然存在,如硬件设备制造.供应.物流运输等等. 在常见的产品信息管 ...

  6. java随机生成不重复的数组_Java生成不重复的随机数组的方法

    一.JAVA中生成随机数的方式 1.在j2se中使用Math.random()令系统随机选取一个01之间的double类型小数,将其乘以一个数,比如25,就能得到一个025范围内的随机数,这个在j2m ...

  7. 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题

    因为和同学分开做的android软件,现在想整合他做的界面部分,于是拷贝了res和src文件夹的文件,其中包括一个res.menu文件夹中的XML.但是每次将该文件导入到工程总无法自动在R.java中 ...

  8. 【开发环境】Java 文件生成 Windows 系统 .bat 批处理文件并自动执行 ( 输出 GB2312 格式处理中文乱码 | \r\n换行 | Runtime 执行 Cmd 命令 )

    文章目录 Java 文件生成 Windows 系统 .bat 批处理文件并自动执行 1.生成 bat 脚本注意事项 2.Java 执行 Cmd 命令 3.完整代码示例 4.执行结果 Java 文件生成 ...

  9. Java动态生成类以及动态添加属性 本篇文章来源于 Linux公社网站(www.linuxidc.c

    2019独角兽企业重金招聘Python工程师标准>>> 有个技术实现需求:动态生成类,其中类中的属性来自参数对象中的全部属性以及来自参数对象propertities文件. 那么技术实 ...

最新文章

  1. 转载:k2pdfopt详细教程-让kindle看遍所有pdf
  2. 【软件安装】sublime安装方法
  3. mysql服务器的HA集群之corosync+drbd+pacemaker实现 上
  4. PandasGUI:使用图形用户界面分析 Pandas 数据帧
  5. Vue中子组件如何向父组件传递数据?
  6. 微信停止服务印度手机号注册用户!
  7. Qt on Android 蓝牙通信开发
  8. 状态码301和302的区别?
  9. STL学习笔记--歌唱比赛(综合题)
  10. Firebird 问题总结
  11. 2021-09-1017. 电话号码的字母组合
  12. cisco思科交换机命令参考大全
  13. 北京54坐标系转经纬度坐标系教程
  14. daemontools安装和使用
  15. C语言之简单英语词典实现
  16. 基于android的影音设计,基于Android的车载影音导航系统软件设计与实现
  17. 过年了,想窝在家里把这些黑客电影都看完(附剧情简介和评分)
  18. 彻底搞懂AQS-重点方法精讲 [并发劝退- 哭唧唧]
  19. Bootstrap栅格系统 xs sm md lg xl
  20. 鸿蒙系统升级到第几批了,鸿蒙系统第四批升级名单有哪些 鸿蒙系统第四批升级机型介绍...

热门文章

  1. flexpaper文档
  2. css-day01笔记-CSS初识、基础选择器、文字和文本样式
  3. IDEA“最强字体-Droid Sans Mono”推荐
  4. ZABBIX监控DM数据库
  5. mysql mha windows_mysql MHA
  6. JAVA的JDBC连接MYSQL数据库并查询数据
  7. Lake Shore超低温 Rox tm—带引线延长线的传感器
  8. ESP32设备驱动-Si1145红外接近-紫外 (UV) 指数和环境光传感器驱动
  9. Magenta学习笔记
  10. 切入政务大数据领域 美亚柏科设合资公司