私は jasperstudio 6.3.0 にかなり精通しており、問題なく Java から他のレポートを実行できます。うまくいきます。ただし、サブレポートを含むレポートを実行できません。here stackoverflow で解決策を見つけましたが、まだ機能させることができません。私のソリューションでは、ストレージ用にレポートをテーブルにロードし、データベースからサブレポートとメイン レポートを取得して、jrxml をコンパイルしています。そこまではすべて正常に動作します
net.sf.jasperreports.engine.JRException: リソースが見つかりません: subInvoiceSummary.jasper。runReport のエラー: リソースが見つかりません: subInvoiceSummary.jasper。net.sf.jasperreports.repo.RepositoryUtil.getResourceFromLocation(RepositoryUtil.java:153) で net.sf.jasperreports.repo.RepositoryUtil.getReport(RepositoryUtil.java:112) で net.sf.jasperreports.engine.fill.JRFillSubreport net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateReport(JFillSubreport.java:365) の .loadReport(JRFillSubreport.java:398) ) net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(JRFillSubreport.java:341) で net.sf.jasperreports.engine.fill.JFillElementContainer.evaluate(JRFillElementContainer.java:381) で net.sf.jasperreports で。 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();
ご協力ありがとうございます