贾斯珀报告中的子报告

我有两张桌子要在同一页面打印。 这些表的数据将从自定义数据源的地图中提供。 我需要实现它。 我用Google搜索实现此任务。

那时我遇到了子报告概念,但我没有得到很多关于如何实施子报告的信息。

我知道如何创建子报告。 但我不知道如何使用customdatasource填充子报告。 那是我的问题。 请帮助我实现这一目标。

注意:我尝试实现子报表,但是我收到了错误。 这是我用于编译子报表的代码:

JasperPrint print = new JasperPrint(); JRPdfExporter exporter = new JRPdfExporter(); JasperDesign design, design1; JasperReport report, report1; JasperReport jasperReport; JasperDesign jd1; jd1 = JRXmlLoader.load("D:\\sub_report1.jrxml"); jasperReport = JasperCompileManager.compileReport(jd1); Map parameters = new HashMap(); parameters.put("ReportTitle", "Table Report"); parameters.put("DataFile", "TableSource.java"); parameters.put("Subreport_1", jasperReport); design = JRXmlLoader.load("D:\\sub_report2.jrxml"); report = JasperCompileManager.compileReport(design); parameters.put("Subreport_2", report); design1 = JRXmlLoader.load("D:\\master_report.jrxml"); report1 = JasperCompileManager.compileReport(design1); JasperFillManager.fillReportToFile(report1, "D:\\master_report.jrprint", parameters, new TableDataSource()); exporter.setParameter(JRExporterParameter.JASPER_PRINT, print); exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "D:K\\Report.pdf"); exporter.exportReport(); JasperViewer.viewReport(print); 

这里我分别编译了subreport1subreport2 ,并将它们作为参数添加到map中。 然后我通过masterreports填充它时出错。 请帮我编译报告。

堆栈跟踪编译器错误:

线程“main”中的exceptionnet.sf.jasperreports.engine.JRRuntimeException:未知的打印订单0.在net.sf.jasperreports.engine.fill的net.sf.jasperreports.engine.fill.JRFillSubreport.initSubreportFiller(未知来源)中。位于net.sf.jasperreports上的net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(未知来源)的netFf上的netFilSubreport.evaluateSubreport(未知来源)位于net.sf.jasperreports的net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(未知来源)。 net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(未知来源)的net.fill.JRFillBand.evaluate(未知来源)net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(未知来源)net。 net.sf.jasperreports.engine.fill.JRBaseFiller.fill(未知来源)net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(未知来源)的sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(未知来源) )net.sf.jas上的net.sf.jasperreports.engine.fill.JRBaseFiller.fill(未知来源)net.sf.jasperreports.eng 报告表中的net.sf.jasperreports.engine.JasperFillManager.fillReport(未知来源)位于ReportTableCompiler.main(ReportTableCompiler。)的net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(未知来源)中的ine.fill.JRFiller.fillReport(未知来源)。 Java的:53)

我发布了类似问题的答案。 你可以在这里查看答案。

将iReport与eclipse一起使用可以生成报告

如果您只有一个详细信息区域,并且subreportExpression类似于“SUBREPORT_1.jasper”,则可以使用它来编译多个子报告

  JRDesignBand jrBand = (JRDesignBand) jasperDesign.getDetailSection().getBands()[0]; JRElement[] jrElements = jrBand.getElements(); for (JRElement jrElement : jrElements) { if (jrElement instanceof JRDesignSubreport) { JRDesignSubreport subReportDesign = (JRDesignSubreport) jrElement; JRExpression jrExpression = subReportDesign.getExpression(); String file = jrExpression.getText(); file = file.substring(1, file.length()-8)+".jrxml"; JasperCompileManager.compileReport(file); } } 

子报告就像任何其他正常报告一样。 他们拥有自己的JRXML文件并使用自己的数据源。 您可以使用子报表工具单独或在主报表内调用子报表。 在这种情况下,数据源在主JRXML,子报表属性对话框,子报表选项卡中指定,它与主报表数据源不同。

我不完全理解您要做什么,但您也可以为子报表提供参数,因此它会根据主表中的当前行过滤其数据。