我对 jasperstudio 6.3.0 非常熟悉,并且能够毫无问题地从 java 运行其他报告。效果很好。但是,我无法运行包含子报表的报表。我在这里 stackoverflow 上找到了解决方案,但仍然无法使其工作。在我的解决方案中,我将报表加载到表中进行存储,并从数据库中提取子报表和主报表并编译 jrxml。一切都很好,然后
net.sf.jasperreports.engine.JRException:在以下位置找不到资源:subInvoiceSummary.jasper。runReport 中的错误:找不到资源:subInvoiceSummary.jasper。在 net.sf.jasperreports.repo.RepositoryUtil.getReport(RepositoryUtil.java:112) 在 net.sf.jasperreports.engine.fill.JRFillSubreport 在 net.sf.jasperreports.repo.RepositoryUtil.getResourceFromLocation(RepositoryUtil.java:153) .loadReport(JRFillSubreport.java:398) 在 net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateReport(JRFillSubreport.java:365) 在 net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateSubreport(JRFillSubreport.java:427) ) 在 net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:381) 在 net.sf.jasperreports 的 net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(JRFillSubreport.java:341)。 engine.fill.JRFillBand。
我尝试了很多排列但无济于事。我还尝试提取 jasperreports 的代码来跟踪上面显示的堆栈,但是有太多 .jar 依赖项和依赖项版本,我无法在 2 天后将它编译干净(如果有人有指向一个简单的方法来使这项工作,请让我知道)。这是代码片段:
Map<String, Object> rptParms = new HashMap<String, Object>();
List<daRecOnDemandSubReport> subReports = report.getOnDemandSubReport();
Iterator<daRecOnDemandSubReport> subReportList = subReports.iterator();
while (subReportList.hasNext()) {
daRecOnDemandSubReport subReport = subReportList.next();
ByteArrayInputStream x = getSubReportDataStream(dbConnROIPro, report.getODReportID());
JasperReport compiledSubReport = JasperCompileManager.compileReport(x);
String fileName = subReport.getODSubReportFileName().replace(".jrxml", ".jasper");
rptParms.put(fileName, compiledSubReport);
}
ByteArrayInputStream x = getReportDataStream(dbConnROIPro, report.getODReportID());
JasperReport cRpt = JasperCompileManager.compileReport(x);
rptParms = getReportParameters(dbConnGTrack,report.getODReportID(), rptParms, report.getOnDemandParm(), programID);
JasperPrint rpt = JasperFillManager.fillReport(cRpt,rptParms,dbConnGTrack.getDbConn());
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
JRXlsxExporter XLSXexporter = new JRXlsxExporter();
XLSXexporter.setExporterInput(new SimpleExporterInput(rpt));
XLSXexporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outStream));
XLSXexporter.exportReport();
提前感谢您的任何帮助