经过一段时间的研究发现水晶报表其实是个烂东西,所以重新找报表打印系统。决定在birt 和jasperreport中选一个(选这两个是因为都是开源免费的),初步选择了birt后来发现myeclipse直接就支持birt。
先说下我对报表的要求
1.独立的报表文件,(这个比较容易,大多数报表系统都能达到要求);
2.支持java类方式的数据源,这样比较容易和spring和hibernate集成(Birt的script数据源可以达到要求);
3.能设计出中国式的报表(唉,中国的报表实在是很烦人啊);
由以上的要求选择报表,发现Birt可以达到要求,在了解了Birt的script后决定系统报表系统如下设计;
1.在shark的流程图中定义各活动要求打印的报表id
2.当用户选择要打印的报表后把shark的活动信息存储到session中,同时到数据库根据id查到相对印的报表文件加载报表.
3.报表利用script数据源取得session中的shark活动信息和Spring的context,根据shark的活动信息通过context取得spring的session Bean得到数据并显示报表.
Birt的使用
Myeclipse 直接可对项目添加Birt报表支持(同添加JSF支持相同),不过值得一提的是,mcEclipse的版本不同,所使用的Birt版本也不同,而我的开发 小组,有使用7.0的7.1的6.0的,其中受7.0的是Birt2.3.0,而7.1的是birt2.3.1,虽然只差一个小版本号,但是如果 用,6.0直接或7.0直接打开项目会出错,我用的方法是直接从myEclipse中把birt2.3.1的库拷出来做成用户库,这样7.0就可以打开 7.1的报表项目而且不出错了,另外,在设计器方面6.0的好像是打不开7.0和7.1和报表,birt的版本差异是很烦人的。
另外在使用我遇到过以下错误
在tomcat启动时出现如下异常
java.lang.NoSuchMethodError: org.mozilla.javascript.Context.initStandardObjects()Lorg/mozilla/javascript/ScriptableObject;
后来发现原来是Birt的库里的js.jar同我shark库里的js.jar冲突,应该是shark里的js.jar版本比较旧,后把shark库中的js.jar包去掉并重新布属项目后,问题解决.
暂时就说这么多,关于如何在Birt中得到spring的session Bean和Session有时间我会补上来的。