15.1 使用CVS构建BIRT报表设计器和引擎
BIRT报表提供了在设计阶段开放脚本编辑器,添加javascript和java事件机制来扩展报表的使用,另外还提供了包括数据源,数据项,聚合函数,数据展示,数据导出等等一系列的扩展接口,这对于一般的用户来实现丰富多彩的报表已经足矣。不过BIRT报表作为开源社区报表类别使用率最大的报表框架,开放源代码以及组织良好的源码和类库功不可没。这对于想深度定制报表功能的用户是个很大的福音。
使用CVS构建BIRT报表设计器和引擎在官网上有一个详细的介绍,地址如下:
http://www.eclipse.org/birt/phoenix/build/buildInstructions.php
大概的步骤如下:
首先用Eclipse连上BIRT的CVS
填写地址路径用户名端口等信息:
Host | dev.eclipse.org |
Repository path | /cvsroot/birt |
User | anonymous |
Connection type | pserver |
Use Default Port | Selected |
在CVS的源文件夹下 的/ home / BIRT BIRT模块。BIRT有超过150个模块,其中的一些描述如下。
项目文件夹 | 内容 |
org.eclipse.birt.chart.device.extension | 扩展类的设备渲染架构的图表 |
org.eclipse.birt.chart.engine | 图表模型和工厂类 |
org.eclipse.birt.chart.engine.extension | 扩展类的模型渲染架构的图表 |
org.eclipse.birt.chart.reportitem | BIRT报表设计器和运行时引擎的图表模块的类进行交互 |
org.eclipse.birt.chart.shared | 图表模块的不同组件之间的共享的类 |
org.eclipse.birt.chart.ui | 图表生成器UI类 |
org.eclipse.birt.chart.ui.extension | 图表生成器UI的扩展 |
org.eclipse.birt.chart.device.extension | 图表引擎扩展插件包含设备的渲染器实现(的Swing,SWT,PNG,GIF,JPG,BMP) |
org.eclipse.birt.chart.device.svg | 图表引擎扩展插件的渲染器实现SVG装置 |
org.eclipse.birt.converters | 包含转换器,可以转换成其他格式的报告,的BIRT报表格式的 |
org.eclipse.birt.core | 加载插件在运行时提供了一个框架,并包含其他类,它们可用于由任何其他模块 |
org.eclipse.birt.data | 提供的数据引擎执行情况和官方发布的工厂实现。它也包含类应用的数据转换。 |
org.eclipse.birt.data.oda | 官方发布的公共接口:用于创建数据扩展的类和接口。 |
org.eclipse.birt.data.oda.adapter.dtp | 适配器的数据工具项目 |
org.eclipse.birt.report.data.oda.flatfile | 官方发布的访问平面文件数据源驱动程序 |
org.eclipse.birt.report.data.oda.flatfile.ui | 官方发布的平面文件驱动器的用户界面 |
org.eclipse.birt.data.oda.jdbc | 官方发布的JDBC驱动程序 |
org.eclipse.birt.data.oda.jdbc.ui | 官方发布的JDBC驱动程序的用户界面 |
org.eclipse.birt.report.data.oda.sampledb | 官方开发的示例数据库驱动程序 |
org.eclipse.birt.report.data.oda.sampledb.ui | 官方开发的示例数据库驱动程序的用户界面 |
org.eclipse.birt.data.oda.xml | ODA驱动程序来访问XML数据源 |
org.eclipse.birt.data.oda.xml.ui | ODA驱动程序来访问XML数据源的用户界面 |
org.eclipse.birt.report.debug.ui | 用于创建启动配置调试包含Java事件的报告时 |
org.eclipse.birt.report.designer.core | 核心类的BIRT报表设计器,包括的BIRT模型的类互动,本地化和其他实用工具类 |
org.eclipse.birt.report.designer.lib | 用于库操作的类 |
org.eclipse.birt.report.designer.lib.explorer | 处理库内容的浏览和探索 |
org.eclipse.birt.report.designer.ui | BIRT报表设计器 |
org.eclipse.birt.report.designer.ui.rcp | BIRT RCP报告设计器 |
org.eclipse.birt.report.engine | BIRT报表引擎,生成报表的报表设计 |
org.eclipse.birt.report.engine.emitter.fo | 发射器,用于生成报表输出FO |
org.eclipse.birt.report.engine.emitter.html | 在HTML生成报表输出的发射器, |
org.eclipse.birt.report.engine.emitter.pdf | 发射器,生成报表输出PDF |
org.eclipse.birt.report.model | BIRT报表模型 |
org.eclipse.birt.report.viewer | BIRT报表查看器(BIRT Web应用程序) |
org.eclipse.birt-feature | BIRT功能 |
导入iText的1.3和 iTextAsian到com.lowagie.itext / lib目录中。
从源码中复制三个插件到当前项目根目录下:
org.apache.batik.pdf_1.6.0.v20060623-1511
org.apache.batik_1.6.0.v20060623-1511
org.apache.xerces_2.8.0.v20060815-0630
重命名如下:
org.apache.batik.pdf
org.apache.batik
org.apache.xerces
用ant编译:
这样,在源码中改变视图viewer语言,汉化视图的方法如下:
在Source里有一个nl的文件夹 里面有很多国际化文件
打开org.eclipse.birt.report.viewer.nl这个包的src/org/eclipse/birt/report/resource下边可以看到几个msg文件
接着Check out Message_zh_CN.msg这个msg文件
直接打开会是乱码的 需要通过 native2ascii -encoding gbk BirtResources_zh_CN.msg BirtResources_zh_CN.properties 来编码(也可以直接使用UE等高级文本工具打开后直接复制出来)。
最后复制这个编码后的文件压到 lib/viewServlets.jar这个包的
/org/eclipse/birt/report/resource目录下
注意目录和包路径不要放错了,我几次都放错位置而且把文件名也弄错了。
接着就可以通过__locale=zh-CN的属性来访问中文的BIRT view了
扩展报表其它格式文件的导出和显示也可以直接从源码入手,例如增加一个csv格式的render:
- import org.eclipse.birt.report.engine.api.IRenderOption;
- import org.eclipse.birt.report.engine.api.RenderOption;
- public class CSVRenderOption extends RenderOption
- {
- public static final String OUTPUT_FORMAT_CSV = "xls";
- public CSVRenderOption()
- {
- super();
- }
- public CSVRenderOption(IRenderOption options)
- {
- super(options);
- }
- }
在报表引擎那里这样调用的:
- // PDFIRenderOption pdfOptions;
- pdfOptions = new PDFRenderOption();
- pdfOptions.setOutputFormat(PDFRenderOption.OUTPUT_FORMAT_PDF);
- pdfOptions.setOutputFileName("D:/birt/test.pdf");
- task.setRenderOption(pdfOptions);
- task.run();
- // HTMLIRenderOption htmlOptions;
- htmlOptions = new HTMLRenderOption();
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- htmlOptions.setOutputStream(bos);
- htmlOptions.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML);
- task.setRenderOption(htmlOptions);
- task.run();
- browser.setText(bos.toString());
- // CSVIRenderOption csvOptions;
- csvOptions = new CSVRenderOption();
- csvOptions.setOutputFileName("D:/birt/test.xls");
- csvOptions.setOutputFormat(CSVRenderOption.OUTPUT_FORMAT_CSV);
- task.setRenderOption(csvOptions);
- task.run();
- // destroy the tasktask.close();
- engine.destroy();
这样会分别导出为Excel文件,pdf文件,同时用HTML的形式显示在browser上。
同时在plugin.xml和sillycatGen.product上面都要添加上这个包:
org.eclipse.birt.report.engine.emitter.prototype.excel
改变导出文件编码的方式如下,以导出CSV数据为例:
找到输出csv数据的代码找到org.eclipse.birt.report.viewer/birt/WEB-INF/classes/org/eclipse/birt/report/service/ReportEngineService.java. 找到extractData这个函数,这个函数是负责输出数据到csv文件的.这个函数里面有两个outputStream.write( buf.toString( ).getBytes( ParameterAccessor.UTF_8_ENCODE ) );把这两行语句改为outputStream.write( buf.toString( ).getBytes( "GBK" ) );
把修改了的文件进行编译,把这个class文件替换viewservlets.jar包中的ReportEngineService文件.最后在把这个包放到lib下.这样问题得到解决.
当然,通过修改源代码还能进行更多复杂的功能,比如增加报表预览时的权限审核,增加数据源,数据集,数据项等等。