摘要:本文从开发者的角度介绍了如何在B/S架构下实现在线Word文档的生成,并通过开发实例对此应用进行详细说明。通过本文,读者不仅可以了解在B/S平台下实现在线文档生成的开发过程,而且还能体会到在B/S平台进行办公组件开发的技巧和乐趣。
关键词:在线文档生成 B/S架构 COM组件 JACOB
1 概述
1.1 在线生成Word文档应用实例
所谓在线生成Word文档就是在网页上控制Word文档的生成,而生成后的Word文档经过下载后即可作为本地Word文档,访问者可以直接编辑和打印文档;而相比之下,大多数情况下,由于网页结构的复杂性(例如DIV、IFRAME等组件的嵌套),访问者无法实现直接对网页内容进行打印,或者将网页内容转换到本地Word文档。
简而言之,在线生成Word文档实际上是办公需求(办公文档处理)与B/S应用(门户网站等)的结合,其既可实现B/S应用下的共享方式,又延续了处理办公文档的习惯。
图1和图2分别是在线生成Word的网页内容和生成Word后的网页效果。
图1 在线生成Word文档网页
图2 在线Word文档生成页面
通过将图2和图1对比可知,在线生成的Word文档内容与网页同步,且格式和排版已经制定,用户无需再花费过多精力进行文档的处理,由此提高了文档处理的效率。
1.2 实现要点
实际上,在线生成Word文档在内容展现形式上结合了B/S架构特性(例如:基于HTTP的内容推送、OLE对象的嵌入),而其后台处理与开发者熟知的单机应用并没有什么太大的不同,其实质上还是对Office COM组件的应用。
通过Office COM组件,开发者可以方便地对Office文档进行操作,例如:新建、保存、另存为、选取文本块、插入文本等。如此一来,使用Office COM组件即可实现Word文档的生成。而要实现文档的在线生成,一则需要B/S服务端后台使用Office COM组件,另则需要有数据源支撑所生成文档的内容的动态性。在线Word文档生成示意如图3所示。
图3 在线Word文档生成示意
图3中,Web服务端采用的是J2EE平台,则其数据源提取将会采用JDBC方式。由此可见,在线生成Word文档的关键点:Word程序COM组件应用、文档内容提供和页面交互。
1.2.1 Word程序COM组件的使用
Word程序COM组件是生成Word文档的核心,而对于COM组件的应用,大多数开发者的开发环境恐怕还是以微软公司的VS或宝兰公司的C++ Builder或Delphi开发环境为主。对于Java开发者,接触COM组件的机会显然要C++程序员要少得多。那么如何让Java程序员用上Word程序的COM组件呢?
鉴于数量庞大的Java程序员和Office用户群体,该问题很快得到了较好地解决,一个叫JACOB(JAVA-COM Bridge)的开源项目提供了桥接Java到COM组件的库,Java程序员可以借助该库来调用COM组件。表1中是该库中重要类的及说明。
表1 JACOB库中重要类及说明 |
类/接口 |
说明 |
com.jacob.activeX.ActiveXComponent |
ActiveX组件,表示COM组件对象 |
com.jacob.com.Dispatch |
调度接口,用于调用接口方法 |
com.jacob.com.Variant |
多格式数据类型,作为接口方法的参数类型 |
需要注意的是,JACOB通过Java本地化接口(JNI)的方式来实现Java到COM的桥接,所以其部署时还需要同时分发本地库(动态链接库,即DLL文件)。
1.2.2 文档内容的提供
结合笔记的开发经验,文档内容的提供可分为两个部分:第一是文档模板,第二是后台数据。
1. 文档模板
文档模板可以理解为文档中模式相对固定的内容,例如:页眉、标题以及内容标签,如图4所示的就是本案例中的文档模板。
图4 WORD模板文件
在图4中的模板中,文档的标题文字和表格的头部都是固定内容,而表格的单元格采用的是描述内容的标签,其格式为:[%=RS(数据集ID,行号,列号)%],这些标签最终将要被实际数据所替换。
2. 后台数据
后台数据即从数据库中所获取的内容,JSP页面从数据库获取数据后,利用Word程序COM组件的替换方法将后台数据替换文档模板中的标签。
1.2.3 页面交互
JSP页面中,前端传给后端的内容主要是文档模板编号,即替换哪个文档模板;后端推送给前端的内容主要是生成后的文档。
|