在项目中集成Pentaho Report Designer(胖大海报表设计器)(待续)

来源:互联网 发布:qq游戏for mac 下载 编辑:程序博客网 时间:2024/04/30 04:25

在项目中集成Pentaho Report Designer

作者:郑州轻工业学院 现代教育技术中心 甘琤

 

关键词:Pentaho Report Designer, JFreeReport, 自定义报表, 参数化报表,集成

1. 前言 

Pentaho Report Designer Pentaho公司开发的报表设计工具,该设计器能够和Pentaho公司的商业智能平台或报表系统一起使用,是一个基于JFreeReport的开源系统。

JFreeReport是一套绘制报表的基础API框架,其结构类似于MSVCDocument-View(文档视图模型)。为了使得JFreeReport更具有普适性,其内部使用javax.swing.TableModel机制来作为报表数据的持有形式。再利用JFreeReport制作面向数据库的报表时,开发人员必须自行从数据库中取得数据,并填充到javax.swing.TableModel的实例中才能够使用JFreeReport渲染、生成报表。由此我们可知,JFreeReport只是一套绘制报表的较高抽象层次的基础工具,在项目中使用JFreeReport,程序员还必须写数据获取、生成javax.swing.TableModel实例等代码,同时报表作为一个平台级的服务,可能还需要写复杂报表设计器、解释器等用户工具。

鉴于Pentaho公司已经完成了上述工作,并开放其产品源代码,因此在Pentaho的基础上将Pentaho Report Designer集成到我们的MIS系统中来实现报表服务是一种成本低、速度快、产品质量高的一种解决方案。

2.         Pentaho 报表系统的简要分析

2.1 Pentaho报表系统的组成

Pentaho报表系统由三部分组成:报表解释器(内核)、报表设计器、报表发布平台。报表设计者使用报表设计器生成一个报表模板,在报表设计器中,报表设计者可以完成数据库查询的生成、报表排版、报表预览等工作,最后可以将报表发布到报表发布平台中;在报表发布平台上报表用户可以选取自己需要的报表,生成PDFRTFExcel等格式的报表文件;报表解释器是一套利用JFreeReport的报表生成工具,在设计器中直接包含了该解释器;而报表发布平台实际上是一套简化配置的Pentaho BI,实际上使用Pentaho BI内部的Pentaho Sequence FlowPentaho Report Compoent等组件间接引用解释器解释生成报表的。整个体系结构大致如1所示。

 

图1 Pentaho报表系统的概要结构

2.2.        Pentaho报表模板文件及其解释器

Pentaho Report Designer所生成的报表模板文件以report作为扩展名的xml文件,以文本编辑工具打开报表模板文件可以发现这些文件中总共包括了三部分内容,分别是:数据源及数据查询定义、报表内嵌数据处理(函数)、报表格式信息。其中报表格式的xml标签基本上是一种对JFreeReport报表xml的元标签的扩展与包装。 2中简单列出一个报表模板文件的实例结构的截图(其中注释系作者添加)。限于篇幅,此处不再赘述,读者可以自行查阅资料将Pentaho Report报表模板与JFreeReport模板进行对比分析。

 

图 2 Pentaho Report 报表模板的XML结构示意

报表解释器将根据报表模板文件的定义进行数据获取、数据加工,最后生成符合JFreeReport要求的javax.swing.TableModel实例,根据格式标签中的信息生成JFreeReport的报表展现的定义部分,最后启动JFreeReport引擎,生成各种格式的报表。

通过以上分析可以得出结论,Pentaho Report很好地完成了数据查询的用户自定义、报表内部数据处理的自定义,并以JFreeReport强大的报表展示能力为基础,实现了一个完整的报表制作、生成、发布的系统。

3.         在项目中引用Pentaho报表平台

在项目中应用Pentaho报表平台的方式至少有两种方式:1)完整地引用整个Pentaho报表系统;2)编写少量的代码根据需要调用Pentaho报表系统。

如前文所述,Pentaho报表系统实际上就是Pentaho BI的精简配置版,在比较庞大的项目中,作者建议将整个Pentaho报表系统完整地引入到项目中,甚至可以考虑引入整个Pentaho BI系统。对于一些小型项目,采用方式2可能是一种更为可行的办法,通过这种方式可以把Pentaho报表设计器直接提供给用户,并利用Pentaho解释器生成用户需要的报表。

如何完整地引用Pentaho的报表平台或者BI系统可以参照Pentaho官方网站(http://www.pentaho.org)的内容。本文着重讲述方式2

3.1.        调用Pentaho报表系统生成各种报表

Pentaho报表系统中,报表设计器(Report Designer)和报表发布平台都能够生成报表,其中报表设计器在预览功能中能够完整地生成各种Pentaho报表系统所能够生成的各类报表,当报表被发布到报表发布平台的时候,实际上是被转换成为一系列的Action Script,这些Action Script可以由sequence flow组件解释执行,能够引导用户进行一些简单的交互,如:报表参数选择、报表生成类型选择、大计算量报表后台执行等。

相对而言,报表设计器在复杂度和规模量级上来说都要小于报表发布平台,因此我们选择调用报表设计器的功能来实现各种报表的生成。采用这种方法的弊端是在报表生成的过程中无法与用户进行交互,考虑到报表生成的过程中和用户的主要交互就是报表的参数化的问题,本文将在3.2节中提供替代解决方案。

Pentaho虽然对外公布了所有软件的源代码,但是源代码中除了对外公布的SDK有较详细的文档之外,其余的部分均未给出接口文档。作者所采用的办法是将Pentaho Report Designer的报表源代码下载到本地,通过Eclipse进行单步调试,跟踪整个报表的产生过程,从而得到生成各种报表所必须要写的程序执行步骤。

本节首先介绍如何下载、编译和运行Pentaho Report Designer的源代码,然后分别给出生成HTMLPDFRTFExcel的范例。

3.1.1.       Pentaho Report Designer源代码下载、编译和运行

作者使用的IDEJbuilder2008 Trail版,由CodeGear公司在著名开源IDE工具Eclipse的基础上整合各种优秀的插件并进行了一些有特色的开发而发布的。

打开Jbuilder2008,将工作区切换到SVN Perspective模式,在SVN资源库视图中点击鼠标右键,新建立一个指向svn://source.pentaho.org/svnroot的条目。在新建的条目上双击,

 

3 Jbuilder2008
SVN
浏览器检索Pentaho源代码

 

 

4 SVN服务器上检出(check out
源代码的界面

 

 

5 SVN服务器上下载到的工程

即可浏览Pentaho发布的所有项目的源代码(如 3)。在svn://source.pentaho.org/ svnroot/pentaho-reportdesigner/tags/2.0.0-GA位置上点击鼠标右键,选择检出(如 4),得到Pentaho Report Designer 2.0.0 GA版的源代码,切换到JEE Perspective就可以开始调试、运行报表设计器了(如 5)。熟悉SVN的读者也可以采用其他SVN工具下载或者下载其他的版本进行尝试。

Jbuilder2008 JEE PerspectiveProject Explorer中,运行Pentaho Report Designer 2.0.0 GA工程中的org.pentaho.reportdesigner.crm.report.ReportDialog类中的main方法即可在IDE中启动Pentaho的报表设计器。读者可以根据需要使用调试方式启动设计器,一遍进行调试、跟踪工作。

3.1.2. 调用Report Designer 生成各种报表的范例

本文使用Pentaho自带的数据库和报表模板作为范例的环境;运行本节中的例子之前必须安装Pentaho1.7版本,以作者的计算机为例,Pentaho1.7被安装到“c:/pentaho_1_7/”目录中;所有的范例程序都按照Invoice.report报表模板生成对应的报表文件;由于报表的数据来自于数据库中,所以我们需要启动报表所依赖的数据库服务,作者已经单独将Pentaho BI中的Hypersonic数据库剥离出来,读者可在附件中下载后运行。由于Pentaho1.7所提供的Invoice.report报表例子中所定义的数据库连接端口为3306,因此为了让范例在执行的过程中访问到作者所剥离的Hypersonic数据库,读者还需要将Invoice.report中的连接信息中所制订的数据库服务端口修改为Hypersonic的默认服务端口:9001

另外需要注意的是Pentaho的平台使用一个可配置的内核,其报表设计器同样也使用这个内核,因此无论是运行报表设计器还是通过程序来调用设计器中的功能,均需要确保该内核能够访问到正确的配置信息。在随后的范例中,读者可以看到作者均以pentaho报表设计器自带的配置文件启动报表设计器。对于Pentaho内核的配置,读者可以参考Pentaho官方网站的文档。

3.1.2.1 生成PDF的例子

代码清单 1 生成PDF的代码清单中给出了一个调用Pentaho报表设计器的预览功能生成PDF的例子。

代码清单 1 生成PDF的代码清单

代码注释:

24~30行:定义了输入输出文件的信息;

31行:以Pentaho BI 1.7自带报表设计器的配置信息为基础初始化Pentaho内核;

33~34行:建立数据源插件注册表,并将MultiDataSetPlugin加载到该注册表中;

35行:打开报表模板;

36行:初始化JFreeReport的访问者实例(可参照GOF visitor模式了解相关背景知识);

37行:将报表模块和访问者建立关联,让访问者知道该访问什么资源;

38行:通过访问者获得JFreeReport的报表模板(实际上是访问者根据Pentaho报表模板中关于报表格式的内容转译而成);

39~44行:配置JFreeReport报表;

45行:启动JFreeReport,让JFreeReport完成初始化工作;

46行:准备输出文件;

47行:初始化一个专门生成PDF的处理器对象,除了HTML之外,其他格式(RTFExcel)报表的生成其实就是使用了不同的处理器对象而已,读者可以自行比较代码清单 1代码清单 3代码清单 4,且作者不再对代码清单 3代码清单 4的内容进行讲解;

50行:由处理器处理报表,最终生成目标PDF文件。

3.1.2.2.       生成HTML的例子

代码清单 2 生成HTML的例子”给出了调用Pentaho报表设计器生成HTML报表的例子。值得注意的是:一个HTML往往引用了大量的外部资源,比如背景图片等,因此和生成PDFExcel之类的文档不同,在生成HTML报表的过程中,可能会生成一系列的相关文件,其中较为典型的有cssjpgHTML所需要使用到的资源。

代码清单 2 生成HTML的例子

代码注释:

<其实比较简单回头补充>

3.1.2.3.       生成RTF的例子

代码的在“代码清单 3 生成RTF的例子”给出,具体注释请参照“3.1.2.1生成PDF例子”内容

 

 

 

代码清单 3 生成RTF的例子

3.1.2.4.       生成Excel的例子

代码的在“代码清单 4 生成Excel的例子”给出,具体注释请参照“3.1.2.1生成PDF例子”内容

 

 

 

代码清单 4 生成Excel的例子

<待续,随后内容如下>

3.3.        中文问题的解决

3.4.        项目中报表功能的规模控制建议

4.         总结

另外:鄙视csdn,博客写文章咋这么难排版,大家凑合看吧

原创粉丝点击