Buscar
Social
Ofertas laborales ES

Foro sobre Java EE > JasperReport. Error en subreport con imagen.

Buenos dias.
Estoy desarrollando un motor de informes con JasperReport 6. Todo va correctamente salvo los subreportes con imágenes. Lo que hago es crear un subreporte correspondiente a la cabecera de los documentos ya que esta es común a todos ellos. El caso es que cuando esta cabecera tiene una imagen con el logo, el reporte sale sin esta cabecera.
Los reportes están en un repositorio en el file system y son compilados por mi motor.
Las rutas a los subrepor e imágenes se componen con parámetros que son pasados y que funciona correctamente. Si la imagen está en el reporte principal esta se inserta correctamente y los reportes salen correctamente salvo cuando estos últimos tienen una imagen que como digo no aparecen.

Alguna idea de que puede estar pasando?
La linea donde se inserta la imagen en el subreporte es:


<parameter name="IMAGEN_DIR" class="java.lang.String"/>
......

<reportElement x="25" y="6" width="61" height="61" uuid="e6cb597a-eb5e-4fc8-92c2-1b6e1e6e4f71"/>
<![CDATA[$P{IMAGEN_DIR} + "escudo.png"]]>


Para compilar tanto el reporte como los subreportes lo que se hace es:

JasperDesign jasperDesign = JRXmlLoader.load(sListado);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);

JRSaver.saveObject(jasperReport, UtilReport.getNombreSinExtension(sListado) + ".jasper");

log.info("Saving reportes compilados es: " + UtilReport.getNombreSinExtension(sListado) + ".jasper");
JRElementsVisitor.visitReport(jasperReport, new ListadoVisitor());

La clase ListadoVisitor es un inspector que se encarga de compilar los subreportes y el código es (pongo solo el método que interesa):

@Override
public void visitSubreport(JRSubreport subreport){
try {
String sNewSubReporte = UtilReport.RPT_REPOSITORIO
+ UtilReport.RPT_REPORTES_PATH
+ UtilReport.RPT_CABECERAS
+ UtilReport.getNombreSinExtension(extractFilename(subreport))
+ ".jasper";

log.debug("Se debe compilar ::: " + sNewSubReporte);

String jasperFile = JasperCompileManager.compileReportToFile(UtilReport.getNombreSinExtension(sNewSubReporte) + ".jrxml");

if (new File(jasperFile).exists()){
log.info("El reporte ha sido generado con exito. " + jasperFile);
} else {
throw new RuntimeException("Error al generar " + jasperFile);
}

} catch (Throwable e) {
log.info("Error al compilar la cabecera ::: " + e);
}
}

Los parámetros una vez ha sido todo compilado se pasan de la siguiente manera:

ListadoFillExporter exporter = new ListadoFillExporter();
exporter.fillReportAndReturn(jasperReport, params, output, formato);

params es un Map<String, Object> donde se le pasa "IMAGEN_DIR" y la ruta absoluta de las imagenes.


Gracias por adelantado y espero que me podais ayudar.
Un saludo

mayo 29, 2015 | Unregistered Commenterfileal_v

¿Como asocias el subreport al report principal?, puede que ahí esté el fallo, puede que no lo tengas asociado y nunca está saliendo.

junio 3, 2015 | Registered Commenterantuansoft

Buenas tardes antuansoft.
Antes de nada gracias por contestar. El subreporte está bien asociado, me cercioré quitardo la imagen y poniendo un texto fijo. En ese momento ya se incluye el subreporte.
Lo que estoy viendo es que parece un problema del diseño del subreport, este cuando tiene una imagen debe estar esta contenida en algún componente específico, tipo "FRAME" con atributos específicos.
Estoy investigando por este lado porque creo que es el Quiz de la cuestión.

Cuando lo tenga resuelto (si no me ayuda alguien antes) comentaré aquí como lo hice.

Un saludo

junio 3, 2015 | Unregistered Commenterfileal_v

Por lo que comentas, la URL o dirección de la imagen a mostrar la pasas como parámetro al report. Lo primero que tienes que hacer es que te funciona el subreport, como report o sea el sólo y una vez hayas conseguido eso meterlo en el subreport y pelearte para pasar ese parámetro al subreport ahi está la clave.

Yo he hecho muchos subreport y mis mayores poblemas estaban en el paso de parámetros (en mi caso datasources, no imágenes), pero el primer paso es que te funcione el report aislado y después dentro del report padre.

Nos vas contando la evolución.

Un saludo.

junio 5, 2015 | Registered Commenterantuansoft

Buenas.
Pues ya está resuelto. Era un problema de definición del subreport, lo que trato como una cabecera. Hay un parámetro en cuestión es:

whenNoDataType="AllSectionsNoDetail"

Seleccionando esta opción el reporte aparece. No me preguntéis el motivo, pero poniendo esta propiedad de este modo funciona.
Las opciones que indicas antuansoft ya las probé y funcionaba todo correctamente así que el problema tenia claro que era de algún tipo de propiedad o algo por el estilo.

Un saludo y gracias antuansoft

junio 11, 2015 | Unregistered Commenterfileal_v

Me alegro que todo ok

junio 12, 2015 | Registered Commenterantuansoft