1 回答
TA贡献1805条经验 获得超9个赞
不要对两个报表使用相同的数据源对象。数据源被第一个报告消耗,并且不会为第二个报告留下任何记录。
您应该做的是为每个报告创建数据源实例。对参数映射执行相同的操作是一个好主意,因为填充过程会将内置参数填充到映射中,并且存在第一个报告设置的参数最终用于第二个报告的风险。
所以代码看起来像这样:
public static InputStream generatePdfByteArrayFromJasper(List<InputStream> reportStreams, Collection dataSource, HashMap<String, Object> parameters)
throws JRException {
List<JasperPrint> jasperPrints = new ArrayList<>();
for (InputStream is : reportStreams) {
JRDataSource datasource = new JRBeanCollectionDataSource(dataSource, true);
HashMap<String, Object> reportParameters = new HashMap<>(parameters);
JasperPrint jasperPrint = JasperFillManager.fillReport(is, reportParameters, datasource);
jasperPrints.add(jasperPrint);
}
添加回答
举报