[英]Subreports in Jasper Reports
我有兩個表要打印在同一頁上。 這些表的數據將從自定義數據源的映射中提供。 我需要實現它。 我用谷歌搜索執行此任務。
當時我遇到了子報表的概念,但是我沒有獲得有關如何實現子報表的大量信息。
我對如何創建子報表有一個想法。 但是我不知道如何用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);
在這里,我分別編譯了subreport1
和subreport2
,並將它們添加為map中的參數。 然后在通過masterreports填充它時出現錯誤。 請幫助我編寫報告。
堆棧跟蹤的編譯器錯誤:
net.sf.jasperreports.engine.JRRuntimeException線程“主”中的異常:net.sf.jasperreports.engine.fill處net.sf.jasperreports.engine.fill.JRFillSubreport.initSubreportFiller(未知源)處的打印順序為未知。 net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateSubreport(未知源)位於net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(未知源)位於net.sf.jasperreports處。 net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(未知源)的net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(未知源)的engine.fill.JRFillBand.evaluate(未知源)。 net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(未知源)的sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(未知源)net.sf.jasperreports.engine.fill.JRBaseFiller.fill(未知源) )net.sf.jasperreports.eng上的(JRBaseFiller.fill) ine.fill.JRFiller.fillReport(未知源)位於net.sf.jasperreports.engine.JasperFillManager.fillReport(未知源)位於net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(未知源)位於ReportTableCompiler.main(ReportTableCompiler。 Java的:53)
如果只有一個詳細信息區域,並且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,子報表屬性對話框,“子報表”選項卡中指定的,它與主報表數據源不同。
我不完全了解您要做什么,但是您也可以為子報表提供參數,因此它會基於主表中的當前行過濾其數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.