Victor Nuñez
2011-03-24
Buenas tardes comunidad, estoy generando un reporte con ireport (3.7.6) de los trabajadores de la empresa, en este reporte debe ir una foto, la cual esta guardada en un campo tipo binarydata (BD postgres 8.3) en la tabla ad_image, tengo una vista la cual hace referencia a los datos del trabajador y de la imagen, pero en el reporte no he podido asociarlo al tipo de datos que me permita ver la imagen, tambien he tratado de generar el reporte dentro de Adempiere a traves de formato de impresion y luego con informe y proceso, pero aca me da despliega una pantalla de error que dice "error de carga" y el log me indica:
13:51:41.361 ADialog.error: LoadError - null
13:52:23.301 AMenu.propertyChange: 1000157 - Carnet Invepal
13:52:23.307 ProcessDialog.<init>: Process=1000039; SOTrx=false
13:52:24.269 MRole.get: AD_Role_ID=1000004, AD_User_ID=100, reload=false
13:52:24.289 Trx.commit: **** POSave_4ba94646-72fc-421a-986a-410cb4b02617
13:52:24.306 ReportCtl.start: start - ProcessInfo
13:52:24.320 MQuery.get: AD_PInstance_ID=1004327, TableName=RV_Zresma_Carnet
13:52:24.322 ReportEngine.<init>: MPrintFormat,Items=6] - MQuery
13:52:24.324 DataEngine.getPrintDataInfo: RV_Zresma_Carnet - es_VE
13:52:25.012 DataEngine.loadPrintData: Rows=1 - ms=688
13:52:25.022 Viewer.<init>:
13:52:25.022 LayoutEngine.<init>: MPrintFormat,Items=6] - PrintData - MQuery
13:52:25.036 LayoutEngine.layoutTable: Carnet Invepal - RV_Zresma_Carnet
-------> MIssue.set_ValueNoCheck: ReleaseNo - Value too long - truncated to length=4
13:52:25.141 Trx.commit: **** POSave_a4ab5005-6715-4c73-9dbf-27f82a88676d
===========> Viewer.<init>:
java.lang.NullPointerException
at org.compiere.print.CPaper.toString(CPaper.java:371)
at org.compiere.print.Viewer.revalidate(Viewer.java:477)
at org.compiere.print.Viewer.dynInit(Viewer.java:409)
at org.compiere.print.Viewer.<init>(Viewer.java:167)
at org.compiere.print.Viewer.<init>(Viewer.java:141)
at org.compiere.print.SwingViewerProvider.openViewer(SwingViewerProvider.java:32)
at org.compiere.print.ReportCtl.preview(ReportCtl.java:437)
at org.compiere.print.ReportCtl.createOutput(ReportCtl.java:421)
at org.compiere.print.ReportCtl.startStandardReport(ReportCtl.java:208)
at org.compiere.print.ReportCtl.start(ReportCtl.java:151)
at org.compiere.print.ReportCtl.start(ReportCtl.java:98)
at org.compiere.apps.ProcessCtl.run(ProcessCtl.java:441)
Sigo intentando resolver el problema, pero si alguien tiene alguna idea se los agradacere
Saludos
Victor Nuñez
Carlos Ruiz
2011-03-25
Hola Víctor, qué versión de Adempiere estás usando?
Saludos,
Carlos Ruiz
Victor Nuñez
2011-03-28
Carlos, gracias nuevamente por tu preocupacion, te comento que la version de Adempire que estamos adecuando es las 360LTS, la version de ireport es la 3.7.6 y que ademas ya solucione el problema de la imagen, la solucion la documento a continuacion
1.- En ireport defini una imagen usando la paleta de ireport, le asocie cualquier imagen de mi computador
2.- Luego modifique image expresion por "new java.io.ByteArrayInputStream ($F{nombre_campo_imagen})"
3.- Luego modifique Expresion Class de la imagen por "java.io.InputStream"
y problema resuelto,
Nuevamente te agradezco la preocupación, esta respuesta es la primera ayuda que puedo entregar a la comunidad, espero les sirva a todos.
Saludos
Victor Nuñez
Carlos Ruiz
2011-03-28
Perfecto Víctor, que bueno que hayas resuelto tu problema - mi pregunta respecto a la versión es debido que hace unos 5 meses encontré y corregí un problema con el despliegue de imágenes de la base de datos en reportes Jasper en la versión 360.
Esto fue corregido con la revisión 5876 y está integrado en los patches que globalqss libera para la versión 360
http://kenai.com/projects/adempiere361/sources/adempiere361/revision/5876
Este problema lo encontré usando la clase MImage, quizás la forma diferente en que lo resolviste (utilizando ByteArrayInputStream) no te presente este problema.
Saludos,
Carlos Ruiz
Victor Nuñez
2011-08-16
Carlos, gracias por tus respuestas, cuando escribí la solución al problema que tuve los reportes estaban definidos para lenguaje groovy, pero como ahora queremos que que estos reportes funcionen también en el componente web de Adempiere tuvimos que cambiar los reportes a lenguaje java, y la solución cambia un poco con respecto a la origina y justamente vimos la solución mirando la corrección que me indicas, ahora seguimos usando ByteArrayInputStream, pero le agregamos un cast del campo bytea a byte
en resumen la solucion fue definir :
Image Expression: new java.io.ByteArrayInputStream ((byte)$F{binarydata})
Expression Class: java.io.InputStream
Espero que esto sirva a alguien mas.
Saludos,
Victor Nuñez
Ignacio Lanzagorta
2012-07-17
Hola Víctor.
Traté de implementar la solución que propones en ireport.
también obtengo el campo binarydata de ad_image
yo estoy utilizando jasper 3.7.4 y postgresql 9.0.7
el field los definí del tipo Object
y la imagen tal como tú la propones.
el error que recibo es :
Error exporting print… Image read failed.
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.loadImage(JRImageLoader.java:245) at net.sf.jasperreports.engine.JRImageRenderer.getImage(JRImageRenderer.java:476) at net.sf.jasperreports.engine.JRImageRenderer.getDimension(JRImageRenderer.java:512) at net.sf.jasperreports.engine.JRImageRenderer.getOnErrorRendererForDimension(JRImageRenderer.java:378) at net.sf.jasperreports.engine.export.ooxml.JRDocxExporter.exportImage(JRDocxExporter.java:809) at net.sf.jasperreports.engine.export.ooxml.JRDocxExporter.exportGrid(JRDocxExporter.java:553) at net.sf.jasperreports.engine.export.ooxml.JRDocxExporter.exportPage(JRDocxExporter.java:443) at net.sf.jasperreports.engine.export.ooxml.JRDocxExporter.exportReportToStream(JRDocxExporter.java:359) at net.sf.jasperreports.engine.export.ooxml.JRDocxExporter.exportReport(JRDocxExporter.java:255) at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:1156) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997)
..Saludos
Ignacio Lanzagorta
Helio Gutierrez
2012-07-18
Yo tambien necesito mostrar una imagen de un campo binario, y segui los pasos que propuso victor:
"1.- En ireport defini una imagen usando la paleta de ireport, le asocie cualquier imagen de mi computador
2.- Luego modifique image expresion por "new java.io.ByteArrayInputStream ($F{nombre_campo_imagen})"
3.- Luego modifique Expresion Class de la imagen por "java.io.InputStream"
y problema resuelto"
Pero en mi iReport al darle preview si compila y muestra el reporte, pero al darle "scroll" hacia abajo para ver mi imagen, en donde inicia la imagen me dice "Error mostrando la pagina del reporte, Vea la consola por detalles" y pone toda la pagina en blanco.
Pero la consola no muestra ningun error ni de compilacion.
Estoy usando iReport 3.7.3 y Adempiere 360
Alguien ha podido mostrar la imagen en iReport?
Saludos
John Agudelo
2012-07-18
Haganlo de la siguiente forma:
1. Busquen el field en el reporte y cambie la propiedad Field class a java.io.InputStream
2. Agreguen un control de image y cambien la propiedad Expression class a java.io.InputStream
Saludos
John Agudelo
www.osgroup.co
John Agudelo
2012-07-18
Se me olvido decirles que en la propieda Image Expresión del control Image solo debe estar $F{nombre_campo_imagen}
Saludos
John Agudelo
www.osgroup.co
Ignacio Lanzagorta
2012-07-18
Helio:
El error te debe aparecer en la ventana donde muestra los datos de compilación, un truco que yo estoy usando es a la imagen, en sus propiedades en Error Type, ponerle Blank, con este sigue ejecutando el reporte pero te pone un recuadro blanco en donde va la imagen.
John, hice lo que recomendaste y me arroja el mismo error en ireport, no lo he probado desde Adempiere, sigo en ireport usan el botón de Preview. Pero supongo que fallará igual.
El error es…
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.loadImage(JRImageLoader.java:245) at net.sf.jasperreports.engine.JRImageRenderer.getImage(JRImageRenderer.java:476) at net.sf.jasperreports.engine.JRImageRenderer.getOnErrorRendererForImage(JRImageRenderer.java:429) at net.sf.jasperreports.engine.export.JRPdfExporter.exportImage(JRPdfExporter.java:1298) at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:773) at net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:737) at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:615) at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:384) at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:1156) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997)
…Saludos
Ignacio Lanzagorta
Ignacio Lanzagorta
2012-07-18
Helio:
Hice la prueba desde Adempiere y funciona, al parecer el problema es de iReport al exportar a .PDF o .docx.
Incluso probé ambos escenearios.
El del Helio:
Field (el que es bytea) ->Edit Field Class -> java.io.InputStream
En la imagen
Expresion Class -> java.io.InputStream
Image Expression -> $F{FIELD}
y el caso de Víctor
Field (el que es bytea) ->Edit Field Class -->Object
En la imagen
Expresion Class -> java.io.InputStream
Image Expression -> new java.io.ByteArrayInputStream ((byte)$F{FIELD})
En ambos casos, marqué los atributos using Cahce y es Lazy de la imgen.
y ambos me dan error en iReport y funcionan desde Adempiere,
Les comento que yo utilizo 3.7.4 iReport, quizá una versión posterior resuelva esto
En adempiere en el attach del reporte pongo el .jasper (el compilado)
…Saludos
Helio Gutierrez
2012-07-18
Que tal Ignacio muchas gracias por tu sugerencia…
fijate que hice la prueba en Adempiere y le puse la validacion en el iReport de que si habia error muestre un icono, y no truena en Adempiere pero no me muestra mi imagen algo no decodifica de este dato.
Ya use ambas opciones :(
Tambien puse el jrxml dado que adempiere lo compila pero tampoco hay resultados…
mi imagen es un codigo bidimensional pero segun esta en PNG
si consulto la columna por query se ve asi:
\211PNG\015\012\032\012\000\000\000\015IHDR\…..
y si exporto el registro se ve asi:
\x89504e470d0a1a0a0000000d4948445200000078000000780802000000b606a185000002d84944415478daed9bc16ec3300c43f3ff3fbd5d070c094452766ce7e954145d97bcc09444a9d70f31252e100…..
Estare mal desde como guardo el dato?
Saludos!
Helio Gutierrez
2012-07-22
Para no debar abierto el tema lo resolvi de la siguiente manera:
Encontre que la imagen me llega en base64 por lo que intentamos cambiando el field en la base de datos a tipo Text (es postgresql) y en el ireport de esta manera:
Se agrego en el iReport 3.7.3
en el ClassPath -> Adempiere/lib/Adempiere.jar
Field (el que es text) ->Edit Field Class -> java.lang.String
En la imagen
Expresion Class -> java.io.InputStream
Image Expression -> new ByteArrayInputStream(org.adempiere.util.Base64Coder.decode($F{FIELD}))
Con esto le digo que saque el texto del campo y lo decodifique en base64 para mostrarlo en la imagen y ya pude mostrarlo.
Espero le sirva a alguno que tuviera mi problema.
Saludos!