如何用spring boot创建多个主报表?

时间:2016-06-10 03:53:53

标签: java spring spring-boot jasper-reports

我正在使用JasperReportsPdfView在我的Spring Boot项目中生成报告。 目前我有1个主报告,主报告有很多子报告

所以,主报告 - >分报告1,分报告2等......

EntityA DetailDetails2

现在我使用JRDataSource将数据源传递给每个子报告,如...

EntityA entityA = findById(1);
JasperReportsPdfView view = new JasperReportsPdfView();
view.setUrl("classpath:report/main_report.jrxml");
view.setApplicationContext(appContext);

List<Detail> details = entityA.getDetails();
List<Detail2> details2 = entityA.getDetails2();
JRDataSource subReportDetail1Source = new JRBeanCollectionDataSource(details);
JRDataSource subReportDetail2Source = new JRBeanCollectionDataSource(details2);
final Map<String, Object> params = new HashMap<>();
params.put("subReportData2", subReportDetail1Source);
params.put("subReportData3", subReportDetail2Source);

return new ModelAndView(view, params);

现在我想为每个EntityA创建许多主报告,因此我会列出EntityA列表

List<EntityA> listOfEntityA = findAll();

如何为listOfEntityA中的每个EntityA重复创建主报告?

我想让我当前的MainReport成为另一个MainReport的子报告,但我不知道如何传递每个detail1和detail2的数据源

1 个答案:

答案 0 :(得分:1)

在这种情况下,你不应该传递subReportData2subReportData3作为参数,将它们定义为jrxml中的字段。

您的主数据源将是

new JRBeanCollectionDataSource(istOfEntityA);

在你的jrxml中定义为字段DetailDetail2列表,因此EntityA上的getter

<field name="details" class="java.util.List"/>
<field name="details2" class="java.util.List"/>

然后将子报告添加到详细信息区域并将数据源表达式设置为:

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{details})
  

这样,报告将迭代 EntityA 列表中的详情带,   并使用详细信息列表和详细信息2 调用子报表    EntityA 类作为数据源