这两天的任务是根据漏洞扫描结果和各二级单位的系统备案情况,生成一份全校级别的安全通告,并将安全通告以Word的形式下载下来以供查看。为了完成项目又接触了一个新东西,FreeMarker。
FreeMarker是基于模板和要改变的数据的,作用是生成输出文本。那么首先需要使用FreeMarker Template Language来编写模板,在模板中需要显示的数据使用${data}代替。然后在java中编写一个类,并且实例化一个对象,使用这个对象,为要显示的数据赋值,object.setData(xxx)。最后生成文档并下载。
下面是这次项目中完成的一个例子。使用FreeMarker,需要先导入相应的jar包freemarker-2.3.22.jar
一、新建模板
因为要求最终生成Word文档,所以直接用Word进行最初的模板编写,然后再转化成.ftl格式。这样,我们在Word文档中设置好文档的格式和插值,比直接写一个.ftl的文档要简单多了。
图1是截取的项目中最终需要生成的文档的一部分,其中标红字段是随着期刊和日期变化的,即插值部分,其余部分为文档部分。插值部分需要使用${XXX}代替,如图2所示。
图1 图2
二、将新建好的Word文档另存为Word XML文档(*.xml),然后使用firstobject-XML-editor打开,对文档进行检查编辑。主要是检查插值部分是否有被拆开的情况,所以在编写Word模板时,最好保证插值部分及其前后的格式一致。修改完成后,将其保存为.ftl格式,并将文件copy到myeclipse的项目中。最终生成的部分模板文件如下,