使用Eclipse BIRT和POJO的报表教程

Eclipse Birt

本教程介绍如何使用Eclipse BIRT和POJO来制作报表。本教程还介绍了如何部署所制作的BIRT报表到Web容器(Tomcat)中,以及如何把它运用到一个Eclipse RCP应用程序中。 本教程使用的是Eclipse 3.7 (Indigo)。

原文传送门:http://www.vogella.com/tutorials/EclipseBIRT/article.html


1. Eclipse BIRT

1.1. 概述

Eclipse BIRT允许创建基于来自不同数据源数据的报表。

BIRT提供了以下数据源: 

  • 数据库(通过JDBC) 
  • 文本文件(CVS,XML) 
  • Web服务(WSDL通过档案) 
  • 脚本数据源 

您使用BIRT的“数据集”来定义查询的数据源。这些数据集可以在报表中使用。 

在Java程序中,经常方便地使用Java对象作为数据源的报表。本文将重点放在简单Java对象(POJO)作为数据源的BIRT报表的使用。

1.2.示例 

在本教程中,我们将建立一个报表,该报表将显示美国的股票市场信息。我们从一个Java对象中获取数据,该数据将显示在一个图表和详细信息的表格中。其结果应该是这样的:



2.安装 

使用Eclipse Update Manager来安装“Business Intelligence, Reporting and Charting” - > BIRT Framework。 


3.创建项目和报表 

创建一个新的Java项目名称为“de.vogella.birt.stocks”。 

通过File -> New -> Other -> Business Intelligence and Reporting -> Report来创建一个新的报表“stock_report.rptdesign”。








新的报表显示在“报表设计”的角度。删除例子报表中的一切,除了报表的标题。结果应该像下面这样。




4.Java类 

该报表将显示股票数据。为了证明BIRT我们使用模拟对象提供数据。 

创建包“de.vogella.birt.stocks.model”,然后在下面的类。这个类将代表域模型。

package de.vogella.birt.stocks.model;

import java.util.Date;

/**
 * Domain model for stock data
 * @author Lars Vogel
 */


public class StockData {
  private Date date;
  private double open;
  private double high;
  private double low;
  private double close;
  private long volume;

  public double getClose() {
    return close;
  }

  public void setClose(double close) {
    this.close = close;
  }

  public Date getDate() {
    return date;
  }

  public void setDate(Date date) {
    this.date = date;
  }

  public double getHigh() {
    return high;
  }

  public void setHigh(double high) {
    this.high = high;
  }

  public double getLow() {
    return low;
  }

  public void setLow(double low) {
    this.low = low;
  }

  public double getOpen() {
    return open;
  }

  public void setOpen(double open) {
    this.open = open;
  }

  public long getVolume() {
    return volume;
  }

  public void setVolume(long volume) {
    this.volume = volume;
  }

} 
创建包“de.vogella.birt.stocks.daomock”,然后在下面的类“StockDaoMock”。这只会模拟/假数据并没有真正从互联网上得到它,因为我们在这里学习的BIRT这样就应该可以了。

package de.vogella.birt.stocks.daomock;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import de.vogella.birt.stocks.model.StockData;

public class StockDaoMock {

  public List<StockData> getStockValues(String company) {
    // Ignore the company and always return the data
    // A real implementation would of course use the company string
    List<StockData> history = new ArrayList<StockData>();
    // We fake the values, we will return fake value for 01.01.2009 -
    // 31.01.2009
    double begin = 2.5;
    for (int i = 1; i <= 31; i++) {
      Calendar day = Calendar.getInstance();
      day.set(Calendar.HOUR, 0);
      day.set(Calendar.MINUTE, 0);
      day.set(Calendar.SECOND, 0);
      day.set(Calendar.MILLISECOND, 0);
      day.set(Calendar.YEAR, 2009);
      day.set(Calendar.MONTH, 0);
      day.set(Calendar.DAY_OF_MONTH, i);
      StockData data = new StockData();
      data.setOpen(begin);
      double close = Math.round(begin + Math.random() * begin * 0.1);
      data.setClose(close);
      data.setLow(Math.round(Math.min(begin, begin - Math.random() * begin * 0.1)));
      data.setHigh(Math.round(Math.max(begin, close) + Math.random() * 2));
      data.setVolume(1000 + (int) (Math.random() * 500));
      begin = close;
      data.setDate(day.getTime());
      history.add(data);
    }
    return history;
  }
} 


5.数据源和数据集 

使用Java对象(POJO的)作为数据源在Eclipse BIRT你要映射的Java类的JavaScript的领域。这个JavaScript用于在您的报表,并会访问Java对象。 

5.1.创建数据源 

数据源与报表连接您的数据。 BIRT提供不同类型的数据源,我们使用“脚本数据源”。回到你的stocks_report,使用“Report Design”的角度来看,选择“Data Explorer”查看。

创建一个新的数据源,在您的报表名为“srcStocks”。





5.2.该数据集 

该数据集定义了数据源的数据和BIRT的数据映射。创建一个名为“dataSetSocks”新的数据集。






按下一步,并定义报表的列。




5.3. JavaScript

现在我们就来编写JavaScript做为我们的数据集。选择数据集,然后选择“open”的脚本。打开脚本之前所述第一访问的数据集调用。我们用它来装载我们的名单与股票的对象。要访问一个Java类,你只需要使用以下语法:Packages.myJavaClass其中myJavaClass是完整的Java类名。



count = 0;

// create instance of
// the GetStockHistory class
gsh = new Packages.de.vogella.birt.stocks.daomock.StockDaoMock(); 

//Load the List

stock = gsh.getStockValues("Java"); 
复制下面的代码到获取脚本。

if(count < stock.size()){
       row["columnDate"] = stock.get(count).getDate();
       row["columnOpen"] = stock.get(count).getOpen();
       row["columnHigh"] = stock.get(count).getHigh();
       row["columnLow"] = stock.get(count).getLow();
       row["columnClose"] = stock.get(count).getClose();
       row["columnVolume"] = stock.get(count).getVolume();
       count++;
       return true;
}

return false; 

通过双击dataset -> Preview Result来检查您的脚本



6.显示表中的数据 

6.1.概述 

现在,我们将在一个表中显示数据。 

6.2.创建一个表 

从“Data Explorer”切换到“Palette”。选择“Layout”标签。



拖放报表上的表格元素。



为表定义以下设置。



返回到"Data Explorer"。然后,拖放数据集的列到表中的“Details row”。




结果应该像下面这样。




完成。你可以看到这份报表的预览,如果你点击“Review”选项卡。结果应该如下所示:




7.图

7.1.创建图表 

切换回调色板中选择一个图表和拖放在您的报表。 

选择折线图的标准设置。




按下一步,选择你的数据集。




在接下来的步骤中,我们必须分配列到轴线上。我们指定的时间作为x轴,然后通过拖放打开值到y轴上。




一共定义5个系列。通过拖动列的总和符号指定的列到这些系列。




目前在x轴的第一显示最新日期。反向x轴所必须的数据升序进行排序。按突出显示的按钮。




转到下一个标签,并给你列给出的标题。隐藏在最后一个。




日期的显示使用长格式,我们想改变这种情况。执行以下,并选择“short”为日期类型的X轴




改变通过以下的线的显示。




点击Finish按钮把图表引入到您的报表中。


8.在Tomcat中部署 

8.1.概述 

下面介绍如何使用Tomcat的BIRT报表。一般来说,你需要: 

  • 安装BIRT Web查看器中的Tomcat 
  • 您的BIRT项目导出到.jar文件 
  • 移动.jar文件到BIRT安装目录/ WEB-INF / lib目录 
  • 将报表设计文件为BIRT在Tomcat的根目录 
  • 重新启动Tomcat 

8.2.在Tomcat的安装BIRT 

我们将利用我们假设已经安装的独立的Tomcat6.0。请参阅Apache Tomcat Tutorial的详细信息。 

你需要http://download.eclipse.org/birt/downloads/的“BIRT部署的组件”。 

此下载的birt.war复制到Tomcat的webappsfolder。

BIRT的例子应该在http://localhost:8080/birt/中有效了。如果你看到这样的事情,你的Tomcat的您的Web浏览器应该是正确的。



8.3.安装在Tomcat中的BIRT报表 

要运行自己的报表,你必须在.rptdesign文件复制在Tomcat中的BIRT文件夹的根目录。为了使您的Java类,可将项目导出到一个jar文件。








在那之后的jar文件必须复制到Tomcat的webapps/ BIRT/ WEB-INF/ lib /目录。重新启动Tomcat,然后导航至您的报表。 

你的报表应该在HTTP上找到http://localhost:8080/birt/frameset?__report=stock_report.rptdesign




9.部署在Eclipse RCP应用程序 

9.1. BIRT部署到RCP应用程序 

我们可以使用Birtviewer也在本地RCP的应用,这是不超过一个浏览器视图,它示出了由一个集成的网络服务器产生的HTML页面。 

下面假设你已经熟悉的Eclipse RCP开发。请参阅Eclipse RCP的教程的情况下,你需要一个介绍。 

转换“de.vogella.birt.stocks”到插件项目,通过右键单击 -> Configure -> "Convert to plug-in project"。 

创建一个新的插件项目“de.vogella.birt.stocks.rcp”。选择模板“RCP Application with a view”。 

添加以下插件,dependendies为“de.vogella.birt.stocks.rcp”。

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Rcp
Bundle-SymbolicName: de.vogella.birt.stocks.rcp; singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: de.vogella.birt.stocks.rcp.Activator
Require-Bundle: org.eclipse.ui,
 org.eclipse.core.runtime,
 org.eclipse.birt.report.viewer,
 org.eclipse.birt.report.engine.emitter.html,
 de.vogella.birt.stocks,
 org.eclipse.birt,
 org.eclipse.birt.chart.ui,
 org.eclipse.birt.chart.device.extension,
 org.eclipse.birt.chart.device.pdf,
 org.eclipse.birt.chart.device.svg,
 org.eclipse.birt.chart.device.swt,
 org.eclipse.birt.chart.engine.extension,
 org.eclipse.birt.chart.reportitem,
 org.eclipse.birt.chart.reportitem.ui,
 org.eclipse.birt.chart.ui.extension,
 org.eclipse.birt.core.script.function,
 org.eclipse.birt.report.engine.script.javascript
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6 
复制你的报表到这个新项目,并重命名为“stock_report_rcp.rptdesign”。打开此报表,并将“open”脚本更改为如下。

count = 0; 
/*
 * load and init data reader
 * import Platform from org.eclipse.core.runtime
 */
importPackage(Packages.org.eclipse.core.runtime);

/* load bundle with POJOs and data loading class */

myBundle = Platform.getBundle("de.vogella.birt.stocks");

/* load data reader class */
readerClass = myBundle.loadClass("de.vogella.birt.stocks.daomock.StockDaoMock");

/* create new instance of DataReader */
readerInstance = readerClass.newInstance();


/* read data */
stock = readerInstance.getStockValues("Java"); 
使用下边代码做为View.java。

package de.vogella.birt.stocks.rcp;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import org.eclipse.birt.report.viewer.utilities.WebViewer;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;
import org.osgi.framework.Bundle;

public class View extends ViewPart {
  public static final String ID = "de.vogella.birt.stocks.rcp.view";

  public void createPartControl(Composite parent) {
    String path = "";
    try {
      Bundle bundle = Platform.getBundle("de.vogella.birt.stocks.rcp");
      URL url = FileLocator.find(bundle, new Path("stock_report_rcp.rptdesign"), null);
      path = FileLocator.toFileURL(url).getPath();
    } catch (MalformedURLException me) {
      System.out.println("Fehler bei URL " + me.getStackTrace());
    } catch (IOException e) {
      e.printStackTrace();
    }

    Browser browser = new Browser(parent, SWT.NONE);
    // use the filename of your report
    WebViewer.display(path, WebViewer.HTML, browser, "frameset");
  }

  
/**
   * Passing the focus request to the viewer's control.
   */

  public void setFocus() {
  }
} 

10.支持这个网站 

本教程是根据CC BY-NC-SA 3.0 DE授权开放内容。在本教程中的源代码是在Eclipse Public License下发布。请参阅重用的条款细节vogella License页面。 

编写和更新这些教程是一个大量的工作。如果这个免费的社区服务是有用的,你可以通过给小费以及报表拼写错误和事实错误支持的原因。 

10.1.谢谢 

如果这篇文章帮助你,请考虑适当捐款。 



10.2.问题与讨论 

如果您在本教程中发现错误,请通知我(见top of the page)。请确保您已经阅读vogella FAQ,因为已经有解答,所以我不对这里的问题作出回应。


11.链接与文献

11.1.源代码 

示例源代码 

11.2. Eclipse的BIRT资源 

http://wiki.eclipse.org/index.php/BIRT_Project 

Eclipse BIRT Wiki

11.3. vogella资源 

vogella Training Android and Eclipse Training from the vogella team

Android Tutorial Introduction to Android Programming

GWT Tutorial Program in Java, compile to JavaScript and HTML

Eclipse RCP Tutorial Create native applications in Java

JUnit Tutorial Test your application

Git Tutorial Put all your files in a distributed version control system

注:本文对原文进行粗略翻译和略微精简,不足之处还请见谅。

BIRT相关

BIRT? vs JasperReports? vs Pentaho? http://www.innoventsolutions.com/comparison-matrix.html
BIRT Home - Eclipse http://www.eclipse.org/birt/
在 Eclipse 中用 Java 实现百灵报表(BIRT)的事件处理 http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-birtje/index.html

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。