Jasper reports dynamicjasper在帧中添加concatenatedreport

Jasper reports dynamicjasper在帧中添加concatenatedreport,jasper-reports,subreport,dynamic-jasper,Jasper Reports,Subreport,Dynamic Jasper,是否可以将子报表连接到放置在详细信息标注栏中的框架中?目标是从模板中显示这些子报表和详细信息部分中以前定义的元素 如果我使用dynamicReportBuilder.setTemplateFile(模板)和dynamicReportBuilder.addConcatenatedReport(子报表)要在从模板加载的详细信息报告中插入子报告,请使用报告模板dissapear的详细信息设置中先前定义的元素。因此,我正在寻找保存这些元素的方法。根据您的评论,似乎有两件事正在发生 1) 您在模板文件的详

是否可以将子报表连接到放置在详细信息标注栏中的框架中?目标是从模板中显示这些子报表和详细信息部分中以前定义的元素


如果我使用
dynamicReportBuilder.setTemplateFile(模板)
dynamicReportBuilder.addConcatenatedReport(子报表)
要在从模板加载的详细信息报告中插入子报告,请使用报告模板dissapear的详细信息设置中先前定义的元素。因此,我正在寻找保存这些元素的方法。

根据您的评论,似乎有两件事正在发生

1) 您在模板文件的
详细信息
栏中定义了子报告

在这种情况下,它将不起作用。模板文件中的
详细信息
波段应为空。如果是这样的话,很可能只是忽略你曾经拥有的一切,然后做其他的事情。有关更多信息,请查看

2)
dynamicReportBuilder.addConcatenatedReport(子报表)不做您认为它做的事情

此方法将第二个报表附加到第一个报表的末尾。把它看作是一个批次。这与直接使用JASPER Reports API时将
JASPER\u PRINT\u LIST
的值设置为导出参数是一样的。有关更多信息,请查看


DynamicJasper是一个很棒的库,但实际上它只设计用于处理标准的表格报表。它支持一些高级功能,包括子报表,但也有局限性

从我目前所能找到的情况来看,您似乎只能将子报告添加到组页眉和组页脚。因此,在您的情况下,您可能需要首先使用
GroupBuilder
添加一个要报告的组。然后可以将子报表添加到组页脚。该组的诀窍是通过选择适当的字段进行分组,确保每一行最终都是自己的组

您可以查看中的代码示例,了解如何构建组

要查看如何向报表中添加子报表,可以使用
DynamicReportBuilder.addSubReportingGroupFooter()
方法。有关此部分和示例的更多详细信息,请查看


另一种选择是不使用动态Jasper来处理这个特定的报告,而只使用jrxml文件和Jasper报告的API自己来完成。这可能更容易,也可能不容易,这取决于您的设置。

作者:里卡多·马里亚卡。这段代码就是解决方案,感谢Ricardo和DynamicReport

    private void build() {
    try {
        JasperPdfExporterBuilder pdfExporterBuilder = export
                .pdfExporter(PDF_FILE);
        JasperReportBuilder jasperReportBuilderMain = report()
                .columns(
                        col.column("Item", "item", type.stringType()),
                        col.column("Quantity", "quantity",
                                type.integerType()),
                        col.column("Unit price", "unitprice",
                                type.bigDecimalType()))
                .setDataSource(createSubreportDataSource())
                // .detail(cmp.subreport(createSubreport()))
                .setWhenNoDataType(WhenNoDataType.ALL_SECTIONS_NO_DETAIL);

        JasperReportBuilder jasperReportBuilderDisclaimer = report()
                .setPageFormat(PageType.A4, PageOrientation.LANDSCAPE)
                .summary(cmp.subreport(jasperReportBuilderMain))
                .summaryWithPageHeaderAndFooter()
                .setWhenNoDataType(WhenNoDataType.ALL_SECTIONS_NO_DETAIL)
                .columnHeader(
                        cmp.text("first page header").setFixedHeight(50))
                .columnFooter(
                        cmp.text(DISCLAIMER).setStretchWithOverflow(true)
                                .setFixedHeight(250))
                .pageHeader(
                        Templates
                                .createTitleComponent("Ricardo Mariaca Approach"))
                .pageFooter(Templates.footerComponent).show()
                .toPdf(pdfExporterBuilder);

    } catch (DRException e) {
        e.printStackTrace();
    }
}

private JRDataSource createSubreportDataSource() {
    DRDataSource dataSource = new DRDataSource("item", "quantity",
            "unitprice");
    for (int i = 0; i < 180; i++) {
        dataSource.add("Book", (int) (Math.random() * 10) + 1,
                new BigDecimal(Math.random() * 100 + 1));
    }
    return dataSource;
}
private void build(){
试一试{
JasperPdfExporterBuilder pdfExporterBuilder=导出
.pdfExporter(PDF_文件);
JasperReportBuilder jasperReportBuilderMain=报告()
.栏目(
col.column(“项”,“项”,type.stringType()),
列(“数量”、“数量”,
type.integerType()),
列(“单价”、“单价”,
type.bigDecimalType())
.setDataSource(createSubreportDataSource())
//.detail(cmp.subreport(createSubreport()))
.SetWhenNodeType(WhenNodeType.所有章节\u编号\u详情);
JasperReportBuilder jasperReportBuilderDisclaimer=报告()
.setPageFormat(PageType.A4,PageOrientation.横向)
.摘要(cmp.子报告(jasperReportBuilderMain))
.Summary with PageHeader和Footer()
.SetWhenNodeType(WhenNodeType.ALL\u Section\u NO\u详细信息)
.列标题(
cmp.text(“第一页页眉”).setFixedHeight(50))
.columnFooter(
cmp.text(免责声明).setStretchWithOverflow(true)
.设置固定高度(250))
.页眉(
模板
.createTitleComponent(“Ricardo Mariaca方法”))
.pageFooter(Templates.footerComponent).show()
.toPdf(PDFEExporterBuilder);
}捕获(D例外e){
e、 printStackTrace();
}
}
私有JRDataSource createSubreportDataSource(){
DRDataSource数据源=新的DRDataSource(“项目”、“数量”,
“单价”);
对于(int i=0;i<180;i++){
dataSource.add(“Book”,(int)(Math.random()*10)+1,
新的BigDecimal(Math.random()*100+1));
}
返回数据源;
}

}

你的问题不清楚你想做什么。你能解释更多或者创建一个图片来解释你想做什么吗?如果我使用
dynamicReportBuilder.setTemplateFile(模板)
dynamicReportBuilder.addConcatenatedReport(子报表)
若要在从模板加载的详细信息报告中插入子报告,则报告模板的详细信息设置中先前定义的元素将消失。所以我在寻找保护这些元素的方法。谢谢@jschoen。你的评论很有用。我正在寻找一种使用DynamicReports 2.5.1的新方法。当我有了解决方案,我会在这里发布。问题是:我只需要在第一页的底部打印文本,我尝试了很多代码都没有成功,因为在接下来的页面中打印了一个恼人的空白。Javier,你需要在你的问题中发布一些代码或其他东西,以明确你想做什么。也许是一个小的运行示例,说明了问题所在。我想帮忙,但是没有代码我不能。