注:本文转自 http://blog.csdn.net/xujiaqiang/archive/2008/01/19/2052789.aspx
感谢作者分享。
Birt报表设计步骤:
1、下载birt all in one 2.2.1.1,包含eclipse,解开下载文件
启动eclipse,必须使用JDK1.5启动eclipse,否则新建工程对话框中没有birt的相关选项
2、新建report project和report
打开data explorer视图,新建一个data sources,定义数据库连接driver/url/用户名/密码,在"Manage Drivers..."中把jdbc的jar加进来
3、新建Report Parameter,设置参数名称、类型,参数值将来通过url传递或使用程序方式赋值
4、新建data sets,设置Query,即preparedStatement语句,设置data set的Pameters,即reparedStatement中的“?”,使之和report parameter关联; 如果data set的Parameter的值不是来自于Report Parameter,例如来自另外一个data set, 可不设置关联,而在报表内容中设置和其它data set字段的关联(见步骤8)
5、如果data set对应的sql是动态生成的,可以设置“property Binding”,在Query Text中输入sql和表达式,其中可以使用Report Parameter和javascript语句,运行时将执行Property Binding中的Query Text,而不执行Query中的preparedStatement,但是Query中的preparedStatement在设计报表时还是有用的,因为可以看到运行结果的字段列表,只要preparedStatement和Query Text返回相同的字段即可
6、将定义好的data set拖动到设计界面上,会自动在报表放置一个Table
7、如要对table的某列合计,从Palette视图中拖一个“Aggregation”到设计界面
8、如要Master-Sleve报表,则在Table中再放置一个Table。例如一个data set是客户基本信息,每个客户一条记录,另一个data set是客户交易明细,每个客户可能有多条记录,则先将客户基本信息的data set拖置设计界面,会自动放置一个Table,然后将客户交易明细的data set拖置前一个Table中适当位置,即生成一个Table中的Table。选中交易明细的Table,打开Property Editor视图,在binding栏中,选择交易明细的data set,按“Dataset Parameter Binding...”,选择“CUST_ID"字段,将其和客户基本信息data set的CUST_ID关联起来(row["CUST_ID"])
9、按需要调整报表的样式,从eclipse工具栏中选择“view report in web viewer”,如果设置了Report Parameter,会出现一个对话框,要求输入Report Parameter的值,按确定后生成报表内容
10、在web viewer中,鼠标右建点按生成的报表,选“属性”,获取url,开一个空白IE,复制url到地址栏,在url最后用“&参数名=参数值”方式,把Report Parameter加进url,按回车,直接出现报表结果,不再出现报表参数输入对话框。还可以pdf/doc/html等格式预览生成的报表
Birt报表部署步骤:
部署设计好的报表很简单,只需要下载Birt runtime,将Birt runtime部署为一个web应用,报表设计文件复制到该应用的根目录即可。为方便起见,以下将Birt runtime部属为一个独立的应用,当然也可以将Birt runtime整合到你的web应用中
1、下载birt runtime 2.2.1.1,解开下载文件
2、将birt rumtime解开后的目录下的部署为一个web应用,使用JDK1.4.2或以上版本
3、将报表设计步骤中生成的设计文件(*.retdesing文件)复制到web应用所在目录
4、确保以下文件在WEB-INF/lib目录下存在,如果没有,从all in one中搜索复制过来
com.ibm.icu_3.6.1.v20070906.jar
coreapi.jar
engineapi.jar
scriptapi.jar
5、将jdbc的jar或zip文件复制到WEB-INF\platform\plugins\org.eclipse.birt.report.data.oda.jdbc_2.2.1.r22x_v20070919\drivers目录下
6、删除WEB-INF\platform\org.eclipse.birt.report.data.oda.sampledb_2.2.1.r22x_v20070919目录(示例数据库,没什么用处),否则生成报表时有不必要的警告信息出现
7、启动web server,修改设计步骤第10步获得的url,使IP/端口/web应用名称符合你的Birt runtime部署,在IE中可以查看报表内容
使用Birt提供API以程序方式生成报表结果,例如生成PDF格式的报表结果,代码片段如下:
- import java.util.HashMap;
- import java.util.logging.Level;
-
- import java.io.OutputStream;
- import java.io.FileOutputStream;
- import java.io.ByteArrayOutputStream;
-
- import org.eclipse.<SPAN class=hilite1>birt</SPAN>.core.framework.Platform;
- import org.eclipse.<SPAN class=hilite1>birt</SPAN>.report.engine.api.EngineConfig;
- import org.eclipse.<SPAN class=hilite1>birt</SPAN>.report.engine.api.EngineConstants;
- import org.eclipse.<SPAN class=hilite1>birt</SPAN>.report.engine.api.EngineException;
- import org.eclipse.<SPAN class=hilite1>birt</SPAN>.report.engine.api.IReportEngine;
- import org.eclipse.<SPAN class=hilite1>birt</SPAN>.report.engine.api.IReportEngineFactory;
- import org.eclipse.<SPAN class=hilite1>birt</SPAN>.report.engine.api.IReportRunnable;
- import org.eclipse.<SPAN class=hilite1>birt</SPAN>.report.engine.api.IRunAndRenderTask;
- import org.eclipse.<SPAN class=hilite1>birt</SPAN>.report.engine.api.<SPAN class=hilite2>PDF</SPAN>RenderOption;
-
- public class <SPAN class=hilite2>PDF</SPAN>ReportServiceAccess
- {
-
- protected static boolean initStatus = false;
-
- private static IReportEngine engine = null;
-
- private static EngineConfig config = null;
-
- private static IReportRunnable design = null;
-
- private static <SPAN class=hilite2>PDF</SPAN>RenderOption ro = null;
-
-
- public void initilize()
- {
- if ( initStatus == true )
- return;
-
- try
- {
- config = new EngineConfig();
- config.setEngineHome( "C:/projects/<SPAN class=hilite1>birt</SPAN>/WEB-INF/platform" );
- config.setLogConfig( "C:/projects/<SPAN class=hilite1>birt</SPAN>/logs", Level.FINE );
-
- Platform.startup( config );
- IReportEngineFactory factory = ( IReportEngineFactory ) Platform
- .createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
- engine = factory.createReportEngine( config );
- engine.changeLogLevel( Level.WARNING );
-
- ro = new <SPAN class=hilite2>PDF</SPAN>RenderOption();
-
- config.getEmitterConfigs().put( "<SPAN class=hilite2>pdf</SPAN>", ro );
-
- initStatus = true;
-
- }
- catch ( Exception ex )
- {
- ex.printStackTrace();
- initStatus = false;
- }
- }
-
-
- public void release()
- {
- engine.shutdown();
- Platform.shutdown();
-
- initStatus = false;
- }
-
- protected OutputStream run( String filename, HashMap parameters ) throws EngineException
- {
- design = engine.openReportDesign( filename );
-
-
- IRunAndRenderTask task = engine.createRunAndRenderTask( design );
- HashMap contextMap = new HashMap();
- contextMap.put( EngineConstants.APPCONTEXT_<SPAN class=hilite2>PDF</SPAN>_RENDER_CONTEXT, ro );
- task.setAppContext( contextMap );
- task.setParameterValues( parameters );
- task.validateParameters();
-
- OutputStream os = new ByteArrayOutputStream();
- ro.setOutputStream( os );
- ro.setOutputFormat( "<SPAN class=hilite2>pdf</SPAN>" );
- task.setRenderOption( ro );
-
- task.run();
- task.close();
-
- return os;
- }
-
-
-
-
-
-
-
-
-
-
- public OutputStream call( String filename, HashMap parameters ) throws EngineException
- {
- initilize();
- OutputStream os = run( filename, parameters );
- release();
-
- return os;
- }
-
-
-
-
- public static void main( String[] args )
- {
- HashMap parameters = new HashMap();
-
- parameters.put( "begindate", "2004/01/01" );
- parameters.put( "enddate", "2007/12/31" );
- parameters.put( "sql", " where cust_id = 1234567" );
-
- ByteArrayOutputStream bos = null;
-
- <SPAN class=hilite2>PDF</SPAN>ReportServiceAccess ebr = new <SPAN class=hilite2>PDF</SPAN>ReportServiceAccess();
-
- String filename = "C:/projects/<SPAN class=hilite1>birt</SPAN>/batch_report.rptdesign";
- try
- {
- bos = ( ByteArrayOutputStream ) ebr.call( filename, parameters );
- OutputStream fis = new FileOutputStream( "c:/test.<SPAN class=hilite2>pdf</SPAN>" );
- bos.writeTo( fis );
- }
- catch ( Exception e )
- {
- e.printStackTrace();
- }
- }
-
- }