Después de mucho trabajar ya encontramos la contestación de este atascamiento que algunos de nuestros usuarios de este sitio presentan. Si tienes algún detalle que compartir no dudes en dejar tu comentario.
Solución:
Pasar parámetro como String
hace que Jasper Report crea que es una ruta de archivo absoluta, por lo que necesita otra clase. Lo más obvio sería java.awt.Image
o java.io.InputStream
.
yo elijo java.io.InputStream
ya que esto requerirá menos código, por lo que lo primero que debemos hacer ahora es decode
el base64
imagen String
.
Hay varias clases Base64 que harán el trabajo, elijo la org.apache.commons.codec.binary.Base64
desde apache commons-codec.jar
ya está distribuido con el informe jasper (dependencias). La decodificación nos dará un byte. array byte[]
por lo que ahora solo necesitamos agregar un ByteArrayInputStream
El código java sería:
InputStream stream = new ByteArrayInputStream(Base64.decodeBase64(smileyfaceimage.getBytes()));
Es hora de pasarlo al informe jasper. imageExpression
Espere lo mejor y presione el avance:
Noticia importante: El smileyfaceimage
necesita ser sin que:data:image/png;base64,
EDITAR: El problema del OP (comentarios) fue que con el antiguo informe jasper lib (3.0) necesita especificar la clase en el imageExpression
@ver class="java.io.InputStream"
la publicación se actualizó en consecuencia, ya que esto también funciona en 6.0.
Debe decodificar la imagen de alguna manera, por ejemplo, use una imageExpression:
Estoy usando esto para incrustar imágenes, pero también debería funcionar con una variable, campo o parámetro.
Java 8+ sin bibliotecas externas:
Si eso no funciona, esto definitivamente debería:
Ten en cuenta recomendar este enunciado si te ayudó.