首页 > 编程知识 正文

jasperreports入门,Jasperreport

时间:2023-05-04 19:03:30 阅读:253337 作者:1755

用Jasperreport以JavaBean为数据源输出html报表工具:

Jasperreports.jar  在java程序中输出报表的api

ireport-3.7.0  制作报表模板的软件

步骤:

1 准备JavaBean 表示需要展示的字段,假设bean中的字段为name和age,将bean填值装入一个list1中

Test test1 = new Test();Test test2 = new Test();Test test3 = new Test();list1.add(test1);list1.add(test2);list1.add(test3);

再准备若干map 装入若干字段 one two three 再装入list2中

map1.put("one","I'm");map2.put("two","so");map3.put("three","pretty");list2.add(map1);list2.add(map2);list2.add(map3);

list1和list2都将作为数据源输出到html报表中

2 新建一个空白的report文件 hello.jrxml,并创建与map相应的参数Parameters和与javabean相应的字段Field

3 创建与Parameters和Field对应的组件

注意:Parameters的组件P{"one"},P{"two"},P{"three"}放在title brand中,Field的组件F{"name"},F{"age"}作为table内容,放在Detail brand中,table的列头放在column brand中(用static text组件输入文字)。Field与Parameters的区别本人还没研究过,目前知道的用法区别在于:Parameters用于唯一的参数展示,也就是map中的键值对;Field用于表格内容的展示,即用于展示多列数据,也就是list中的一个个javabean。

4 hello.jrxml编译成hello.jasper,即得到我们程序中需要的文件。

5 简而言之,我们需要一个list1<bean>,一个list2<map>和一个hello.jasper

6 调用

List<JasperPrint> jaspers = new ArrayList<>();for (int i = 0; i < list2.size(); ++i) {//每个map都要调一次 JasperPrint jasperPrint = JasperFillManager.fillReport(new File(hello.jasper), list2.get(i), new JRBeanCollectionDataSource(list1)); jaspers.add(jasperPrint); }JRHtmlExporter exporter = new JRHtmlExporter();//一堆可选参数待你探索exporter.setParameter(JRHtmlExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.TRUE);exporter.setParameter(JRHtmlExporterParameter.JASPER_PRINT_LIST, jaspers);exporter.setParameter(JRHtmlExporterParameter.OUTPUT_WRITER, out);exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, 刻苦的煎蛋);exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "<br/>");exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);exporter.setParameter(JRHtmlExporterParameter.SIZE_UNIT, "pt");exporter.exportReport();//输出HTML
踩坑指南

1  低版本的ireport无法转换jasper文件成jrxml文件

2  低版本的ireport可以打开高版本的jrxml文件,但是可能会有uuid报错,因为高版本(4.6之后)的ireport创建jrxml文件时会加入uuid属性(可查看),需要去掉所有的uuid属性,低版本ireport才能兼容高版本jrxml文件。

3  ClassDefFound/ClassNotFound....groove....CompilerException报错,在jrxml文件中(其实就是xml)的第一行,会有一个属性:language=“groove”,这是默认行为,在java程序中调用时需要改成language=“java”或者直接去掉该属性,这个报错可以联系java的编译与运行想想看,大致思路就是jrxml文件的编译环境(ireport)与运行环境(java程序)不符,java程序在运行时无法找到jrxml文件编译时的类。总之language属性是关键。

4 有时候改了language属性重新编译之后依然报错,可以回到界面稍微移动一下组件...然后再编译即可,可以理解为反应慢半拍...


可能要待续...

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。