需求:
将candiate数据生成一个RTF 文件供用户下载
解决方案:
- 使用itext 插件生成(需要一行一行的写入, 设置格式麻烦的不行) 果断放弃。。。
- 使用模板生成字节流,最终写入文件
Velocity是一个基于Java的模板引擎。它允许任何人使用简单而强大的模板语言来引用Java代码中定义的对象。
当Velocity用于Web开发时,Web设计人员可以与Java程序员并行工作,以根据模型 - 视图 - 控制器(MVC)模型开发Web站点,这意味着网页设计人员可以专注于创建一个看起来很好的站点,程序员可以专注于编写一流的代码。Velocity将Java代码与网页分开,使网站在其生命周期内更加可维护,并为Java Server Pages(JSP)或PHP提供了可行的替代方案。
Velocity的功能远远超出了网络的范围; 例如,它可以用于从模板生成SQL,PostScript和XML。它可以用作生成源代码和报告的独立实用程序,也可以用作其他系统的集成组件。例如,Velocity为各种Web框架提供模板服务,使他们能够根据真正的MVC模型,使视图引擎促进Web应用程序的开发。
Velocity提供的project
-
Velocity Engine——这是实现所有工作的实际模板引擎。(目前的版本是1.7)
-
Velocity Tools——项目包含使用Velocity引擎构建Web和非Web应用程序的工具和其他有用的基础设施。在此找到例如Struts集成的代码或独立的VelocityViewServlet。(目前的版本是2.0)
使用
3. 导入Velocity 依赖
4. 新建一个test.vm
<tbody>
#foreach ($element in $testList)
<tr>
<td>$element.no</td>
<td>$element.name</td>
<td>$element.idCard</td>
<td>$element.type</td>
<td>$element.chinese</td>
<td>$element.math</td>
<td>$element.comprehensive</td>
<td>$element.english</td>
<td>$element.total</td>
<td>$element.luoFenplusZhaoGuFen</td>
<td>$element.ranking</td>
</tr>
#end
</tbody>
- code
@Test public void velocityTestFun() { // 初始化模板引擎 VelocityEngine ve = new VelocityEngine(); // 配置引擎上下文对象 VelocityContext ctx = new VelocityContext(); ctx.put("testList", genData()); // 加载模板文件 Template template = ve.getTemplate("/WebContent/WEB-INF/template/test.vm"); StringWriter sw = new StringWriter(); // 渲染模板 template.merge(ctx, sw); System.out.print(sw.toString()); }
Velocity 语法详解:
参考: https://www.jianshu.com/p/4e28c5b2804c
https://blog.youkuaiyun.com/garfielder007/article/details/63365908