基于Web的数据打印技术的研究与实现

时间:2022-06-02 05:35:22

基于Web的数据打印技术的研究与实现

摘要:针对Web数据打印缺乏灵活性的问题,使用中间件动态生成的XML,结合XSL如Document对象,提出了几种用户可自定义打印格式的通用解决方案。该方案应用于“国有资产智能管理系统”项目取得了良好的效果。

关键词:中间件;XML;XSL;Document;数据打印;Web

0 引言

随着数据库技术与网络的发展以及互联网的普及,基于B/S(Browser/Server)模式的软件应用越来越广泛。大多数管理信息系统在应用中都有数据打印需求,因此对Web数据打印的研究非常重要。

目前常用的Web数据打印的方式有:

简单应用:将需要打印的数据以表格标志(<table>、<tr>、<th>、<td>)组织成HTML文件,以浏览器(如IE)显示并打印。其优点为处理与实现简单。缺点是缺乏灵活性,不能由用户自定义格式,形式太单调;数据多页显示时,分页打印定位不准确。

模板打印:利用开发工具(如Java)开发一个ActiveX控件,安装在需要打印的客户端,用户自定义打印格式并以模板文件的形式存储,只需传递相应的数据给对应的模板文件就可以按照用户要求打印。这种方式的优点为不需要开发人员修改程序,用户可以利用开发人员提供模板修改工具直接修改模板文件保存所需的格式。缺点是开发此模板处理工具比较复杂,或要向专业公司购买类似的工具。

本文克服了Web数据打印的不灵活性以及模板处理工具复杂性等缺陷,利用中间件技术(EJB、COM)动态生成XML,结合不同的XSL文件,得到形式丰富多样的格式,以满足用户自定义的需求;又可以通过参数设置选择不同的数据项(数据字段)得到不同的打印数据;还可以设置显示页面数据的记录数,结合Document对象动态生成HTML文件以确保分页定位准确的数据打印。实际应用证明,方案灵活、实现简单,是可行的通用方法。

1 中间件技术生成XML数据

XML(extensible Markup Language)是网络第二代语言,可以定义无穷无尽的标志来描述文件中的任何数据元素,突破了HTML固定标记集合的约束,使文件的内容更丰富并组成一个完整的信息体系。XML具有良好的数据结构,已成为广泛接受的数据传输标准。

Web应用服务器调用中间件(EJB、COM)接口,通过设置的参数获得封装的XML数据片段。下面我们在VJ++环境中考虑XML数据的生成。

在VJ++中使用XML接口主要是通过微软提供的Msxm12.dll实现。该动态链接库提供了对符合XML标准的所有对象进行操作的方法。其中,主要的接口有:DOMDocument26,IXMLDOMNode,IXMLDOMNodeList,IXMLDOMNamedMap,IXMLDOMAtrribute等。

在国资项目中获取企业信息的XML片段则通过COM对象Enpr的接口实现:

public String getEnprByCondition(int pageNum,intpageRecord,String QueryCondition,String SortCondition)

其中:函数getEnprByCondition以字符串形式返回企业XML信息;

参数pageRecord是分页传递数据时每页显示的记录数;

参数pageNum是分页传递数据时第pageNum页的数据;

参数QueryCondition是获取数据设置的过滤条件;

参数SortCondition是获取数据设置的排序条件。

2 解决方案

下面给出3种解决方案:

2.1 XML与XSL相结合生成动态的HTML

使用此方案,用户在数据打印前可通过预览确认数据是否符合要求,并通过数据字段的选择确认打印内容(如图1,图2);若页面数据太多等,可重设“页记录数”等参数加以调整(如图3,图4);对同一XML片段,若数据排列格式需变化可通过选择预定义的XSL文件作为参数调整生成动态的HTML(如图5),同时也可直接修改XSL文件,从而得到形式多样的打印格式。

操作步骤如下:

(1)用户通过浏览器(browser)设置参数:XSL文件名,页记录数,第几页,查询条件等,然后向Web服务器请求。

(2)Web服务器响应,获取参数并调用中间件(COM)对象接口生成XML片段,同时选择XSL文件,处理数据节点,以HTML格式反馈给客户端。

(3)用户预览确认是否符合需求,若格式不合,继续执行步骤(1),否则打印数据。

2.2×ML数据片段导入EXCEL

在Web页面中嵌入MSOWC(Microsoft Office WebComponents)的Spreadsheet Component对象,将XML数据赋给此对象,利用Spreadsheet Component对象的“导出到Excel”功能即可生成Excel文件(如图6)。

图6打印数据导入EXCEL

部分代码如下:

2.3×ML数据与Document对象动态输出HTML文件

Web应用服务器调用中间件生成XML数据,页面(ASP)通过Microsoft.XMLDOM类对象就可以访问XML数据中的任何节点内容,并由页面内置对象Document的Write方法动态输出HTML文件(如图7)。分页设置通过CSS控制。打印数据字段、内容以及页记录数由用户通过参数设置。

部分代码如下:

var xmIDoc=new ActiveXObject("Microsoft.XMLDOM"):

//创建XMLDOM对象

xmIDoc.10ad(XMLData);//XMLDOM对象装载XML数据

document.writef("<style media=print>.PageNext

{page-break-after:always;}</style>”)://分页标志

var xmlNodes=xmIDoc.selectNodes("//Record");//生成记录节点

xmlNodes item(i).selectSingleNode("Field[@FName=

'OrganType'n").text;//获取第i条记录的字段“OrganType”的值

document.write("<br><center>共"+pageCount+"页第"

+curPage+"页</center><div class='PageNext'></div>”)

//分页设置,页尾说明

图7 分页打印数据

3 方案比较

(1)XML与XSL相结合生成动态的HTML:该方案一般适应于单页数据打印,可以提供丰富多样的格式。

(2)XML数据片段导入EXCEL:该方案适应于需要调整打印数据的情况,通过导出Excel到文件,用户可对数据进行处理,是较灵活的一种方式。

(3)XML数据与Document对象动态输出HTML文件:该方案适应于数据比较多的连续打印情况。

4 结束语

本文介绍了在VJ++环境利用中间件(COM)封装XML数据的方法。通过XML,结合XSL,Document等对象提出了三种打印方案,并给出相应的实现。比较了三种方案的适用范围。“国有资产智能管理系统”的应用效果表明,方案不失为通用的数据打印方法。

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:网格技术在商业银行中的应用 下一篇:新课程背景下信息技术课程教学体验