《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > 基于Web的Java报表工具的开发与设计实现

基于Web的Java报表工具的开发与设计实现

2008-12-22
作者:刘治国
1 引言
    随着Internet技术的飞速发展,基于Web的应用软件正逐步取代传统的C/S模式软件成为当今应用软件的主流。原来C/S模式下简单的报表问题,在Web软件中却成了瓶颈。如何适应网络技术,让报表工具在信息传输迅速的Internet上发挥更大的作用。成为了报表工具新的发展方向。
    本文基于Crystal Report 报表工具提供的底层Java SDK 接口函数" title="接口函数">接口函数,分析了基于web的报表的具体应用,设计了一个Web报表工具。具体实现了输出格式转化;报表数据的在线查询;图表展示以及报表的定制;Email发送;报表打印等功能。
2 Crystal Report报表工具简介
    Crystal Report报表工具是一个被广泛使用的企业级的报表设计,报表输出的工具。它提供了数据的报告、分析、信息传递以及与客户的交互式功能。
2.1 Crystal Report简介
    Crystal Report主要有Crystal Report设计器,Crystal Report应用服务器" title="应用服务器">应用服务器,Crystal Report分析器,Crystal Report Java API接口。
    设计器:设计器支持绝大多数数据库,包括 SQL Server、Oracle、DB2等;能连结任何数据源并使用各种ADO与OLE DB连结功能。设计器支持简单图表与图案以及多层嵌套子报表、交叉报表等各种类型报表。 同时可以自行设定报表的外观,如加上图片、改变形式、色彩或字型等。可以让一般的报表制作如排序和过滤等工作变得更快更容易。还支持报表打印。可以实现复杂的报表计算、筛选、排序等功能。设计器可以生成各种图表,还可以自定义扩充函数和变量来满足报表分析的要求。
    应用服务器:是Web报表的执行核心,将所设计的报表与Web应用程序的紧密集成。主要用于报表和客户端" title="客户端">客户端的交互。应用服务器负责解析报表数据以及报表模板和底层数据库的信息转化。同时还提供了许多的JAVA API用于客户端的开发。
2.2 Crystal Report的体系结构
    Crystal Report的体系结构能够很好的反映出报表的设计和开发过程Crystal Report报表工具的开发步骤如下:
首先在设计器里用JDBC/ODBC创建与相应数据库的连接,设置数据源和查询语句,显示并预览取得的数据。
接着在设计器里设计报表模板,对表头,表尾,数据区的具体设置。将预先取得的数据与报表模板进行绑定。
将设计好的报表以.rpt文件存储在指定目录里,这是也可以将其转化为别的文件形式,如xml,pdf,work等。
最后在Web上发布所设计的报表,启动RAS用于解释报表的执行。
    其体系结构如图 1 所示:

 

3 We3    Web报表管理器的设计与实现" title="设计与实现">设计与实现
Web报表    管理器采用Crystal Report报表应用服务器提供的Java SDK接口函数,具体实现了输出格式转化;数据的布尔查询;图表展示以及报表的定制;Email发送;报表打印等功能。在具体实现上,用jsp+javabean结合RAS Java SDK技术实现  术整个WEB报表工具设计。
3.3 Web报表功能的设计与实现
Web报表功能是基于WEB的报表在展示上的不同功能的实现,这些功能都是基于Web/Java来实现的。功能的设计是基于Crystal Report 报表工具提供的底层Java SDK 接口函数。首先对Crystal Report应用服务器的Java SDK结构进行分析。
3.3.1 RAS Java SDK分析
报表应用服务器Java JDK提供了实现基于WEB的报表设计功能,从简单的报表生成,报表修改,到复杂的报表定制功能。Crystal Report报表应用服务器本身就是一个c/s结构的系统,它有RAS 服务器(报表应用服务器)和SDK组成。SDK提供与RAS服务器交互的接口。RAS服务器则与Web应用服务器通信。下图是RAS Java JDK 的结构图。


RSA SDK 有许多包含接口和类的Java包组成。SDK的结构是一个MVC体系。图中的 application packages 由controllers 类构成,用来管理数据。在application packages里还有ReportClientDocument对象。ReportClientDocument对象是RSA SDK 创建并修改的报表文档。Data package和definition package用来定义model。View实现model里的数据展现功能。View 可以直接访问数据,也可以通过controllers 类来访问。通过controllers 类来访问数据可以实现数据的修改操作。
3.3.2功能的具体设计与实现
   通过RAS SDK提供的功能,Web报表功能主要实现输出格式转化;报表数据的在线查询;图表展示以及报表的定制;Email发送;报表打印;等功能。下面是详细实现:
输出格式转化:主要实现将Web上的以特定格式显示的报表输出为RTF,CSV,PDF,HTML,Excel, Word等格式。以便于报表文件的存储和管理。在输出格式转化上用到的主要类有exportoptions 包下的ExportFormatOptions,ExportOptions以及ReportExportControl等。转化为Word格式的实现为:(部分代码)
//设置报表名和报表路径
report =request.getParameter("rptName");
String rptPath = "C:\\Program Files\\Crystal Decisions\\Report Application Server 9\\Reports";
//创建RTFWordExportFormatOptions对象。
RTFWordExportFormatOptions  wordExpOpts;
wordExpOpts = new RTFWordExportFormatOptions();
//创建ExportOptions对象,设置word输出选项及格式类型为word。
ExportOptions exOpts = new ExportOptions();
exOpts.setFormatOptions(wordExpOpts);
//创建ReportExportControl对象,加载" title="加载">加载报表文件。
  com.crystaldecisions.report.web.viewer.ReportExportControl expViewer ;
  expViewer= new com.crystaldecisions.report.web.viewer.ReportExportControl();
  expViewer.setReportSource(rptPath + "\\" + report);
  //加载ExportOptions对象。
  expViewer.setExportOptions(exOpts);
  //输出并显示word报表。
expViewer.processHttpRequest(request, response, getServletContext(), null);
  expViewer.dispose();
报表数据的在线查询:主要有数据刷新和布尔查询两个部分。用到的类有application package; reportsource; lib等;其数据刷新和布尔查询的实现如下:(部分代码)
    //与数据库的交互要通过ReportServerControl对象。
serverControl.setReportSource(clientDoc.getReportSource());
serverControl.setEnableLogonPrompt(false);
serverControl.processHttpRequest(request, response, getServletConfig(). out);
//设置数据库连接和读取数据信息。
    connInfos = new ConnectionInfos();
 connInfos = serverControl.getDatabaseLogonInfos();
 int size = connInfos.size();
 for (int x=0; x        iConnInfo = connInfos.getConnectionInfo(x);   
  iConnInfo.setUserName(uid);  
iConnInfo.setPassword(pwd);  }
    //创建viewer对象浏览刷新数据。
    CrystalReportViewer htmlViewer = new CrystalReportViewer();
    htmlViewer.setDisplayToolbar(true);
    htmlViewer.setReportSource(serverControl.getReportSource());
htmlViewer.setDatabaseLogonInfos(connInfos);
//从客户端得到查询条件,设置查询变量。
    String newSelFormula = "{"+s1+"}" + " " + s2 + " " + "\""+s3+"\"";
    htmlViewer.setSelectionFormula(newSelFormula);
htmlViewer.processHttpRequest(request, response, getServletConfig().out)
图表展示:用于对报表中的数据通过各种图表(par, line, bar)的形式进行形象化的描述,以便于更方便的对数据进行分析比较。其实现如下:(部分代码)
//图表显示主要进行图表条件字段和数据字段的设置。
    //创建chartCondFlds对象和 chartDataFlds对象。
Fields chartCondFlds = new Fields();
Fields chartDataFlds = new Fields();
CDef.setConditionFields(chartCondFlds);
CDef.setDataFields(chartDataFlds);
//创建Chart对象并加载Cdef对象。
    ChartObject Chart = new ChartObject();
    Chart.setChartDefinition(CDef);
    //加载图表类型(par, line, bar)和位置(head, tail)等。
ChartStyleType = ChartStyleType.from_int(ChartStyleType._bar);
ChartPlacement = ChartPlacement.from_string(Placement);
    ChartSection =(Section)Doc.getReportDefController().getReportDefinition()
    Doc.getReportDefController().getReportObjectController()
add((IReportObject)Chart,(ISection)ChartSection,1);
报表的定制:主要用来实现对web报表的定制操作,如报表表头,表尾的修改,text文本的修改,报表不同图表的选择修改等。Email功能的设计采用java提供的sendmail开发包设计;而打印功能则采用Crystal Report提供的打印工具包实现。
4 结束语
本文是基于Crystal Report 报表工具提供的底层Java SDK 接口函数,分析了基于web的报表的具体应用,设计了一个Web报表工具。在Web报表工具的实现上还有一些方面没有考虑到,如web页面的表现,负载均衡以及工具功能的完善问题等。下面的工作要进一步解决上述问题。
DESIGN AND IMPLEMENT OF THE REPORT TOOL BASED ON JAVA/ WEB
                                      Liu Zhi-guo
(Shenyang Institute of Computing Technology, Chinese Academy of Sciences, Shenyang, Liaoning 110004)
Abstract: With the rapid development of the Internet. Applications based on the Web are taking place of the traditional applications based on the C/S, which takes the reports based on the web in trouble. This paper designs and implements a Web_based report tool by the Java SDK in the Crystal Report tools, which provides the format export, print, Email, query, chart and customizing report.
Key words: Crystal Report, Web Report, Java SDK, RAS

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。