1、个人收集整理 勿做商业用途报表设计器开发摘 要现在是信息社会,各种信息都需要处理并直观展现,如股票,物价等信息都需要通过数据报表来展现、分析,因此高质量报表软件系统具有重要的实际意义。 本论文课题研究探索了报表系统的开发方法与技术,综合应用Eclipse、 JAVA 、JDBC、SWT/Jface、 RCP、XML、 CSS、DOM4J,IText,POI等先进技术,开发了基于WEB环境运行的报表设计器,实现了报表设计、模板生成、报表编辑,报表发布等基本功能,为进一步开发实用的报表系统奠定了基础。 关键词:报表,SWT/Jface,Eclipse,XML,B/S,RCPAbstractNow
2、is the information society, all kinds of information need to be addressed and visual display, such as stock ,prices and other information needed to demonstrate through data reports, analysis, the statements of highquality software system has important practical significance.This paper statements sub
3、ject to study and explore the system development methods and technology, comprehensive application of Eclipse, JAVA, JDBC, SWT / Jface, RCP, XML, CSS, DOM4J, IText, POI, and other advanced technology, the development of the operating environment based on the statements WEB design , Achieved a report
4、 design, template generation, editing statements, issued statements of such basic functions, for the further development of practical system laid the foundation for statements。文档为个人收集整理,来源于网络本文为互联网收集,请勿用作商业用途KEY WORDS: Report,SWT/JFace、Eclipse、XML、B/S、RCP 目 录第一章 概述11.1 课题背景与意义11。2 报表系统发展概况2第二章 开发技术及
5、环境42.1软件环境42.2 主要开发技术4第三章 系统设计63.1系统体系结构63.2 软件模块结构73。3数据源与系统文件结构83。3.1 系统数据源83。3。2 系统文件结构93.3。3 报表显示部分文件13第四章 系统实现144.1主要实现算法144。1.1新建报表流程图144.1.2 新建数据源流程图154。1。3编辑单元格流程图164。1。4 保存报表流程图174.1.5 生成电子表格流程图184。1.6 发布报表流程图204。1。7 编辑CSS流程图214.1。8 生成模板流程图224。1.9 配置服务器流程图234.2 系统编码实现234.2.1 系统的主界面实现234。2.2
6、 新建数据源324.2.3 新建报表344。2.4 编辑单元格354.2.5 生成电子表格364.2。6 发布报表404.2。7 编辑CSS424。2。8 生成模板444。2.9 报表保存454.2。10 配置服务器48第五章 系统典型界面515。1系统主界面515.1。1 编辑视图界面525.1.2 属性视图界面525.1.3 服务器视图界面535。1。4 数据源视图界面535。2部分功能界面545.2.1 新建报表界面545。2.2 新建数据源界面555.2。3 设置CSS界面565.2.4 设置服务器参数界面575.2.5 设置报表参数界面585。2.6生成模板界面58第六章 课题总结6
7、0致谢62参考文献63附录65第一章 概述1.1 课题背景与意义现在是信息社会,各种信息都需要处理并直观展现,如股票,物价等信息都需要通过数据报表来展现、分析,因此对高质量报表软件系统的需求非常强烈。报表设计工具是报表系统的重要组成部分,使用报表设计工具,可对企业以及其他用户需要的各种报表进行设计,并在报表引擎上运行.报表设计工具的功能包括数据源关联与访问、报表绘制、布局绘制、属性编辑、脚本编辑、图表编辑、表达式编辑、报表数据映射、报表预览调试等.可通过XML转换技术将报表转换换为PDF、Excel等格式输出。随着B/S应用逐步取代C/S,市场上对Web环境下运行报表的要求日益强烈,C/S时期
8、的报表工具纷纷进行了若干改进与加强,支持B/S结构.这些工具大都是对开源软件进行包装改造,基本上有两种流派:一类来自于FastReport这种基于Delphi的软件,通过控件方式实现Web报表,进而将报表计算移至服务器上进行,再改进为支持Linux;另一类来自于Jasper的基于Java的开源软件。这些工具的整体思路还是沿袭了C/S时的方式,仍然是传统的分组报表的模式,仍然无法解决表样和大作量的代码编写问题,而且使用复杂,不能很好的发挥其效率,不能利用已有的软件功能,同时他们都是利用SWING/AWT来开发的,界面难看。因此,开发一个具有B/S结构、能适应中国国情、开源的、使用方便、界面美观的
9、报表设计器是一个很多用户直期待的。但是,目前流行的报表软件产品中,比较适合中国情况的产品还是不多。因此,进行本课题研究,开发报表设计器软件,对于开发适合中国特点的实用报表系统,促进企业与社会信息化,具有很好的实际意义。1.2 报表系统发展概况信息化的初期阶段,计算机作为一种新的生产工具,其主要功能是文字输出,如文件打印、表格输出等,相比较手工方式而言,工作效率大大提高。这个时期,用于报表生成的软件主要是WPS表格、CCED、Excel等文字处理工具,这些工具仅仅是将手工绘制报表的方式改为电子处理方式,未涉及到报表数据的集中、共享等处理。更确切地说,这个时期还没有真正意义上的报表工具。 随着信息
10、化程度的不断提高,C/S应用方式逐渐成熟,出现了很多报表工具软件,最著名的当属水晶报表和PB的DataWindow。水晶报表在上世纪一直被微软OEM,成为VB的内置报表工具,在微软的强大支持下,VB庞大的用户群为水晶报表培养了众多应用人员并积累了大量成功案例,从而产生了世界第一(用户量)的报表工具。DataWindow 是 PB 中获取专利技术的控件,它对数据的处理方法相当简洁,能处理各种显示格式,快速的报表制作能力深受PB开发者的喜爱。 这些软件的基本特征是单数据源、条带式(BAND)分组统计模型,通过控件拖拽方式绘制报表,在不编码的情况下能完成简单地行式(分组)报表和单片交叉报表,数据集中
11、在数据库中,可以共享. 但这一时期的用户需求已经与前一阶段的需求大为不同。用户希望放在数据库中的数据能以自己熟悉的方式展现(复杂的表样、统计运算等),而这些报表软件的数据模型源于国外的报表习惯,解决复杂表样的方法并不好,复杂的统计运算也要求开发人员编写大量的程序代码,导致报表开发时间太长,后期的维护工作量也很大。随着B/S应用逐步取代C/S,市场上对Web报表的要求越来越强烈,C/S时期的报表工具纷纷进行了若干改进与加强,普遍支持B/S结构,新的报表软件也如雨后春笋一样不断出现。 在报表工具的发展过程中,还有一类特殊的表格式产品,最著名有ormula1和华表。这种类Excel 的工具,展现能力
12、非常强,但是因为没有数据模型,导致其数据处理能力几乎为零,程序员需要按格编写代码往里填数。相比较分组式报表工具,类Excel工具能彻底解决复杂报表的样式问题,所以在实际应用中它一直是与分组报表互补的一类产品。SWT/JFACE是Eclipse推出优秀的JAVA图形API。RCP,也就是富客户端,是在Eclipse3。0之后分离出来的一个平台.RCP技术其实就是插件开发,可以在一个很小的模板上加入各种插件,扩展性能。现在RCP已经成为Eclipse开源项目的一个亮点,在国际上广泛的使用大量PCR来开发桌面应用程序.在RCP平台上,可以使用Eclipse的插件机制来快速开发独立应用的桌面应用,从而
13、轻松拥有Eclipse的界面结构和界面元素,节省了很多开发精力.运用SWT/Jface和RCP技术来开发报表,是当前报表开发的主流方向.一方面,SWT/Jface可以提供优秀的图形界面,克服JAVA桌面应用界面难看的缺陷;另一方面RCP技术可以提高开发效率。联合运用SWT/Jface和RCP技术,可以开发出优秀的报表产品.第二章 开发技术及环境2.1软件环境本系统的开发环境:操作系统: Window server 2003标准版应用服务器: Tomcat5。5开发平台:eclipse3。3 ;jdk1。52.2 主要开发技术SWT/JfaceSWT(Standard Widget Toolki
14、t )是标准控件工具集。Jface意为JAVA face。由于SUN的AWT/SWING技术在与本地界面融合方面存在缺陷,因此IBM开发了SWT,使得界面风格和本地保持一致。而Jface是SWTa的扩展包,采用MVC的设计模式,使用更加方面。RCPRCP(Rich Client Platform)意为富客户平台。在RCP平台上,可使用Eclipse的插件机制来快速开发独立应用的桌面应用,从而轻松拥有Eclipse的界面结构和界面元素,节省了很多开发精力。Dom4j Dom4j (Document Object Model for JAVA)是一个易用的、开源的库,用于XML,XPath和XSL
15、T。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。Dom4j使用起来非常简单,效率高。只要了解基本的XML-DOM模型就能使用。POI POI(Point of Interest)意为为兴趣点,是JAVA与MS Office交互时用到的第三方JAR,也是开源的,属于Apache的一个项目,用法简单。它主要用来读写OLE 2复合文档结构,本系统主要用它来操作EXCEL.IText iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转
16、化为PDF文件。用法很简单,效率很高。Lomboz lomboz是用来开发j2ee应用、免费eclipse插件,用它可以大大加快web开发、部署等工作。第三章 系统设计3。1系统体系结构本系统采用三层B/S架构 ,分别为表示层、设计层和数据层,如图3-1所示。(1) 表示层(Presentation-Tier) 是报表显示层。本报表系统的表示层有三种类型:Web类型,Excel类型,Pdf类型。(2)设计层(DesignerTier) 是本报表系统的重中之重。设计层设计的好坏直接影响到报表的使用.其主要任务是建立报表、修改报表、发布报表、生成模板等.这涉及到报表的数据来源,报表的格式,报表输出
17、,是连接表示层和数据层的桥梁。(3)数据层(Data-Tier)主要是和用户有关。本报表系统可以与几种常用的数据库系统交互。报表中可以输入的数据很多,如图表、序列号、常量等。数据层可以存储并管理这些数据. 图31系统体系结构图3.2 软件模块结构本系统的软件模块结构,如图3-2所示。 图3-2 系统软件模块结构图图32中各模块的基本功能如下: 新建报表:设置报表的名字、每页显示数目、选用报表模板;把这些数据存到Preferences中,供保存报表使用. 新建数据源:设置数据源名称,用它来标识数据连接;选择数据库类型,并设置各种连接参数;进行数据源说明;进行连接测试;连接成功后把数据源名称和各种
18、连接参数保存到dataSource。xml文件中,供以后使用;而数据源说明就生成一个文本文件保存。 编辑单元格:设置单元格的数据,如数据源列、函数、系列号、图像;设置颜色,字体;设置所对应的行列是否扩展,所对应的行列是否排序.这些都要用一定的格式保存起来,供报表显示时使用。 保存报表:设置单元格属性后,保存设置内容.先从Preferences读取报表相关数据,然后生成报表的xml;遍历表格,把表格各种信息填到xml中.编辑报表:保存表格后,如觉得不满意,可以打开报表修改。读取xml,把相关信息填到相应的单元格。也可以设置报表的每页的行数、报表发布者、发布时间、报表说明。生成电子表格:电子表格可
19、用来直接发布,也可用来编辑。先读取报表xml文件,得到各个单元格的数据源,根据数据源不同,得到不同的数据,并填到相应的电子表格内。可以设置电子表格的属性。发布报表:先设置发布目录,然后把项目文件夹下Files目录下的名和Preferences中保存相同的,后缀名为xml、xls、css、pdf的文件都复制到发布目录下.如发布目录已有相同文件,就覆盖.编辑CSS:CSS决定网页页面显示格式,对报表非常重要。本系统提供一个模板,旁边还有介绍各种标记的代表的内容的提示,这样用户就可以自己修改它。修改完后点“确定”,生成报表名+“.css”的样式文件.生成模板:CSS不是很难,但要做一个好看的格式却很
20、难,所心有必要把前面生成的CSS文件保存起来,提供下次使用。首先设置模板名字,然后设置说明,点“确定”后,系统会把当前报表的CSS文件复制到模板xml文件,并生成说明的txt文件.配置服务器:配置发布目录、端口、最大线程数,以方便使用。3。3数据源与系统文件结构3。3.1 系统数据源报表就是数据的显示,所以数据源很重要。本系统的数据源方案如下:(1) 提供建立数据源及管理数据源的功能。针对不同类型的数据库数据,建立相应的数据源。建立了数据源后,就用一个XML文件保存数据源信息,以后可直接从XML文件读取或修改连接信息。(2) 提供对其它类型数据源的支持。主要支持EXCEL文件、函数、系列号、公
21、式等数据源。EXCEL文件可以直接解析为WEB格式,而函数,系列号,公式,图像等可以直接插入。 3。3.2 系统文件结构本系统作为一个桌面应用系统,涉及到许多文件系统,不管用户还是开发者,都有可能容易迷失在文件堆中,所以必须科学管理.为了解决此问题,本系统设计了系统主目录文件结构,以下是系统主目录的的文件截图: 图34 系统主目录文件结构图 图34中各文件的功能如下:。metadata文件夹:系统自动生成,保存有日志文件。setting文件夹: 系统自动生成,用于保存项目的各个参数。Bin文件夹:存放已经编译过的JAVA的。class文件.DataSource文件夹:存放数据源的dataSou
22、rce。xml文件,其中还有各种.txt文件,用来说明各个数据源。该文件夹结构如图35所示: 图3-5 DataSource文件夹示意图Files文件夹:用来存放所生成的报表。其中有存放报表信息的xml文件,也有生成为电子表格的。xls文件、pdf文件.当然也存放了报表说明的。txt文件,其结构如图36所示: 图36 Files文件夹示意图 图36 Files文件夹结构示意图icons文件夹:用来存放图象,如按钮图标。intro文件夹:系统自动生成.lib文件夹:用来存放第三方JAR包.METAINF文件夹:系统自动生成,里面有MENIFEST.MF,在这个文件里有描述插件各种信息基本信息。s
23、rc文件夹:是源文件,其结构如下图所示: 图3-7 src文件夹示意图从图中可知,src文件夹包括两个包,一个是xautreportdesign包,里面有Activator。java文件,这是RCP的激活类。另一个是com包。其实这个包里有三个子包:com. Xautreportdesign.action,主要用来存放菜单,工具栏动作类的;com。 Xautreportdesign.util,主要用来存放一些工具类的,这些工具类对全局都有用;com.Xautreportdesign。win,主要是界面方面的类,有一些是自动生成后我修改的。com. Xautreportdesign。action
24、包中的一部分类如图3-8所示: 图3-8 com。 Xautreportdesign.action包中文件示意图com. Xautreportdesign。util包中的类如图39所示: 图39 com。 Xautreportdesign.util包中文件示意图com. Xautreportdesign.win包中类类如图3-10所示: 图3-10 com。 Xautreportdesign.win包中文件示意图Template文件夹:是保存模板的文件夹,里面有模板文件。css文件,也有模板说明。txt文件,如图311所示: 图311 Template文件夹示意图。classpath、.pro
25、ject、build.properties、javaCompiler.。.args、plugin。xml、plugin_customization.ini都是系统自动生成的。build。xml:是用ant生成的,为系统打包用.Report.product:是要生成的新产品配置文件。splash。bmp:系统启动时产闪动画面使用。3。3。3 报表显示部分文件对于报表WEB显示部分,有如下重要文件或文件夹:dataSource文件夹:存放数据源文件dataSourece。xml。photo文件夹:存放需要的图片文件。.css文件:是报表的css文件。report.jsp:是解析保存报表信息的。xm
26、l的文件。exceltoweb。jsp:是解析EXCEL并生成WEB的文件。第四章 系统实现4。1主要实现算法4.1.1新建报表流程图 图4-1 新建报表算法流程图 该算法首先判断是否已有同名的报表,然后判断行数是否为数字,最后存入Preferences中.4。1。2 新建数据源流程图 图42 新建数据源算法流程图 该算法先选择合适自己的数据库,然后输入信息,最后连接,看是否成功,若成功就把信息保存起来。4.1。3编辑单元格流程图图4-3 新建报表算法流程图 该算法首先要得到当前鼠标的位置,然后转化为表格的行列,最后选择数据源,并设置单元格属性。4.1.4 保存报表流程图 图44 保存报表算法
27、流程图该算法首先从Preferences中读取报表相关信息,生成报表名的xml文件。然后遍历表格,读取各非空单元格的值及属性,填入写入小xml文件中,最后看是否用到模板,如用到,就生成报表名的css文件。生成xml的代码如下所示:XautReportFile Name=”zainan tempname=”Template rownum=8 ownerName=杨济忠 time=2008年6月3日 intro=”true Column DataSource=D:zainanDS。ID” Span=纵扩展” Arrange=不排序 Color=”RGB 255, 255, 255” Font=”T
28、ahoma.8.0A1 /extension 二通过继承抽象类ViewPart类,要改写类中createPartControl,setFocus方法。本视图实现部分的代码如下所示:public void createPartControl(Composite parent) createToolbar();if (!isedit) setPartName(编辑” + reportName); elsesetPartName((未保存)编辑” + reportName);createTable(parent, colnum, rownum); 上面的代码是实现视图内容,其中最重要的是create
29、Table()方法。这个方法是在视图中创建类似EXCEL中的表格。下面的代码创建一个表格,并设置表格的样式,部分代码如下:Composite c1 = new Composite(parent, SWT。NONE);c1.setLayout(new FillLayout());table = new Table(c1, SWT.SINGLE | SWT.HIDE_SELECTION| SWT。FULL_SELECTION);table。setHeaderVisible(true);table。setLinesVisible(true);table.setRedraw(true); 对于表格的列
30、号,下面的代码创建列名从A开始的20个列,其中得把数字转化为字符型 ,其实现代码如下: for (int i = 0; i 20; i+) TableColumn column = new TableColumn(table, SWT.CENTER);column。setText( ” + String.valueOf((char) (65 + i) + ”);column。pack();而对于行号,下面的方法把按钮附加到每一行的第一列,在按钮上写数字.这样做的原因是使表格可编辑。实现方法如下:Button b = new Button30;for (int i = 0; i 30; i+)
31、final TableItem item = new TableItem(table, SWT。NONE);item.setText(i + 1, );editori = new TableEditor(table);bi = new Button(table, SWT。PUSH);bi.setText(” + (i + 1) + ”);editori。grabHorizontal = true;editori。minimumHeight = bi。getSize().y;editori。minimumWidth = bi。getSize()。x;editori.setEditor(bi, item, 0); 编辑是在属性视图完成的,所以需完成数据绑定。下面代码的作用是数据绑定,它获取鼠标所在单元格:table。addMouseListener(new MouseAdapter() public void mouseDown(MouseEvent event) Control old = editor1.getEditor();if (old != null)old。dispose();Point pt = new Point(event。x, event。y);final TableItem item = table.ge