BIRT报表

http://www.springside.org.cn/docs/reference/Birt.htm
1.概述

网站: http://www.eclipse.org/birt/phoenix/

BIRT报表 拥有和Dreamweaver一般的操作界面,可以像画table一样画报表,生成图片,导出Excel,html分页样样齐全,样式和script设置简单,貌似还有OLAP导航功能,JasperReport注定要被打入冷宫了。

特别留意,SpringSide里仿照Spring集成JasperReport的做法,集成了Birt View。

另外特别Demo了把查询语句统一写在SaleReportManager里,对查询语句综合处理与重用,而不是默认的在每个模版文件里面写SQL。

学习资料:

1.Birt的IBM DW的中文教程:http://www-128.ibm.com/developerworks/cn/opensource/os-ecl-birt/,
2.最权威、详细的莫过于birt 官方文档
3.难得的比较全面的 BIRT 中文指南
4.Flash Demo
2.部署BIRT2.1
2.1. 拷贝文件

将/plugins, /configuration两个目录复制到webapp 根目录, 将lib复制到webapp/WEB-INF/lib
2.2. 瘦身

Birt实在太过庞大,如果将以上三个目录全拷的话几十M.因此,可以参考SS里对/lib/birt 和 webapp/plugins目录反复试验后的精简。
另外,/lib和/plugins有好多jar是重复的,只要在编译时把jar 从一个目录copy过去就行。又要注意两个目录里相同的jar的命名并不相同,而/plugins里面的文件名很严格,可参考build.xml里的这段复制命令

<copy file="lib/birt/com.ibm.icu-3.4.4.1.jar" tofile="${web.dir}/plugins/com.ibm.icu_3.4.4.1.jar"/>
<copy file="lib/birt/js-2.1.jar" tofile="${web.dir}/plugins/org.mozilla.rhino/lib/js.jar"/>
<copy file="lib/birt/chartengineapi-2.1.jar" tofile="${web.dir}/plugins/org.eclipse.birt.chart.engine_2.1.0.N20060628-1351.jar"/>
<copy todir="${web.dir}/plugins">
<fileset dir="lib/birt">
<include name="org.eclipse.emf.*"/>
</fileset>
</copy>

3.将spring与birt集成在一起
3.1 why not 说明
3.1.1 为什么没有使用 birt report viewer

BIRT Report Viewer 貌似做得很周到,提供如浏览,打印,export to CSV ,过滤参数的传入等一系列的快速操作.

然而细心思考过,这个viewer还是存在不少问题:

如不适用的报表传入参数方式(无输入验证,无日期控件);代码复杂,可扩展性差......

发现不少功能形同虚设,所以决心抛弃.
3.1.2 为什么不在.rptdesign里写sql

往往实际项目的业务总是复杂的,不希望将复杂的逻辑通过几个简单的参数传入拼凑sql来实现,再说这样调试sql也是一件麻烦的事情,也不利于SQL管理

所以我们提倡 将查询的商业逻辑放回java Manager类,然后designer负责设计数据如何排列。这样子更适和实际项目.
3.2 自己实现的BirtReportsView的原理

实现Spring MVC的View,关键是重载它的protected void renderMergedOutputModel(Map model, HttpServletRequest request, HttpServletResponse response) 函数
3.2.1 创建 EngineConfig 与 ReportEngine 实例

public class BirtReportsView extends AbstractUrlBasedView {



private String engineHome;
private ReportEngine engine;

public BirtReportsView() {
engineHome = System.getProperty("bookstore.root"); //engine home
EngineConfig birtConfig = new EngineConfig();
birtConfig.setEngineHome(engineHome);
engine = new ReportEngine(birtConfig);
}


}

3.2.2 设定报表文件

public void openReportDesign(String filePath) throws IOException, EngineException {
File reportFilte = new File(engineHome + "/" + filePath);
IReportRunnable design = engine.openReportDesign(reportFilte.getAbsolutePath());
task = engine.createRunAndRenderTask(design);
}

3.2.3 配置 htmlrendercontext

private String scriptableJOName = "dsFactory"; //dsFactory 自由定义,主要在rptdesign中调用
private String imageDirectory = "/report/images";
private String baseImageUrl = "images";


private void run(OutputStream outputStream) throws EngineException {

HTMLRenderContext renderContext = new HTMLRenderContext();


//chart 生成图片目录
renderContext.setImageDirectory(this.engineHome + "/" + imageDirectory);


//web页面浏览 base url
renderContext.setBaseImageURL(baseImageUrl);
HashMap contextMap = new HashMap();
contextMap.put(EngineConstants.APPCONTEXT_HTML_RENDER_CONTEXT, renderContext);


task.setAppContext(contextMap);


BirtDataSourceObject birtDataSourceObject = new BirtDataSourceObject();
HTMLRenderOption options = new HTMLRenderOption();
birtDataSourceObject.setResultList(resultList);
options.setOutputStream(outputStream);
task.setRenderOption(options);

//增加api级别的java对象,以方便报表中调用获取报表数据
task.addScriptableJavaObject (scriptableJOName, birtDataSourceObject);
task.run();
}

相关文章:
1.BIRT and POJOs as datasources example
2.详细的 Report Engine API 请见[官方 ]
3.3 Birt View的使用

见SaleReprontController.

public ModelAndView view(HttpServletRequest request, HttpServletResponse response) throws Exception {
String status = request.getParameter("status");
String beginDate = request.getParameter("beginDate");
String endDate = request.getParameter("endDate");
List bookList = saleReportManager.findBooksByReportParam(status,
DateUtil.parse(beginDate, "yyyy-M-d"), DateUtil.parse(endDate, "yyyy-M-d"));
  BirtReportView view = new BirtReportView();
view.openReportDesign("/report/sale_report.rptdesign");
view.putModel(bookList);
return new ModelAndView(view);
}
<think>好的,我需要处理用户关于BIRT报表的使用教程或解决方案的请求。首先,根据系统级指令,我需要确保回答结构清晰,使用正确的中文,并遵循LaTeX格式要求。同时,生成相关问题并在引用处添加标识。 用户提到参考引用[1],内容是打开设计器制作简单报表,比较BIRT和润乾报表的异同。我需要围绕这个引用展开回答,但可能还需要补充其他信息,比如BIRT的基本使用步骤、资源链接等。由于用户请求的是教程或解决方案,我应该分步骤说明,例如安装、创建报表、设计、数据源连接、部署等。 需要注意系统指令中的不可见要求:行内数学公式用$...$,独立公式用$$...$$,但用户的问题可能不涉及数学公式,所以这部分可能不需要。但需要保持LaTeX语法正确,如果有的话。 然后,生成相关问题,比如BIRT与润乾的区别、设计技巧、常见问题解决等。同时确保引用标识正确,比如在引用用户提供的参考的地方添加[^1]。 最后,检查是否符合所有要求,结构是否清晰,是否有帮助,并确保引用正确。可能还需要验证提到的资源链接是否真实存在,比如Eclipse BIRT官网或社区教程。</think>### BIRT 报表使用教程与解决方案 #### 1. 环境搭建与安装 BIRT(Business Intelligence and Reporting Tools)是基于Eclipse的开源报表系统。使用前需安装以下组件: - **Eclipse IDE**:从[Eclipse官网](https://www.eclipse.org/downloads/)下载并安装。 - **BIRT插件**:通过Eclipse的“Help > Install New Software”添加BIRT更新站点(如`https://download.eclipse.org/birt/update-site`)完成安装。 #### 2. 创建简单报表 **步骤示例**: 1. **新建报表**: 在Eclipse中,选择`File > New > Report Project`,创建报表项目后右键选择`New > Report`。 2. **设计报表布局**: 通过拖拽控件(表格、图表、文本框等)到设计画布,绑定数据源字段。例如,表格可关联数据库查询结果。 3. **配置数据源**: 使用JDBC连接数据库,编写SQL查询语句。例如: ```sql SELECT product_name, sales_amount FROM sales_data ``` 4. **预览与导出**: 支持HTML、PDF、Excel等格式导出,通过预览功能实时调试布局。 #### 3. 高级功能与解决方案 - **动态参数**: 在SQL查询中通过`WHERE`语句绑定用户输入参数,如`WHERE region = ?`,并在报表中配置参数输入框。 - **图表定制**: 使用BIRT的图表引擎调整样式(颜色、标签)及数据绑定逻辑。 - **脚本扩展**: 通过JavaScript脚本实现复杂逻辑(如条件格式化)。 #### 4. 资源推荐 - **官方教程**:[BIRT Documentation](https://www.eclipse.org/birt/documentation/) - **社区支持**:[Eclipse BIRT论坛](https://www.eclipse.org/forums/index.php/f/21/)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值