关于通过js实现试卷或作业的展示的思路

关于通过js实现试卷或作业的展示的思路

月光魔力鸭

2018-12-10 19:17 阅读 1066 喜欢 0 逻辑思路

最近有项目在处理作业方面的业务,这里简单记录下相关的一些思路,用于以后再遇到这样的问题可以找到方案。

需求

需求其实很简单,作业用于家庭作业,然后需要在web端将作业设置好,然后排版进行打印。

题目类型

类型目前只有一些简单的:单选、多选、判断、填空、问答、组合题目。 当然,单选、多选、判断都可以统称选择题,填空、问答可以称为问答题,至于组合题目则是前面几种的组合。

可能需要处理的问题

由于需要将作业打在A4纸上,所以需要对题目进行一些排版,起码要好看对吧,然后可能还需要一些设置,比如是一列的,还是两列的,是涂学号还是二维码,字体的大小,那么就延伸出更多的功能。

在排版上的处理,可以参考之前发布的jquery.print web打印jquery插件 这篇文章,里面主要讲的就是如何对页面进行一个A4排版的实现。

二维码还要考虑到如果打印后,再次打印,那么二维码还需要替换成新的,所以数据库要记录下序号,用于下次打印使用。

关于二维码的实现,这里就不讲了,比较简单,直接放个最终的代码看下就好。

String rst = "";
System.out.println(rst);

ByteArrayOutputStream os = new ByteArrayOutputStream();
Hashtable<EncodeHintType,Object> hints = new Hashtable();
hints.put(EncodeHintType.CHARACTER_SET,"utf-8");//字符编码utf8
hints.put(EncodeHintType.ERROR_CORRECTION,ErrorCorrectionLevel.M);//纠错等级:中级
hints.put(EncodeHintType.MARGIN,1);//图片边距
QRCodeWriter writer = new QRCodeWriter();
BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, 320, 320,hints);
BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
ImageIO.write(bufferedImage,"png",response.getOutputStream());
response.getOutputStream().flush();

关于截图的问题,其实也算是另外的一个问题了。因为排版后还需要在移动端展示,做适配又很麻烦,直接用截图简单省事。 至于实现的话,可以参考HTML中dom转成图片进行存储这篇文章就可以啦。

这个问题,其实属于阅卷方面的问题,需要提供给阅卷端一个试卷上所有信息的位置和分布,用于阅卷端进行截图识别。

在目前的功能中,排版调整比较简单,只能针对问答相关的题目进行处理,可能出现的需求就是,问答题目可能需要的空白都不一样,甚至有可能跨页,所以提供了一个添加答题区域以及对答题区域进行拖动来扩展高度的小功能。

由于题目在创建的时候都是使用富文本来处理的,所以每个人添加的题目样式可能都不一样,在预览页面/打印页面,还需要对所有的富文本进行样式重置。当然,这个实现比较简单,不过要考虑多个方面而已。

结束。

以上大体上就是在作业预览过程中的思路实现。


顺便这里提一个小工具的实现,关于向富文本中添加字符串.

转载请注明出处: https://chrunlee.cn/article/js-homework-think.html


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
如果您由于各种各样的原因,不幸丢失了数据、想恢复数据,您在互联网上搜索解决办法,会发现,DiskGenius这款软件是排名第一的解决方案
chrome css 下的 media=print 下的调试小技巧
这两天换了电脑,装上了PowerShell,由于有很多nodejs的小工具,但是发现在powershell中都一直报错。。蓝瘦
最近入手了华为鲲鹏服务器... 作为一个菜鸡前端,去部署服务器,亚历山大.. 即便是各种抄抄抄也无济于事.
在写前端页面的时候,反复操作的是切换,写完代码,切换到浏览器,然后刷新,查看效果,不合适,然后再切换回编辑器,然后修改,这样反复操作。livereload 释放了双手,自动刷新(尤其是双屏的同学特别友好)
最近居家的时候看电影发现啥啥都不能看,不是这个应用没会员,就是那个应用没资源.. 愁煞我,想起之前有个NAS可以解决,但是自己又没有对应系统,只有一个linux,决定研究一下。
关于自动签到,之前也有过,感觉写过好多次了,有可能也重复了,不过这次是通过puppeteer来实现的,相对于之前的phantomjs 或 casperjs 或 request 等最起码会更简单些,也不用安装这么多稀奇古怪的东西。