1

私は 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();

ご協力ありがとうございます

4

1 に答える 1