【问题标题】:dynamicjasper addConcatenatedReport in a frame动态jasper addConcatenatedReport 在一个框架中
【发布时间】:2012-06-26 09:29:43
【问题描述】:

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

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

【问题讨论】:

  • 在您的问题中不清楚您要做什么。您能否解释更多,或者创建添加图片来尝试解释您正在尝试做什么?
  • 如果我使用dynamicReportBuilder.setTemplateFile(TEMPLATE);dynamicReportBuilder.addConcatenatedReport(subreport); 在从模板加载的详细报告中插入子报告,则报告模板的详细信息集中先前定义的元素将消失。所以我正在寻找保存这些元素的方法。

标签: jasper-reports subreport dynamic-jasper


【解决方案1】:

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

1) 您在模板文件的Detail 带中定义了子报告。

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

2) dynamicReportBuilder.addConcatenatedReport(subreport); 没有做你认为的事情。

此方法将第二个报告附加到第一个报告的末尾。把它想象成一个批次。这与直接使用 Jasper Reports API 时将 JASPER_PRINT_LIST 的值设置为导出参数相同。查看HOW-TO Add Concatenated Reports了解更多信息。


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

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

您可以查看HOW-TO Add labels in group header and footer 中的代码示例以了解如何构建组。

要查看如何将子报告添加到报告中,您可以使用DynamicReportBuilder.addSubreportInGroupFooter() 方法。有关这部分的更多详细信息和示例,请查看HOW-TO Add Subreports (fast way)

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

【讨论】:

  • 谢谢@jschoen。您的 cmets 非常有用。我正在寻找一种使用 Dynamic Reports 2.5.1 的新方法。当我有解决方案时,我会在这里发布。
  • 问题是这样的:我只需要在第一页的底部打印一个文本,我尝试了很多代码都没有成功,因为在下面的页面中打印了一个烦人的空白。
  • 哈维尔,您需要在问题中发布一些代码或其他内容,以明确您正在尝试做什么。也许是一个小的运行示例,它显示了问题。我想帮忙,但没有代码我不能。
【解决方案2】:

里卡多·马里亚卡。这段代码就是解决方案,感谢 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;
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    相关资源
    最近更新 更多