1 设计过程
1.1 实现思路
结合以上分析,在线生成Word文档应用的大致思路如下:
(1)编制文档模板,定义模板中标签内容与后台数据项的对应关系(示例中采用的是数据集的行列对应);
(2)当用户点击在线生成Word时,JSP页面前端将文档模板编号传入后端;
(3)服务端后端程序按照文档模板编号获取对应的数据源ID列表,再按照各个数据源通过JDBC方式获取数据集;
(4)服务端后端程序按照文档模板编号通过Word程序COM组件的读取文档模板并遍历其中需要替换的内容标签,并使用标签对应的后台数据替换标签文本;
(5)服务端后台程序将处理完毕的文档模板另存为Word文档。
(6)JSP页面将保存的Word文档路径通过HTML链接推送给前端页面;
(7)用户通过点击HTML链接来下载或使用浏览器打开Word文档。
1.2 主要类设计
1.2.1 文档生成器—DocBuilder
顾名思义,文档生成器主要用于在后台生成Word文档。其实现2.1节中第(3)到(5)的功能。其关键成员有三个:
(1)文档模板ID,用于接收JSP页面传过来的文档模板标识;
(2)Word文档工具,用于获取文档模板中的所有需要替换的文本标签、使用后台数据替换文本标签和将替换后的文档另存为新的Word文档。
(3)数据集容器,其是一个以数据集名为键的散列表容器,其元素值是一个二维数组,用于存放结果集的单元值。
1.2.2 Word工具类—MsWordUtil
Word工具类是在JACOB的基础上对Word COM对象的操作所进行的再次封装,其以单例的形式提供了对Word文档的操控,其主要包括:
(1)建立/断开与Word程序COM组件的连接;
(2)文档操作,包括:新建、保存、另存和关闭;
(3)获取文档中所有指定左右标签的文本块;
(4)使用新文本替换文档中所有旧文本。
1.2.3 标签解析器—TagParser
标签解析器用于解析文档模板中文本标签内的文本,如图4所示的文档模板中,表格单元格中处于左右标签“[%”和“%]”内的文本:“=RS(数据集ID,行号,列号)”。
每解析一个文本标签即可检索其对应的后台数据,并进行文本替换,例如将标签“[%=RS(1,0,1)%]”替换成结果集1中第1行第2列的列值“张三”。
1.2.4 Web端生成在线文档的桩模块—stub.jsp
该JSP页面用于接收前端页面传递的文档模板参数,并调用后台的文档生成器来生成目标Word文档,并以HTML链接的方式将目标文档的URL推送到前端页面。
1.3 数据库设计
案例中使用的是Oracle数据库,其中示例数据表是员工表(TAB_STAFF),其结构定义如表2所示。
表2 员工表规格定义 |
字段名 |
类型 |
约束 |
默认值 |
备注 |
STA_ID |
VARCHAR2(32) |
PK |
|
工号 |
STA_XM |
VARCHAR2(20) |
|
|
姓名 |
STA_XB |
VARCHAR2(16) |
|
FK |
性别 |
STA_SR |
DATE |
|
|
出生日期 |
STA_RZRQ |
DATE |
|
|
入职日期 |
STA_ZGXL |
VARCHAR2(16) |
|
FK |
最高学历 |
STA_BYXX |
VARCHAR2(50) |
|
|
毕业学校 |
STA_ZP |
BLOB |
|
|
照片 |
STA_BM |
VARCHAR2(16) |
|
FK |
部门 |
STA_GW |
VARCHAR2(16) |
|
FK |
岗位 |
|
|
|
|
|
|