imagenReporteEl algún desarrollo necesite construir un reporte  con IReport, para poder cargar de los clientes la foto y  la huella capturada en un sistema biométrico. Dichas imágenes se encontraban almacenadas desde java, en la base de datos como un array de bytes.

Investigando y consultando encontré que si se puede, y es colocar en las propiedades de la imagen, en el atributo “Image Expression” la siguiente línea: net.sf.jasperreports.engine.util.JRImageLoader.loadImage ((byte []) $F{Foto})

Como veremos a continuación:

1. Registro de la base de datos y su respectiva información:
registroBD

2. Datos almacenados en el campo Foto:
DatosBinariosimagenBD3. Consulta del reporte donde vemos los campos “Imagen,Foto”:consultaSQL

4. Diseño del reporte donde vemos los campos de la base de datos y los objetos de tipo imagen donde vamos a cargar.reporteDiseno

5. En los atributos de la imagen es donde se coloca la expresión : net.sf.jasperreports.engine.util.JRImageLoader.loadImage ((byte []) $F{Foto})expresionImagen

Y con todo lo anterior tenemos las imágenes cargadas de la base de datos en un archivo pdf generado desde IReport:imagenCargadaBD

Espero haya podido ser claro, cualquier duda o inquietud hacerla vía email. Más adelante agregare una entrada sobre la invocación del reporte desde un aplicativo en java.

23 Replies to “Cargar Imagen almacenada en Base de Datos con IReport de jaspersoft”

  1. Hola, y si estoy trabajando las expreciones con el lenguaje JavaScript, es posible hacer ese tipo de codigo?

  2. Saludos!
    Disculpa la demora en contestar. No te sabría decir, pero ten en cuenta que el jasper debe estar en el servidor y no en el cliente. Tocaría indagar en google si lo han realizado. Buen día.

  3. Buenas Tarde s me saca error me dice cannot cast image to string me pueds indicar que hafgo mal la foto la muestra pero la huella me saca ese error

  4. en el boton dentro de la aplicacion q metodo debe realizar para generar el reporte de la foto

  5. Hola amigo me puedes ayudar con ese error estoy en postgres 11 tipo de datos bytea
    Desde ya muchas gracias

    Compilation running time: 443!
     Filling report…
     Time zone: Default
    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.fillTitle(JRVerticalFiller.java:354)      at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:290)      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 report32name_1558543547949_625444.evaluate(report32name_1558543547949_625444:232)      at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:250)      … 18 more 
    Print not filled. Try to use an EmptyDataSource…

  6. Saludos Yeyu! Ya valido que el campo de la base de datos sea de tipo blob, osea que se pueda almacenar una imagen. Adicionalmente $F{imagen}, existe en el Query y el nombre es el mismo. (imagen en minuscula). Lo que me da a entender es que ese campo no esta en la consulta que se realiza hacia la base de datos. Espero que de algo te sirva esta explicación. Quedo pendiente.

  7. Hola buen dia, tengo un problema al momento de llamar el jasper desde java, al correr la vista previa del reporte funciona bien, pero al llamarlo desde java, me avienta este error
    error: Error evaluating expression for source text: net.sf.jasperreports.engine.util.JRImageLoader.loadImage ((byte[])$F{imagen})

    si pudieras ayudarme lo agradeceria mucho

  8. Excelente, funciona al 100 lo cargué en la versión 1.3.3 sabrás algún método para la versión 0.2.3.0 es la que tienen aquí y en esa no compila correctamente y no están dispuestos a subir de versión :(, de antemano gracias.

  9. Excelente que te funcionara. con respecto algun método para la cersion 0.2.3.0, no la tengo.. Que tengas buen día y disculpa contestar hasta ahora.

  10. Saludos!
    Disculpla que hasta ahora responda. La posibilidad de que no funcione desde java, puede ser que haga falta la libreria, en el aplicativo. Buen día.

  11. Buen dia, la libreria la tengo :c, en realidad el reporte funciona perfectamente cuando no le pongo la imagen, y desde java sin problema, el error solo aparece cuando pongo la imagen en el reporte

  12. Hola! buenas tardes.
    Tengo un problema al ejecutar un reporte hecho en iReport 4.8.0. El reporte contiene un subreporte que carga la imagen del logo de la compañía, pero al ejecutarse se consume demasiados recursos del CPU y se cae el aplicativo. Si quito del reporte principal el subreporte que carga el logo, se ejecuta perfectamente sin dar error.

    Agradezco su orientación al respecto.

    Saludos!

  13. Saludos Javier! Una consulta, haz tratado de quitar el logo de la compañia en el subreporte, para verificar si efectivamente es el logo, porque puede ser que sea la consulta del subreporte, cuantos registros en dicha subconsulta esta trayendo. Entonces primero haz lo de quitar el logo del subreporte, y si se sigue demorando, revisa la consulta del subreporte a ver si eso es lo que puede tener problemas. quedo atento

  14. Hola amigo Javier, buen día.

    Efectivamente si quito del reporte principal el subreporte que carga el logo, se ejecuta el reporte perfectamente. Ahora bien este subreporte se ejecuta bien en casi todos los demás reportes, solo falla con este en particular. El query del subreporte del logo, es bastante sencillo, solo es consulta en la BD, que retorna la ruta donde se encuentra la imagen del logo.

    Saludos cordiales!

  15. Saludos! Entonces muy raro. tocaría ver la diferencia con respecto a los demas reportes que de diferente tiene, o volverlo a hacer, colocandole poco a poco mas datos, hasta ver en que momento es que se bloquea o demora.. Empezar de cero con ese reporte y pocos datos e ir agrandandolo (colocandole mas cosas) poco a poco a ver que o cual componente es el que lo esta afectando. Quedo pendiente

  16. Gracias amigo, voy a ir probando como me indicas y te dejo saber los resultados.

    Saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *