2

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

如果我在从模板加载的详细报告中使用dynamicReportBuilder.setTemplateFile(TEMPLATE);dynamicReportBuilder.addConcatenatedReport(subreport);插入子报告,则报告模板的详细信息集中先前定义的元素将消失。所以我正在寻找保存这些元素的方法。

4

2 回答 2

1

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

Detail1) 您在模板文件的区域中定义了子报告。

在这种情况下,它将不起作用。模板文件中的Detail带区应该是空的。如果是这种情况,则很可能只是忽略您在那里拥有的一切并做其他所有事情。查看如何使用 custum jrxml 模板了解更多信息。

2)dynamicReportBuilder.addConcatenatedReport(subreport);不做你认为它做的事。

此方法将第二个报告附加到第一个报告的末尾。把它想象成一个批次。JASPER_PRINT_LIST这与直接使用 Jasper Reports API 时为导出参数设置值相同。查看如何添加串联报告以获取更多信息。


Dynamic Jasper 是一个很棒的库,但实际上只设计用于标准表格报告。它支持一些高级功能,包括子报告,但它可能会受到限制。

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

您可以查看如何在组页眉和页脚中添加标签中的代码示例,以了解如何构建组。

要查看如何将子报表添加到报表中,您可以使用DynamicReportBuilder.addSubreportInGroupFooter()方法。有关这部分的更多详细信息和示例,请查看如何添加子报表(快速方式)

您可以选择的另一个选项是不对这个特定报告使用动态 Jasper,而只需使用 jrxml 文件和 Jasper 报告的 API 自己来完成。根据您的设置,它可能会也可能不会更容易。

于 2012-06-27T13:24:24.977 回答
0

里卡多·马里亚卡。此代码是解决方案,感谢 Ricardo 和 Dynamic Report

    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;
}

}

于 2012-06-28T22:13:46.920 回答