Saltar al contenido

¿Cómo/puedo usar base64 como fuente de imagen en una plantilla de Jasper Report?

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:

Resultado

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ó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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