最近几天一直在用jasperreports 做一个C/S项目的报表 免费嘛又有可视化的编辑器 爽!
http://sourceforge.net/projects/jasperreports/files/jasperreports/JasperReports%204.0.1/ 官方下载地址 除了要下jasperreports-4.0.1.jar 以外 最好还要下
jasperreports-4.0.1-project.zip 这里面有很多依赖jar包 比如生成excel pdf等等的
http://sourceforge.net/projects/ireport/ 官方开发工具 ireport下载地址
http://download.csdn.net/source/3083904 最少依赖jar包
首先声明下 最好不要用jasperreports 提供的netbeans的插件 开发出来的报表在模拟运行的时候没问题 但是在项目中会出很多无厘头的错误 比如
明明添加了所有该加的jar包 却抛出找不到类 class not found -> net.sf.jasperreports.engine.* 等等奇怪的异常
如果遇到这个异常可以手动指定
File f = new File("c:/jasperreports-4.0.1.jar");
JRProperties.setProperty(JRProperties.COMPILER_CLASSPATH, f.getAbsolutePath());
如果你用javabean 作为数据源的话 还会实际运行的时候还会抛出你的domain类找不到的奇怪一场,尽管已经把domain的类加到了classpath中,所以尽量用官方的开发工具Ireport开发.........否则容易各种悲剧......
闲言少叙....
首先介绍一下几种常用的数据源(datasource) -》
1.javabean模式 我个人最喜欢这个,感觉和hibernate配合起来很舒服..hibernate查询出来的domain或者List<domain>
都可以直接作为jasperreports 的数据源而直接生成预览或者各种格式的文件 用起来很灵活
2.hibernate connection/Spring loaded hibernate connection模式 该模式可以直接使用HQL获得数据源进而展示
3.JDBC connection/netbeans connection模式 利用传统的JDBC connection方式查询数据 使用SQL
其他的我也没怎么用过了......
下面演示一下用javabean作为数据源
首先打开ireport新建文件->选择好样式->新建数据源(点那个像小插头的东西)->new->选择javabean datasource->之后的那么随意至于是用collections或是array根据需要选择
下面有个factory class 这个选项其实可填可不填 其用途是通过一个工厂类的一个静态方法产生出若干数据源的数据
比如我需要的数据类型是Person 那么我可以写一个PersonFactory类,里面用一个静态方法返回一个Person集合对象或者数组对象供测试使用.而下面需要添的就是静态方法的名称
如果填写完成的话可以试一下 如果报错 找不到类的话....那就对了--因为我们没有把工厂类的类文件路径加到ireport的classpath中 所以一定找不到这个类的... 解决方法----->>>工具->选项->ireport->classpath->add Folder->选择你这个工厂类的class文件所在路径 注意不是源码而是编译后的class文件地址 勾上reloadable OK
添加之后 可以再去test一下刚才的javabean数据源 应该是没有问题的
->下一步右击根节点->edit query->java bean->填写class name 如果找不到类处理方法同↑ 在classpath中添加javabean类的路径 ->如果成功可以选择需要的属性 如果填写了factory的话还可以preview data看一下数据/没填也无所谓
->下一步 你所有需要的对象属性都已经在field中了 可以拖拽到detail中进行展示
这里有一点需要注意 如果你的bean中还包涵其他的对象属性而不是简单的string integer属性的话 需要edit expression
比如 Person类包涵了一个IdCard对象 而你需要得到IdCard的属性的话 可以拖拽出idcard 右击edit expression 在里面得到idcard需要的属性 (前提是有各种setter getter)
如果是用jdbc的方式设计好sql后调用的时候只要 jp = JasperFillManager.fillReport(jr, new HashMap(),connection);//参数 jdbc的 connection对象 就可以
jasperreports 可以很方便的生成各种类型的报表文件 excel pdf等等 只需要导入对应jar包即可
继续学习中~~~~~~~~~~
完成之后 可以在java中调出打印预览并且打印