使用Jasper,我可以使用资源来加载报告。因此,要加载主报告,我使用类似以下内容的内容:

InputStream is = getClass().getResourceAsStream("/resources/report1.jrxml");
design = JRXmlLoader.load(is);

但是,如果report1.jrxml中有一个子报表,怎么说在/resources/sub.jrxml中呢?

最佳答案

我这样做是这样的:

jasperDesign = JRXmlLoader.load(rootpath + "/WEB-INF/templates/Report.jrxml");
jasperDesignSR = JRXmlLoader.load(rootpath + "/WEB-INF/templates/SubReport.jrxml");


JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
JasperReport jasperReportSR = JasperCompileManager.compileReport(jasperDesignSR);

parameters.put("SubReportParam", jasperReportSR);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);

“SubReportParam”将是“JasperReport”类型的参数,作为您报表中的SubreportExpression。

在.jrxml中:
<parameter name="SubReportParam" class="net.sf.jasperreports.engine.JasperReport" isForPrompting="false"/>

我不知道您是否在报表设计中使用IReport。
右键单击子报表,您应该找到SubreportExpression。
参数是我传递给“fillReport”的 map

祝你好运。

10-07 20:34