Tengo una aplicación web y el cliente ha solicitado ver algunos informes. El enfoque ha sido utilizar iReport y mostrarles el informe en pantalla.Uso de JasperReports con una ruta relativa
I have already asked something like this. Pero hoy he descubierto que las rutas a los archivos de informe (jrxml) son absolutas. Entonces tengo que cambiar el programa para que acepte rutas relativas. He intentado hacer esto, pero parece que ni el jrxml ni los archivos compilados (.jasper) aceptan rutas relativas para no compilar ni para llenar el informe.
Esto es lo que he llegado hasta aquí:
//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();
}
Esto parece funcionar con rutas absolutas, pero me lanza:
Exception Message
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException
cuando se cambia a una ruta relativa. He buscado en la red sin éxito en cómo cambiar a mis ajustes.
Tengo el javaDoc para la API jasper, pero prefiero no leerlo si puedo evitarlo.
Parece que he olvidado agregar la declaración de pars, es solo un nuevo HasMap() (ya que el informe que intento no tiene variables). Perdón por el error! – Random