У меня есть веб-приложение, и клиент запросил несколько отчетов.Подход состоял в том, чтобы использовать iReport и показывать им отчет на экране.
Я уже спрашивал что-то подобное .Но сегодня я обнаружил, что пути к файлам отчетов (jrxml) являются абсолютными.Поэтому я должен изменить программу, чтобы она принимала относительные пути.Я пытался сделать это, но кажется, что ни файлы jrxml, ни скомпилированные (.jasper) не принимают относительные пути ни для компиляции, ни для заполнения отчета.
Это то, что я получил так далеко:
//path is generated as request.getContextPath() + "/jrxmlFiles/"
public void generateReport(HttpServletResponse res, ConexionAdmin con, String path) throws Exception{
ServletOutputStream out = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
JasperDesign jasperDesign = JRXmlLoader.load(path);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
byte[] bytes = JasperRunManager.runReportToPdf(jasperReport, pars, con.initConexion());
res.setContentType("application/pdf");
res.setContentLength(bytes.length);
out = res.getOutputStream();
out.write(bytes, 0, bytes.length);
res.setHeader("Cache-Control", "cache");
res.setHeader("Content-Disposition", "attachment; filename=report.pdf");
res.setHeader("Pragma", "cache");
res.setContentLength(bos.size());
out.write(bos.toByteArray());
out.flush();
bos.close();
out.close();
res.flushBuffer();
}
Кажется, что это работает с абсолютными путями, но выдает меня:
Exception Message
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException
при изменении на относительноедорожка.Я искал в сети безуспешно в том, как перейти к моим приступам.
У меня есть javaDoc для API-интерфейса jasper, но я бы не стал его читать, если смогу помочь.