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,你需要在你的问题中发布一些代码或其他东西,以明确你想做什么。也许是一个小的运行示例,说明了问题所在。我想帮忙,但是没有代码我不能。