将子报告添加到JasperReport中的主报告中

时间:2013-02-15 18:55:51

标签: jasper-reports

我有一份报告,显示其应有的项目。 现在我需要在主要报告中添加3个子报告。

为此,我使用了iReports。

我的问题是,如何将项目列表传递给子报告??? 我找到了一些教程,但在这些情况下,子报告的数据是在第一批报告中。

在我的情况下,我有一个包含4个细节带的报告,其中3个带有子报告。

我的代码:

JRBeanCollectionDataSource beanCollection = new JRBeanCollectionDataSource(report.getList());
        jasperPrint = JasperFillManager.fillReport("C:\\Users\\Desktop\\Report.jasper", new HashMap(), beanCollection) ;
HttpServletResponse http = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
        http.addHeader("Content-disposition", "attachment; filename=report.pdf");
        ServletOutputStream stream = http.getOutputStream();
        JasperExportManager.exportReportToPdfStream(jasperPrint, stream);

我正在使用jsf 2.0。

ps:我看到我可以创建4个jasperPrint,并将每个页面添加到主报告中,但我想知道它是否可能是我想要的。

问候。

3 个答案:

答案 0 :(得分:0)

假设您的数据源具有以下结构

public class MyPOJO{
    private List<POJOSubData1> sub1;
    private List<POJOSubData2> sub2;
    private List<POJOSubData3> sub3;

    //getters & setters
    ... 
}

您可以通过为子报表的属性指定以下内容,将所需的数据源传递到子报表

Connection type : Use a datasource expression
Data Source Expression : $F{sub1} //or sub2 or sub3

Field Class的{​​{1}}应为sub1

此外,您不需要将isolate 1子报告放到1个细节带中,您可以将所有子报告放在一个细节带中。

答案 1 :(得分:0)

如果您使用Ireport创建报告,则在Ireport中打开主报告并选择子报告并转到报告的属性部分,单击“参数”属性并单击“从主文件复制”选项卡,从那里您可以选择要传递给太阳报告的参数。

答案 2 :(得分:0)

我最终做了什么:

for(JRPrintPage p : jasperPrint1.getPages()){

     jasperPrint.addPage(p);
}

其中jasperPrint是主报告,jasperPrint1是子报告(这是一个自己的报告)。通过这种方式,我可以将项目列表正常传递给所有报告。

 JRBeanCollectionDataSource beanCollection1 = new JRBeanCollectionDataSource(report.getSections().get(1).getRowsReports());
        JasperPrint jasperPrint1 = JasperFillManager.fillReport("C:\\Users\\Desktop\\Meeting.jasper", new HashMap(), beanCollection1) ;