在这节中,主要说明,如何设计的?整个word生成过程是如何运转的?
我在本项目中采用这个技术架构确定之后,开始考虑采用properties文件来定义相关的标签什么的,但是最后放弃了这个决定,采用了XML文件的形式,主要的原因是:XML文件能很好的表现层次、层级关系,这样就为我在报告中定义层次结构什么的来的实在,而properties 更多使用于做(key,value)的定义,比如咱们的spring配置文件---数据库连接定义,log4j配置文件等。由此采用了 XML文件来定义相关的标签内容!
在实际项目中,可能会出现很多中报告的定义,所以我采用每一种报告定一个XML文件,这样以后只要增加一个报告类型,只需要再定义一个XML文件就能搞定。
下面主要复制一段我项目中的XML文件定义,下面会做详细的解释:
LEFT JOIN t_evtcase_inst_struct t3
ON t2.evtcase_inst_id = t3.evtcase_inst_id
AND t2.layer_id = t3.parent_layer_id
WHERE 1=1
AND t2.evtcase_inst_id = $P{evtcase_inst_id}
AND t3.evtcase_inst_id = $P{evtcase_inst_id}
AND LIKE '%安全方针']]>
FROM t_27001_evtcase_class_conformity t WHERE t.evtcase_inst_id = $P{evtcase_inst_id} AND t.project_id = $P{project_id}]]>在这里我解释一下上面的定义:
代码
说明 第一层次:定义的某个报告类型名称,所以每个报告的name必须唯一,一旦重复就可能会出现数据写入乱的问题 和 第二层次:name="daaSets" 是定义数据集相关的,主要包括定义word中要替换的单个标签和表格数据值;后者是定义要插入的图片地址或者定义其他要统计生成的图片sql相关的内容;还可以定义其他的;(注:主要是根据自己的需要去定义,然后做相应的解析。) (主要指下的)主要定义的一个dataSet数据集:
主要是把报告中的相关标签字段,能用一个数据集表示的就放到一起,
方便管理和少查询数据库,主要定义一个name和type属性:
就是要与本XML文件中其他dataSet的name必须不同,唯一标识作用,
2.type主要定义下面的数据集在word中要展示的是单个标签值还是表格:F为字符、T为表格(必须大写) 这个里面一看就知道是定义相关字段的sql语句,这个sql语句是跟下面表格的字段相关的。在sql语句中: 1.查询字段:t.recommend_desc 对应下面表格中的 column="recommend_desc" 这个必须相同,(注:解析定义的sql语句,然后通过field中的key来取得sql查询出来的某列的值)2.查询条件字段:$P{project_id} 是通过后台解析的时候来对应,并传入的实际值。 在这个field中,主要定义word中的标签相关的字段,这个字段既可以表示word中的单个的标签要替换的值,
也可以表示word中的要替换的表格列数。属性主要有:key、name、clumn、ctype:
key:对应word模板中定义的单个标签,也表示是表格的第几列
name:是一个注释的作用,没有实际意义,主要用于在XML中定义时标识这个field是含义是什么
clumn:上面已经讲过,对应了sql语句中的地段
ctype:主要定义查询出来的这个值的类型:f为字符,i为图像(我大概说一下:
f表示通过sql查询出来的值到word中展示的是以字符的形式展示;
i为查询出来的地段以图片的形式展示,可能有人要问,
直接以图像展示那能行吗,其实你应该想到它肯定是一个图像地址,
通过后台解析,把图片地址的图片放到了word中) (主要指下的)主要定义要生成的统计图,每个dataSet定义为一个统计图,意思说:在这里定义的dataSet,在后台处理的时候,要去动态的生成图像,不管采用什么方式生成,最后会返回一个图片的地址,再解析放到word模板中的相关位子,主要有:name、cnName、type三个属性:name:也是定义不能重复的图像标识cnName:是定义要在统计图上生成的总的图片名称,会显示在图片上(这里需要说明一个,我在后台生成图片是采用的jfreechar技术,在jfreechar上会显示图片的信息, 就通过这个来定义的)type:是定义统计图的类型,比如是:雷达图、柱状图、还是曲线图...我自定义了集中类型:CI-PolarChart ---- 代表雷达图CI-BarChart ---- 代表柱状图CI-PieChart ---- 代表饼状图。。。主要根据自己的需要去定义就行了,我都以CI开头,来解析。 这里就不讲了,同上面的 同上面,但是我需要说明的是:既然是生成统计图,还需要定义字段干什么的,主要是为了展示在图像上的:
如:
柱状图有x,y轴,那么这两个轴的数据来源就是靠这里的field来定义的。
其他的图也类似,饼状图,曲线图都需要定义数据集
[word替换原理:通过顺序查找word模板中的特殊字符标记,找到一个或多个就替换出响应的值,而表格的替换或者说生成是根据word中表格定义的序列来定位查找的,比如第一个表
其中还有一块就是word模板的定义,我放到下节来讲,这里写的太多了!
(未完待续)
[根据实际的业务需要,做出了一个简易的部署及架构设计。主要看下面2张图。 下图展示的报告的基本生成方式:采用配置文件+word模板的方式 下图展示的是服务器的数据访问
















