`

利用Eclipse Birt 2.2 的 Chart 标签库打造网页图表

阅读更多

    Eclipse Birt 2.2 的发布,着实让我吓了一大跳,因为它的 Notable Features 一文中的亮点实在是多得惊人,比如交叉表、图表等等。

    这次自己做的一个小软件里面需要用到Birt,反正是自己做来自己用的,也不用管IDE工具是否稳定,只要好用便行,就选了 Birt 2.2.0 这个版本,Eclipse 3.3.0(当时为了避免麻烦,直接下载的是 Eclipse-birt-all-in-one-2.2.0 这个全功能版)

    现在我来说明一下,自己如何利用rptdesign格式的文件创建描述图表的xml格式的chart文件。

1.使用rptdesign文件创建chart文件

    创建一个包含有图表的报表文件(由于创建报表的方法,网上、Eclipse官方都有大量的文献进行讲解,这里就不再赘述),结果如下图所示:

 

Birt 2.2 图1

 

    本来是打算使用Report Viewer,但是查看了网上的文章,虽然绝大多数都是讲解如何使用 Report Viewer 来显示以“rptdesign”为后缀的报表文件,但是也有大量文章指出 Report Viewer 难于扩展的问题,于是乎,在Eclipse创建图表项目的时候,关注了一下项目中自动生成的使用 Chart 标签在网页中显示图表的示例

 

 Birt 2.2 图2

 

    这三个自动生成的与图表在网页中显示的文件是:index.jsp,SampleBar.chart,SamplePie.chart。

    由于,之前创建的报表文件也是使用圆饼图,所以比对该报表文件与SamplePie.chart中的内容,不难发现,其中有一部分内容的xml定义是一致的。它们起始的一段代码均为:

<?xml version="1.0" encoding="UTF-8"?>
<model:ChartWithoutAxes
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:attribute="http://www.birt.eclipse.org/ChartModelAttribute"
     xmlns:layout="http://www.birt.eclipse.org/ChartModelLayout"
     xmlns:model="http://www.birt.eclipse.org/ChartModel"
     xmlns:type="http://www.birt.eclipse.org/ChartModelType">
 <Type>Pie Chart</Type>
 <SubType>Standard Pie Chart</SubType> 

…… 

 

    结束均为

 </SeriesDefinitions>
 <MinSlicePercent>false</MinSlicePercent>
</model:ChartWithoutAxes>

 

    rtpdesign格式的文件中的这段内容嵌套在标签<![CDATA[……]>之间,将这段内容单独拷贝出来,取名为 xx.chart

2.定义数据源

    下载包“birt-source-2_2_0.zip ”,这里有一个类名为 SampleHelper.java 的源代码,参考它的方法 createSampleEvaluator() 中的代码,大致可以了解到如何创建自己的数据源。

    由于准备使用iBatis、hibernate等ORM框架,所以通常数据的返回值为List,而List中的每个对象元素是表示一行数据的Map对象,于是在SampleHelper中增加自己的方法,来处理这种情况,其代码如下:

 public static final IDataRowExpressionEvaluator createEntSumDataSet(
   Collection dataColl, String categoryName, String valueName) {
  if (dataColl == null || StringUtils.isEmpty(categoryName)
    || StringUtils.isEmpty(valueName)) {
   throw new RuntimeException("数据集合、分类名称、数据名称三个参数不能为空!");
  }
  if (dataColl.size() <= 0) {
   throw new RuntimeException("数据集合所包含的数据行不能小于或等于0!");
  }

  String[] columnSet = new String[] { "row[\"" + categoryName + "\"]",
    "row[\"" + valueName + "\"]" };
  Object[][] dataSet = new Object[2][dataColl.size()];

  int rowIndex = 0;
  for (Iterator iterator = dataColl.iterator(); iterator.hasNext(); rowIndex++) {
     Map rowMap = (Map) iterator.next();
     dataSet[0][rowIndex] = rowMap.get(categoryName);
     dataSet[1][rowIndex] = new Integer ((String) rowMap.get(valueName));
  }

  return new SampleDataRowEvaluator(set, data);

}

 

    参数中,dataColl就是我们之前提到的ORM返回的数据集合, categoryName 是我们指定的饼图的每个分块的名称,而 valueName 则表示我们指定的分块对应的数据内容(由于我的 rptdesign 文件中,数据内容为数值,所以这里需要将 valueName 这一列所对应的数据全部转换为数值类型)

    从上面代码不难看出,categoryName 和 valueName 分别表示的是数据的两列的列名;dataSet的一维下标为列下标,二维下标为每一列的第几行

3.页面中显示图表

    在index.jsp中添加如下代码:

<%
 // 定义数据源 
 ArrayList dataList = new ArrayList();
 HashMap rowMap = new HashMap();
 rowMap.put("entcls", "国有企业");
 rowMap.put("count", "100");
 dataList.add(rowMap);

 rowMap = new HashMap();
 rowMap.put("entcls", "私营企业");
 rowMap.put("count", "55");
 dataList.add(rowMap);

 rowMap = new HashMap();
 rowMap.put("entcls", "外资企业");
 rowMap.put("count", "99");
 dataList.add(rowMap);

 rowMap = new HashMap();
 rowMap.put("entcls", "独资企业");
 rowMap.put("count", "129");
 dataList.add(rowMap);

 rowMap = new HashMap();
 rowMap.put("entcls", "个体工商户");
 rowMap.put("count", "392");
 dataList.add(rowMap);

 rowMap = new HashMap();
 rowMap.put("entcls", "合资企业");
 rowMap.put("count", "112");
 dataList.add(rowMap);

 rowMap = new HashMap();
 rowMap.put("entcls", "三资企业");
 rowMap.put("count", "231");
 dataList.add(rowMap);

 rowMap = new HashMap();
 rowMap.put("entcls", "股份企业");
 rowMap.put("count", "890");
 dataList.add(rowMap);

 rowMap = new HashMap();
 rowMap.put("entcls", "垄断企业");
 rowMap.put("count", "190");
 dataList.add(rowMap);

 rowMap = new HashMap();
 rowMap.put("entcls", "私人独资企业");
 rowMap.put("count", "120");
 dataList.add(rowMap);

 rowMap = new HashMap();
 rowMap.put("entcls", "注册企业");
 rowMap.put("count", "790");
 dataList.add(rowMap);

 rowMap = new HashMap();
 rowMap.put("entcls", "注册企业2");
 rowMap.put("count", "790");
 dataList.add(rowMap);
%>
Pie chart (PNG FROM RPTDESIGN):
<br>
RealPath:<%=session.getServletContext().getRealPath(
       "qyjbxxReport.chart")%><br>

<!-- xx.chart 放在 Eclipse 网络项目的 WebContent 文件夹下面 -->
<chart:renderChart width="600" height="500" output="jpg"
 model="<%=session.getServletContext().getRealPath("xx.chart") %>"
 data="<%=CreditEntSum.createCreditEntSumDataSet(dataList, "entcls ", "count ") %>">
</chart:renderChart>
<br>

 

    报表的xml文件xx.chart中需要做出相应的修改,以保证,能够顺利找到需要的列和数据

两处修改后的内容如下:

 

    <DataDefinition>
     <Definition>row[&quot;count&quot;] </Definition>
    </DataDefinition>
    <SeriesIdentifier>统计数量</SeriesIdentifier>


   <DataDefinition>
    <Definition>row[&quot;entcls&quot;] </Definition>
   </DataDefinition>
   <SeriesIdentifier>行业分类</SeriesIdentifier>

 

    上面的黑体字与页面中调用方法 createEntSumDataSet 的参数,和数据源代码中的方法 createEntSumDataSet 中的代码的 columnSet 定义的语句中的内容,一一对应起来,使得 xx.chart 能够从 SampleHelper 中获得所需要的列与数据信息

4.运行index.jsp页面

    所得结果如下:

 

Birt 2.2 图3

 

附注:

    下载 birt-source-2_2_0.zip 这个源代码包的过程,是一个极其痛苦的过程,官方网站上面的下载链接突然失效,后来才知道是服务器无法连接,在网上搜索了很久未果,最终竟然想到镜像,于是用关键字“birt mirror ……”搜索到一个网站“http://www.mirrorservice.org/sites/download.eclipse.org/eclipseMirror/birt/”,这里有着最新的Birt以及Eclipse相关的资料。

    之所以要下载到这个源代码包,就是为了 研究一下SampleHelper到底使用了什么方法来提供数据源给那些图表的。

分享到:
评论

相关推荐

    eclipse birt chart engine example resource code

    "Eclipse BIRT Chart Engine Example Resource Code" 提供的是一个示例资源代码库,帮助开发者更好地理解和使用BIRT图表引擎。 **BIRT图表引擎核心概念:** 1. **图表引擎**:这是BIRT的核心组件之一,负责生成...

    birt _api和·birt_chart_api

    BIRT(Business Intelligence and Reporting Tools)是一个开源的报表系统,由Eclipse基金会维护。它提供了丰富的API,使得开发者能够在其应用程序中嵌入复杂的报表和数据分析功能。本篇将围绕"Birt API"和"Birt ...

    Birt 2.3.2.2学习资料

    - **Calling the Simple Chart API from Script (BIRT)**:通过脚本调用简单的图表API,自定义图表的样式和行为。 - **Change Database URL at runtime based on Parameter (BIRT)**:根据运行时参数动态更改数据库...

    Birt使用经验谈 Chart图(doc)

    这篇文档主要介绍如何在Birt中设计和创建Chart图表。以下是对Birt Chart图设计步骤的详细说明: 1. **环境配置**:虽然在文档中没有详细展开,但Birt的环境通常包括Eclipse集成开发环境,安装了Birt插件。开发者...

    eclieps birt2.5最新版本中文包

    然而,据描述中提到,官方版本的chart图表在运行时存在一个错误,导致无法正常显示chart图。这个问题可能涉及到多个方面,如数据源配置、图表类型选择、渲染设置或内部代码的bug。幸运的是,这个特定的bug已经被修复...

    birt charts 2.6.2

    1. **BIRT Chart Engine**: 这是BIRT图表的核心组件,负责处理数据转换、图表渲染和交互逻辑。它提供了丰富的图表类型,如柱状图、折线图、饼图、散点图等,支持自定义样式和布局,以满足各种数据可视化需求。 2. *...

    birt_api.CHM

    《birt_chart_api.CHM》则专门针对BIRT的图表功能,BIRT的图表模块强大且灵活,支持多种图表类型,如柱状图、折线图、饼图等。这个CHM文件可能详细解释了如何使用API创建、配置和定制图表,包括设置图表属性、数据...

    BIRT使用经验谈.doc

    **BIRT(Business Intelligence and Reporting Tools)是IBM推出的一款开源报表系统,主要...通过深入理解和实践“Birt使用经验谈chart2006.04.11.doc”文档中的内容,用户可以更高效地利用BIRT解决实际的报表需求。

    Birt一步步开发教程

    在“Data Explorer”中创建新的数据集,定义查询条件,然后在报表设计区拖拽“Chart”元素,选择你创建的数据集,并配置图表样式和选项。 #### 2.3.1 新建数据集 在“Data Explorer”中,右键单击“Data Sets”并...

    BIRT报表开发文档

    在BIRT中,创建图表涉及选择合适的图表类型,定义数据系列,设置轴、标签和颜色。可以使用数据绑定将图表与报表的其他部分联动,实现动态交互。 ### 五.报表的参数使用 参数是BIRT报表中的一个重要特性,允许用户...

    birt学习必备官方api

    6. **Chart API**:BIRT的图表组件提供了一套完整的API,用于创建各种类型的图表,并进行样式和行为的定制。 7. **Web Viewer API**:用于在Web应用程序中嵌入BIRT报表查看器。开发者可以利用此API控制报表的显示和...

    birt报表资料_珍藏.rar

    在【Birt使用经验谈chart2006.04.11.doc】中,可能包含了用户对BIRT图表功能的深入理解和实用技巧。 1. **BIRT报表设计**:BIRT的报表设计工具提供了拖放式的界面,使得非程序员也能轻松设计报表布局。通过组合表格...

    Birt 开发文档 中文WORD版

    4. Chart图表:包括饼图、线性图等多种图表,使数据可视化,便于快速理解。 报表开发涉及报表参数的使用,如ComboBox、RadioButton、List等,以及级联参数的应用。此外,文档还涵盖样式模板和自定义JavaScript的...

    birt组成部分和使用说明关键点讲解扩展点讲解使用oda扩展

    - **Chart Overview**:BIRT提供强大的图表生成能力,支持各种图表类型。 - **独立图表演示**:除了嵌入到报告中的图表,BIRT还可以创建独立的图表应用程序。 6. **部署与集成**: - **Web Viewer**:在Web环境...

    Birt 报表开发文档

    比如,Birt使用说明.doc可能是基础操作的引导,而Birt使用经验谈chart图.doc则可能专门针对图表的创建和定制进行了深入讲解。 最后,两份PDF文档:Addison.Wesley.Integrating.and.Extending.BIRT.Nov.2006.pdf和...

    Birt Report技术

    4. **Chart 图表**:利用图表技术直观展示数据变化趋势,提升数据可视性。 #### 四、报表开发实践 1. **清单表开发**:主要涉及 SQL 查询的设计与优化,以及报表布局的设置。 2. **固定格子表开发**:需要考虑表头...

    birt图形报、报表引擎、3D报表实例,绝对震撼,看后绝对有收获

    7. **com.ibm.examples.chart.zip**:IBM作为BIRT的重要贡献者,这个压缩文件可能是IBM提供的图表示例代码或教程,帮助开发者更好地理解和使用BIRT的图表功能,尤其是高级特性和自定义图表的实现。 通过深入学习...

    Birt一步步开发教程.doc

    - **创立表**:在设计视图中,从工具栏选择"Chart"拖放到设计区,然后配置图表类型、数据系列、轴、标签等属性。数据集与图表关联,图表的数据将基于所选数据集。 ### 3. 报表的发布 #### 3.1 使用Tomcat发布报表 ...

Global site tag (gtag.js) - Google Analytics