记录使用iReport + JasperReport 交叉报表添加数据的流程:
在Java中使用JRDataSource填充Sub Dataset:
- 在iReport的报表模板的parameters中添加一个parameter,为其设定名字,并设定其Parameter Class为Object,设定其Default value expression字段的值为null,否则ireport会报空指针错误
- 创建一个sub dataset,为其设定一个名字,并在其fields中加入Crosstab所需要的各个字段,数据源选择empty datasource即可
- 在summary中创建一个crosstab,选择其dataset为第2步建立的sub dataset,并利用这个dataset的fields字段创立crosstab
- 右键点击Report Inspector栏中的crosstab,选择Crosstab data,在下面Dataset run中选择Sub dataset为刚才建立的sub dataset,在其Connection/Datasource exp中选择User datasource expression,在底下的expression栏中填入 :$P{第一步建立的Parameter的名字}
- 在java代码中,填充时首先建立一个Map<String,Object>的parameters map以便在fill时为parameters赋值,在这个parameters map中添加所有ireport中的手动创建的parameters,特别注意添加第一步时创建的parameter,key为其设定的名字,值为一个JRDataSource
- 填充报表时需要注意,如果没有其他detail数据时,需要填充一个JREmptyDataSource作为替代,例子如:JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters,new JREmptyDataSource());
- 利用生成的JasperPrint 利用JasperExportManager生成结果文件即可
iReport导出pdf的中文不显示问题:
在iReport中选定需要输入中文的字段,将其Pdf Font name修改成STSong-Light,并将其Pdf Encoding设定为UniGB-UCS2-H (Chinese Simplified) ,勾上Pdf Embedded,这样就可以了
如果还是不能生成中文,则将iTextAsian的jar包加入到iReport的选项的classPath下即可,同理,在使用JasperFillManager填充的时候也必须在环境中添加此jar包
|