原文请看:https://blog.csdn.net/z1012890225/article/details/37815863
2.1 BIRT设计器概述
2.1.1 基本概念
数据源:数据的来源,或提供者。如xml数据源、jdbc数据源等。
数据集:数据集合,它必须与数据源关联,可以理解为查询的结果。
报表以及报表项:报表可视为是针对一组数据集的表现形式,而报表项这是这个表现形式的某个具体的单元。它们之间的关系,与窗体和控件的关系非常类似。报表、数据集、数据源三者间的关系:数据源 --- 数据集 --- 报表。
报表参数:查询参数的表现形式,使用它可以构建更灵活的报表。
模板和库:主要用于复用报表设计,提高报表开发的效率。
在大纲视图中展开报表文件(后缀为.rptdesign)可以看到数据源,数据集,报表和数据项(主体,主页,样式,脚本等),报表参数(图2-1)。
图 2-1 报表的基本概念
模板和库类似于一个公共报表,我们在设计的时候可以使用公共数据源,公共数据集,公共样式,甚至公共数据项(图2-2)。模板的后缀为.rpttemplate,库的后缀名为.rptlibrary,模板和库的建立和使用在后文中再详细描述。
图 2-2 报表的模板和库
2.1.2 基本视图
在Eclipse BIRT设计器中,提供了多种视图,以方便进行模板文件的设计。各种设计视图如下:
1.报表编辑器(Report Editor):
Report Editor提供了报表设计的画板,可以摆放设计元素并将其格式化。包括布局的表格、主页面、脚本、XML 文件源及预览。
布局:用于对整个报表界面进行整体布局,框架性的组件,支持拖放功能;
主页:用于设置模板文件的共用属性,如报表文件的头、尾、背景图片等;
脚本:支持对JavaScript脚本的编辑,BIRT支持事件模型,因此可以使用Java或JavaScript来编写事件处理器,事件处理器存在于报表的生成及渲染过程,可以用于修改报表的属性、字体颜色、数据值或调用外部代码;
XML 文件源:用于查看报表模板中所用于的XML代码,可以在这里进行XML内容的查看或编辑。
预览:把报表模板快速的渲染成为HTML格式文件进行预览。如下图所示:
图2-3 报表预览
2.数据资源管理器(Data Explorer)
在进行报表设计之前,设置好数据库连接通常是必须的。为了方便进行数据库的连接设置,BIRT提供了Data Explorer视图。
图2-4 BIRT Data Explorer
这种视图下可以允许为报表添加数据源及数据集。当然这里的数据源指是的数据库连接。BIRT提供了对JDBC、XML、脚本,Web Service数据源、CSV、TSV、SSV及PSV等数据源等等的支持。
而数据集可以理解为已经被执行的查询语句并返回的记录集。BIRT提供了一种特殊的数据集:Joint Data Set(简称联合数据集)。它可以对现在的数据集进行内连接或是外连接。当使用不同的数据源的,这种功能非常的实用。
Data Explorer还可以用于添加报表参数及数据立方体。报表参数是暴露给报表模板使用人员的参数,参数传递相关参数值,可以个性化报表。例如,可以使用数据集参数来修改查询语句,或使用BIRT JavaScript表达式来改变报表元素的样式及可见性。
报表参数可以是静态的,也可以是动态的。静态参数是指用户可以从预先定义好的参数值可选取值,进行相关的展示或运算,最简单就是文本框中的静态内容。动态参数一般指在绑定到BIRT数据集,而用户可以从中选取某些需要的数据或记录。
在BIRT3.7中,动态报表参数支持使用JavaScript表态式来动态显示文本或参数值。这样即可以动态的显示最终用户所传递的参数值。
此外,BIRT还支持联动报表参数。可以设置二级或是三级的联动下拉框或是List。最明显的例子如下图所示:
图2-5 BIRT联动报表参数
在Data Explorer视图中可以创建数据立方体,可以与BIRT中的交叉报表结合使用。BIRT数据立方体是多维的,可以基于多个数据集,如下图所示:
图2-6 BIRT数据立方体
除了上面的特性外,BIRT还新增了两种用于支持其它数据源的项目类型。这类数据源基于Eclipse的DTP(Data Tools Platform)项目所提供的ODA(Open Data Access)框架
图2-7 BIRT中ODA设计工具
3.画板(Palette)
BIRT Palette视图用于给报表画板添加报表元素。这里的元素可以代表从Data Explorer视图中所设计的数据。Palette中的元素支持自由的拖放功能,Palette上的元素属性可以通过属性编辑器进行设计,也可以通过ROM(BIRT Reports Object Model)进行描述。
图2-8 BIRT的Palette视图
Palette包括以下一些常用的元素:
标签(Label):标签元素用于显示静态文本,标签元素的外观可以通过本地进行设置,如设置标签元素的超级连接、字体大小等属性;
文本(Text):文本元素与标签元素相似,只是文本元素可以显示多行数据,更加易于格式输出。可以在文本元素中使用脚本表达式,然后在客户端使用标签进行解析;
动态文本(Dynamic Text):动态文本元素通常用于显示CLOB数据值。CLOB数据可以通过使用BIRT Expression Builder得到数据;
数据(Data):数据元素用于显示数据源的数据,通过使用Expression Builder来操作或改变数据值。例如,数据集有包含姓列以及名列,那么可以使用Expression Builder来将姓列与名列进行合并,从而形成包含姓名的一列;
图像(Image):图片元素用于在报表模板中显示图片。BIRT支持通过URL获得图片,或是从数据库的取得图片(BLOB),或是从本地硬盘上获得图片;
网格(Grid):网格元素用于布局报表中的报表元素,并进行统一的管理。例如,想在报表中显示产品销售数据表格,同时又想在右边显示一张图表,此时则需要使用Grid来进行网格划分,将报表分成一行两列;
列表(List):列表元素也相当于一个容器,它不同于其它容器的地方在于列表元素可以绑定到数据集上。列表元素包含头、脚及数据部分。当渲染列表元素时,头与脚部分一次性渲染完成,而中间的数据部分需要显示数据集的每一行数据。数据格式可以是文本元素,也可以是表格、列表等元素;
表(Table):表格元素与列表元素相似,都可以用于显示数据集中的数据。表格元素与HTML中的表格元素风格相似;
聚合(Aggregation):汇总元素是BIRT 2.2新增的元素,使用Aggregation Builder向报表添加汇总功能。Aggregation Builder提供的汇总功能大概有25项,常见的如:SUM、MIN、MAX、AVERAGE等等;
图2-9 BIRT的Aggregation元素
图表(Chart):图表元素用于在报表中添加图表。当在报表中添加了图表元素时,Chart Builder Wizard自动进行渲染并显示。Chart Builder Wizard用于设计图形,并提供了三大设置区域,分别是:设置图表类型、设置数据、设置图表格式。BIRT提供了大量的图表类型,同时,图表格式可以是PNG、JPG、BMP、SVG等输出格式。
交叉表(Cross Tab):交叉报表元素用于显示BIRT数据立方体中的数据。在BIRT以前的版本中,表格中列数据需要在设计时就确定,而使用交叉报表元素,则列数据与行数可以动态生成,无需在报表设计时确定。
2-10 BIRT的交叉表元素
4.资源管理器(Library Explorer)
Library Explorer支持从已存在的报表库中拖放报表元素。因此,各种报表之间即可以共享一些公用的类库元素。同时,修改其中某一公用的类库元素,即可以修改所有的引用至此类库元素的所有报表。例如,可以在类库元素中保存公司的Logo,如果公司的Logo变化,则只需要修改类库的中Logo元素即可,其它引用此Logo的报表无需修改。
图2-11 BIRT的Library Explorer视图
5.属性编辑器(Property Editor)
属性编辑器视图用于设置报表中元素的属性。当然,每种元素的属性都不尽相同,因此,其界面都有所变化。当然也具有共用的一些属性,如style、width、font等等。此外,大部分元素都支持是否可见的属性。
2-12 BIRT的Property Editor视图
6.大纲(Outline)
Outline视图通过层次关系来展现报表设计的内容及其相关元素的层次关系。可以从Outline中直接选择元素进行查看或修改,当报表设计比较复杂时,Outline是相关方便有用的辅助工具。
图2-13 BIRT的Outline视图
比较重要的视图还有导航器(Navigator)和问题查看器(Problems)
图2-14 BIRT的导航器
图2-15 BIRT的问题查看栏
2.2 BIRT本地化之汉化
2.2.1 BIRT设计器的汉化
建议把整个eclipse环境都彻底汉化,需要的文件如下,这个在eclipse-birt官方网站上有语言包Language Packs。
BabelLanguagePack-birt-zh_3.7.0.v20111128043401.zip (91.78%)
BabelLanguagePack-eclipse-zh_3.7.0.v20111128043401.zip (87.36%)
BabelLanguagePack-modeling.emft.emf-facet-zh_3.7.0.v20111128043401.zip (21.16%)
BabelLanguagePack-modeling.gmp.graphiti-zh_3.7.0.v20111128043401.zip (20.45%)
BabelLanguagePack-modeling.mdt.modisco-zh_3.7.0.v20111128043401.zip (9.38%)
BabelLanguagePack-mylyn-zh_3.7.0.v20111128043401.zip (50.7%)
BabelLanguagePack-rt.equinox-zh_3.7.0.v20111128043401.zip (99.27%)
BabelLanguagePack-rt.equinox.p2-zh_3.7.0.v20111128043401.zip (22.2%)
BabelLanguagePack-rt.rap-zh_3.7.0.v20111128043401.zip (87.11%)
BabelLanguagePack-technology.actf-zh_3.7.0.v20111128043401.zip (4.46%)
BabelLanguagePack-technology.dltk-zh_3.7.0.v20111128043401.zip (69.33%)
BabelLanguagePack-technology.egit-zh_3.7.0.v20111128043401.zip (16.9%)
BabelLanguagePack-technology.jubula-zh_3.7.0.v20111128043401.zip (11.72%)
BabelLanguagePack-technology.stem-zh_3.7.0.v20111128043401.zip (79.99%)
BabelLanguagePack-technology.uomo-zh_3.7.0.v20111128043401.zip (3.6%)
BabelLanguagePack-tools.atf-zh_3.7.0.v20111128043401.zip (51.91%)
BabelLanguagePack-tools.cdt-zh_3.7.0.v20111128043401.zip (68.2%)
BabelLanguagePack-tools.gef-zh_3.7.0.v20111128043401.zip (66.21%)
BabelLanguagePack-tools.objectteams-zh_3.7.0.v20111128043401.zip (5.51%)
BabelLanguagePack-tools.tm-zh_3.7.0.v20111128043401.zip (21.24%)
BabelLanguagePack-webtools.common-zh_3.7.0.v20111128043401.zip (57.1%)
BabelLanguagePack-webtools.dali-zh_3.7.0.v20111128043401.zip (18.33%)
BabelLanguagePack-webtools.jsdt-zh_3.7.0.v20111128043401.zip (80.48%)
BabelLanguagePack-webtools.jsf-zh_3.7.0.v20111128043401.zip (39.76%)
BabelLanguagePack-webtools.libra-zh_3.7.0.v20111128043401.zip (26.04%)
BabelLanguagePack-webtools.servertools-zh_3.7.0.v20111128043401.zip (88.15%)
BabelLanguagePack-webtools.sourceediting-zh_3.7.0.v20111128043401.zip (74.66%)
BabelLanguagePack-webtools.webservices-zh_3.7.0.v20111128043401.zip (76.11%)
解压之后如下:
图2-16 BIRT Eclipse ALL-IN-ONE插件
把它们复制到Eclipse-ALL-IN-ONE的根目录下覆盖即可,重启eclipse即可看到完全汉化的界面。
2.2.2 BIRT Runtime的汉化
Birt的runtime 3.7包中提供了多个servelet(preview、frameset、run等),下面主要对frameset说一下(至于其他的servlet详细解释,可以参考本节后文BIRT servlet详细解释)
frameset:
采用Ajax框架,可以显示工具条,导航条和TOC面板,实现复杂的操作,
如分页处理,导出数据,导出报表,打印等。
该模式下会自动生成report document文件(预览report design文件)到特定的目录
(用户可以用参数指定,也可以定义在web.xml里)。采用Ajax,速度较慢。
frameset特点:
提供报表展示用工具条(导出、打印、分页等)
图2-17 BIRT工具栏之导出报表功能
图2-18 BIRT工具栏之打印报表功能
frameset展示页面开源,后期拓展、自定义修改容易
也许有人会说:其默认的frameset功能不错,但是其界面样式、风格等与公司产品风格不协调,希望对其自定义改造。对于这个问题,开源又一次展现了其魅力。我们完全可以直接去修改webcontent中的内容,按照自己的想法,去修改CSS等。
修改内容:WebViewerExample\webcontent\birt\pages\路径下的文件,比如control路径下的文件
NavigationbarFragment.jsp 用于定制导航栏内容
ProgressBarFragment.jsp 用于定制进度条内容
TocFragment.jsp 用于定制标签目录侧边栏内容
ToolbarFragment.jsp用于定制工具条内容
如下以工具栏按钮为例(ToolbarFragment.jsp),看里头的页面还是写得很清晰的。我们可以定制ToolbarFragment.jsp,让它只显示导出和打印
<TD WIDTH="80px">
<font size="2"><b></>导出</b></font>
<INPUT TYPE="image" NAME='exportReport' SRC="birt/images/ExportReport.gif"
TITLE="导出"
ALT="<%=BirtResources.getHtmlMessage("birt.viewer.toolbar.exportreport")%>" CLASS="birtviewer_clickable">
</TD>
<TD WIDTH="80px">
<font size="2"><b>打印</b></font>
<INPUT TYPE="image" NAME='print' SRC="birt/images/Print.gif"
TITLE="打印"
ALT="<%=BirtResources.getHtmlMessage("birt.viewer.toolbar.print")%>" CLASS="birtviewer_clickable">
</TD>
Dialog路径下的文件用于修改对话框内容,parameter路径下文件用于修改参数对话框的内容,layout用于修改布局。
修改样式:WebViewerExample\webcontent\ birt\styles路径下的文件,用来修改导航栏,工具条,也报表栏,对话框的样式。
BIRT在设计的时候已经考虑了国际化的问题,eclipse官网上得汉化包能很快速地帮助我们解决BIRT汉化的问题。下文将详细说明frameset的汉化。 汉化的过程也很方便,大体来说:先到官网下载相应的汉化包,替换viewServlet.jar 包中得messages.properties文件;重新打包viewServlet.jar包即可。
1、下载汉化包
汉化的过程很简单,先到官网下载相应的汉化包,http://download.eclipse.org/birt/downloads/lang.php?build=R-R1-2_2_2-200802271210
我实际操作过程中发现3.7下对应的语言包下载完后没有messages_zh.properties文件,在2.5版本的链接中是有的,所以推荐到2.5中去下。
2、替换viewservlets.jar 部署
2.1找到刚才安装的汉化插件包,进入plugins目录找到一个名为“org.eclipse.birt.report.viewer.nl_zh_*.jar(*代表版本号)的jar包,然后解压,在/org/eclipse/birt/report/resource目录下面会得到一个Messages_zh.properties文件,这个文件就是能够实现汉化的文件啦。
2.2找到birt运行库目录,即默认的birt-runtime-*目录,然后去/WebViewerExample/WEB-INF/lib下找到名为“viewservlets.jar”的jar包,使用压缩工具打开(不用解压),进入/org/eclipse/birt/report/resource目录,这里会发现一个Messages.properties文件,这个就是birt本身带的语言包配置文件啦。
2.3 将在第一步里得到的“Messages_zh.properties”重命名为“Messages.properties”,然后使用压缩工具的“添加”按钮将此文件添加到“viewservlets.jar”文件中(需要点击“覆盖”),这一步的目的就是将英文的配置文件替换为中文的配置。
2.4 将修改后的viewservlets.jar文件添加到工程,或者覆盖原来的viewservlets.jar文件,即可实现birt在客户端的汉化。