是否可以在放置在详细信息带中的框架中连接子报表?目标是在模板的详细信息部分中显示这些子报表和先前定义的元素。
如果我在从模板加载的详细报告中使用dynamicReportBuilder.setTemplateFile(TEMPLATE);
和dynamicReportBuilder.addConcatenatedReport(subreport);
插入子报告,则报告模板的详细信息集中先前定义的元素将消失。所以我正在寻找保存这些元素的方法。
是否可以在放置在详细信息带中的框架中连接子报表?目标是在模板的详细信息部分中显示这些子报表和先前定义的元素。
如果我在从模板加载的详细报告中使用dynamicReportBuilder.setTemplateFile(TEMPLATE);
和dynamicReportBuilder.addConcatenatedReport(subreport);
插入子报告,则报告模板的详细信息集中先前定义的元素将消失。所以我正在寻找保存这些元素的方法。
根据您的评论,似乎正在发生两件事之一。
Detail
1) 您在模板文件的区域中定义了子报告。
在这种情况下,它将不起作用。模板文件中的Detail
带区应该是空的。如果是这种情况,则很可能只是忽略您在那里拥有的一切并做其他所有事情。查看如何使用 custum jrxml 模板了解更多信息。
2)dynamicReportBuilder.addConcatenatedReport(subreport);
不做你认为它做的事。
此方法将第二个报告附加到第一个报告的末尾。把它想象成一个批次。JASPER_PRINT_LIST
这与直接使用 Jasper Reports API 时为导出参数设置值相同。查看如何添加串联报告以获取更多信息。
从目前我能找到的情况来看,您似乎只能将子报告添加到组页眉和组页脚。因此,在您的情况下,您可能需要添加一个组以首先使用GroupBuilder
. 然后您可以将子报表添加到组页脚。组的诀窍是通过选择适当的字段进行分组,以确保每一行最终成为自己的组。
您可以查看如何在组页眉和页脚中添加标签中的代码示例,以了解如何构建组。
要查看如何将子报表添加到报表中,您可以使用DynamicReportBuilder.addSubreportInGroupFooter()
方法。有关这部分的更多详细信息和示例,请查看如何添加子报表(快速方式)。
您可以选择的另一个选项是不对这个特定报告使用动态 Jasper,而只需使用 jrxml 文件和 Jasper 报告的 API 自己来完成。根据您的设置,它可能会也可能不会更容易。
里卡多·马里亚卡。此代码是解决方案,感谢 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;
}
}