Problema al usar Certificado analitico con imagen cargada de personas_foto

Buenos dias. Estoy teniendo un problema que quizas sea simple de rsolver, pero no lofro encontrar la solución.
En el Certificado Analítico que viene por defecto en la versión 3.21.2 o en cualquier otra versión 3.x, no logro hacerlo funcionar, ya que al intentar generar el pdf, el jasper me da un error con respecto al campo imagen de la tabla mdp_personas_foto que se intenta recuperar en el query del jrxml.
Esto me pasa, no solo con el ireport, sino también en las instalaciones de guarani, si no personalizo el certificado analítico (quitando la foto del suplemento al título) y uso el que viene por defecto en Guarani
Comento que he intentado con fotos jpg o png subidas en el campo bytea de postgresql, intenté con versiones diferentes de jar de postgresql, pero hasta el momento no he logrado que funcione.

En la operación Administrar personas, como en el visor de dbveaver, puedo visualizar correctamente las fotos.

Dejo a continuación el error por si a alguien le ha pasado algo similar:
Error filling print… Error evaluating expression : Source text : net.sf.jasperreports.engine.util.JRImageLoader.loadImage ((byte ) $F{imagen})
net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression : Source text : net.sf.jasperreports.engine.util.JRImageLoader.loadImage ((byte ) $F{imagen}) at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:263) at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:611) at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:579) at net.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(JRFillElement.java:1016) at net.sf.jasperreports.engine.fill.JRFillImage.evaluateImage(JRFillImage.java:492) at net.sf.jasperreports.engine.fill.JRFillImage.evaluate(JRFillImage.java:472) at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:259) at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:456) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2067) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:788) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:298) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:152) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:963) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:873) at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:87) at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:287) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:760) at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:891) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997) Caused by: net.sf.jasperreports.engine.JRException: Image read failed. at net.sf.jasperreports.engine.util.JRJdk14ImageReader.readImage(JRJdk14ImageReader.java:73) at net.sf.jasperreports.engine.util.JRImageLoader.loadAwtImageFromBytes(JRImageLoader.java:167) at net.sf.jasperreports.engine.util.JRImageLoader.loadImage(JRImageLoader.java:185) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:43) at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.call(StaticMetaMethodSite.java:88) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) at guarani_1732464742005_436103.evaluate(calculator_guarani_1732464742005_436103:353) at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:250) … 19 more
Print not filled. Try to use an EmptyDataSource…

Muchas gracias!!!

Pablo

Hola Pablo, buen día!
Le hago una consulta, se refieren al certificado analítico en sí o al suplemento al título?
El suplemento ya viene preparado para aceptar la incrustación de la foto, pero el analítico no, eso lo tendrían que personalizar, y podrían seguir como ejemplo la estructura del suplemento para ello.

Saludos!

Buen día, Ariana. Muchas gracias por la respuesta!!!
Lo que da error es cuando intento dejar el Certificado Analítico que viene por defecto con las versiones de SIU Guarani, y que incrustan el suplemento en el mismo con la foto.
Pareciera ser que estuviera faltando alguna parametrización, configuración o instalación de alguna librería para que bel jasper no diera error al querer cargar la imagen dentro de la plantilla del suplemento.
Esto pasa, ya sea en una implementación de guarani, yendo por la generación del analítico desde las operaciones de egreso, así como si quiero probar el analítico completo con el suplemento desde el ireport.
Esto surge con la necesidad de incorporar el suplemento, y al probar el caf y suplemento original del siu, jos dimos cuenta que ya fallaba en nuestras implementaciones por la imagen.

Muchas gracias nuevamente.
Saludos!!!

Pablo

Hola Pablo, buen día!
Probamos el caso y no detectamos error.
Le hago una consulta, hicieron alguna personalización en el sistema? También les pedimos si pueden enviar los logs.

Saludos!

Buen día, Ariana. Disculpas por la demora en responder. El problema que teníamos es que nunca logramos que funcione el suplemento con la foto que viene desde la BD tal como viene la plantilla original.
O sea, en el objeto imagen del jasper, la expresión net.sf.jasperreports.engine.util.JRImageLoader.loadImage ((byte ) $F{imagen}) daba error.
Parece ser que es por el tipo de dato en la base de datos, de la foto de la persona, que es de tipo bytea.
Logramos resolverlo para que el select de la imagn en el query, en lugar de traer el tipo de dato bytea, lo traiga con otro formato de la siguiente manera:

encode(imagen,‘base64’) as imagen

Luego, en el objeto de la imagen, la propiedad expresiion class la cambiamos a java.io.InputStream
Y en la propiedad Image expression, le colocamos la siguiente expresion:
net.sf.jasperreports.engine.util.JRImageLoader.getInstance(new SimpleJasperReportsContext()).loadAwtImageFromBytes(javax.xml.bind.DatatypeConverter.parseBase64Binary($F{imagen}))

Con estos cambios, logramos poder mostrar la imagen de la foto del alumno en el CAF.
Estamos trabajando este tema, no por la foto en si, sino para mostrar las firmas escaneadas de las autoridades en los CAF, y estamos analizando la manera de que las firmas, ya que son pocas, vengan cargadas de la BD.

Por nuestra parte, el tema queda resuelto.

Solo dejo la explicación, por si alguien más también ha tenido problemas con la carga de imágenes desde la BD para las plantillas jasper.

Saludos y que sigas muy bien!!!

Pablo