依据word模板批量生成试卷

java-word-MassProduction

目录

  • 使用方法
  • 开发流程

一.使用方法

1.制造题库所需Word模板

需要填充数据的地方使用 ${pid} 代替。

将这个word选择另存为,保存格式选择为xml,然后将这个xml放到项目的ftl目录下,后缀名改为.ftl 。

2.配置数据库

项目中使用了hibernate,表结构可以自动生成,但前提得先有mysql数据库环境且创建好数据库,数据库连接信息可以在hibernate.hbm.xml中修改。

对应上面模板实例中的${pid}值,在对应数据库中选择题目写入。

3.运行程序

在程序中选择要使用的word模板.

写入输出的word名称.

点击生成后,在项目word目录下:

当然也可以在数据库中导入大量题目,在导入时随机选择题目,然后对应相应的pid生成模板。

二.开发流程

1.题目模型

数据库使用了hibernate,hibernate的相关知识不再做解释.

Problem中定义了一道题目的信息。

id数据库主键索引.
pid对应word模板的${id}.
title对应了题目的内容。

IProblemDAO是一个接口,用来实现题目的增删改查.

public interface IProblemDAO {
    void save(Problem problem);
    void update(Problem problem);
    void delete(Problem problem);
    Problem get(Integer id);
    List<Problem> listAll();
}

ProblemDAOImpl实现了IProblemDAO接口.

hibernate的save,delete,update,get等不再阐述.

ProblemDAOImpl的实现中我们使用到的其实只有listAll()方法。至于其他的暂时用不到。

2.Word生成

这里主要用到了一个叫freemarker的第三方包。

1.什么是FreeMarker?

FreeMarker是一款模板引擎,一种开源的、基于模板的、用来生成/输出文本的通用工具。
它不是面向最终用户的,不是Web应用框架,它是Java的一个类库,是Web应用框架中的一个实用的组件,是一款可以嵌入开发产品的一款应用程序。
FreeMarker的设计是被用来生成HTML页面,尤其是通过基于实现了MVC模式的Servlet应用程序。
使用MVC模式的动态网页的构思,使得你可以将前端设计从程序中分离出来,更加贴合java的各司其职的编程思想,使得代码更简洁且便于维护。
尽管FreeMarker也有编程能力,但它也不像PHP那样的一种全面的编程语言。
一般我们只使用FreeMarker的模板生成个文本来呈现早已准备好的数据,它仅仅来生成文本,它也非常适用于非 Web应用环境的开发。

要注意的是,我们使用FreeMarker作为视图层组件,是为给如 Struts这样的 Model2框架提供现成的解决方案,已经在一定情况下提高页面的响应速度。

2.FreeMaker的作用:页面静态化

a)JavaEEWeb 开发存在的问题:动态网页技术创建的网页相率低,需要把这些动态网页转换成静态网页,节省程序运行时间
b)是不是把一个系统中所有的网页都进行静态化?? ?什么样的页面需要静态化?
    [1]不是,因为当一个页面静态化之后,所有的写操作都会造成巨大的资源调动,造成更多资源的浪费,
        所以我们只将一些修改几率不大或不会修改的页面静态化。
    [2]例:电子图书、商品详情信息....
c)CMS系统(Content Manager System)? 就是把动态网页静态化
首先我们需要一个Map,其中是模板中 ${pid}的pid值与题目内容。
Map<String,String> dataMap = new HashMap<String,String>();
读取模板ftl内容,ftl的格式规范其实是xml,所以我们使用Configuration用于读取ftl文件。
    Configuration configuration = new Configuration();
    configuration.setDefaultEncoding("utf-8");
    configuration.setDirectoryForTemplateLoading(new File("src\\main\\java\\ftl\\"));
获取ftl的Template。
    Template t =  configuration.getTemplate(templateFileName,"utf-8");
利用Map替换模板内容
    Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("src\\main\\java\\word\\"+outFile+".doc"), "utf-8"),10240);
    t.process(dataMap, out);

原文地址:https://www.cnblogs.com/LexMoon/p/javaMassProduction.html

时间: 2024-10-09 04:28:13

依据word模板批量生成试卷的相关文章

轻量级ORM 利用T4模板 批量生成多文件 实体和业务逻辑 代码

FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.Model 利用T4模板,[MultipleOutputHelper.ttinclude]批量生成多文件 基本语法: 1. 初始化:获取MultipleOutputHelper.ttinclude文件模板 在T4模板导入 //导入MultipleOutputHelper.ttinclude文件 路径 <#@include file="$(SolutionDir)\ORM.Model\T4\Mult

T4模板批量生成代码

大家通过比对下,就应该知道怎么玩. T4代码 <#@ template debug="false" hostspecific="true" language="C#" #> //告诉T4引擎控制块用c#编写 <#@ include file="EF.Utility.CS.ttinclude"#> //引入EF模板 <#@ output extension=".cs" #>

Python操作Word【批量生成文章】

http://www.cnblogs.com/codex/p/4668396.html 需要做一些会议记录.总共有多少呢?五个地点x7个月份x每月4篇=140篇.虽然不很重要,但是140篇记录完全雷同也不好.大体看了一下,此类的记录大致分为四段.于是决定每段提供四种选项,每段从四选项里随机选一项,拼凑成四段文字,存成一个文件.而且要打印出来,所以准备生成一个140页的Word文档,每页一篇. 需要用到win32com模块(下载链接:http://sourceforge.net/projects/

java通过word模板生成word文档

介绍 上次公司项目需要一个生成word文档的功能,有固定的模板根据业务填充数据即可,由于从来没做过,项目也比较着急于是去网上找有没有合适的工具类,找了好几种,看到其中有freeMark模板生成比较靠谱于是采用这个,正常生成成功了还挺高兴的于是修改优化部署测试,出问题了,由于我一直使用wps可以正常打开,但是同事使用office打不开,于是各种查找原因都没好,于是只能转变思路又试了两种还是不好用,直到发现这款模板生成 poi-tl 真的做的很不错,而且是国人写的,关于学习这个东西还是看官方文档的好

C# 利用WORD模板和标签(bookmark) 批量生成WORD

前言: 由于对C#操作WORD不熟悉,也就留下这么一篇水文,别吐糟...=_=||| 利用Microsoft.Office.Interop.Word (2003版也就11版)——因为部分客户端还是用Office2003,所以保险起见应该引入低一点的版本 我的需求很简单,从DataTable里面循环取数据批量生成Word文档,解决方案是利用Word模板.dot插入书签并保存为程序使用的模板, 用C#打开word模板修改书签的值并批量生成Word. 遇到的问题: 我的思路是打开模板,然后循环修改书签

java读取WORD/EXCEL模板转换生成新WORD/EXCEL文档

原文:java读取WORD/EXCEL模板转换生成新WORD/EXCEL文档 代码下载地址:http://www.zuidaima.com/share/1550463239670784.htm 可以通过预先设置指定的excel和word模板,通过替换文档里面指定的标志来生成新的excel和word文档.excel的部分只是实现了简单的方法.word部分可以支持word2003和word2007格式.建议word使用07及其以上. 其实excel部分标签和jstl很像,而且支持循环等.word就支

velocity模板技术生成word文档

本文介绍采用velocity技术在Java中生成word文档的方法. 1.新建一个word文档,编辑内容如下: 2.将上述word文档另存为htm格式的文件 3.新建一个Java Project项目velocityTest,加入Velocity所依赖的Jar包velocity-dep-1.5-beta2.jar. 4.在src目录下新建一个velocity.vm文件,将第二步生成的velocity.htm用文本编辑器打开,复制内容到velocity.vm中.内容如下: <html xmlns:v

C#读取Word模板替换相应的字符串(标签)生成新的Word

在平常工作中,生成word的方式主要是C#读取html的模板文件处理之后保存为.doc文件,这样的好处是方便,快捷,能满足大部分的需求.不过有些特殊的需求并不能满足,如要生成的Word为一个表格,只是一部分字符串需要变化,用上面的方法生成Word表格容易变形.如果我们能读取一个word模板,把模板里定义的固定字符串如{标记1}替换为想要的文字,然后生成新的word.这样生成的Word非常整洁. 查找了网上许多方法,虽然都是调用office的接口,并没有一个好的方案.通过自己的实验,比较,使用Mi

windows&amp;lunix下node.js实现模板化生成word文件

最近在做了一个小程序!里面有个功能就是根据用户提交的数据,自动生成一份word文档返回给用户.我也是第一次做这功能,大概思路就是先自己弄一份word模板,后台接受小程序发过来的数据,再根据这些数据将相应内容写入到相应位置,再将生成word文档的地址返回给前台,前台再根据返回的URL访问服务器的上对应资源. 由于我的后台用的是node.js  毕竟算是新生语言,插件还是比较少.所以在这里总结一下,以便以后再次用到方便查看. 在windows上动态生成模板word文档. 在windows上实现这个倒