Agregar imágenes en un reporte de JasperReport

Una de las características de Jaspersoft Reports es la capacidad de incluir gráficos estáticos (logotipos, por ejemplo) en los informes completos. Estos archivos gráficos (jpg, png, etc) normalmente se especifican en el archivo fuente del reporte el archivo JRXML registrándolos por referencia, lo que significa que lo que se almacena es la ruta absoluta o relativa mas el nombre de archivo, no el gráfico en sí. En una implementación empresarial o enfocado en reportes la norma es que el archivo fuente y los archivos de gráficos auxiliares se cargan en un servidor JasperReports para su ejecución.

Dependiendo de nuestra solución o del requerimiento podemos usar recursos externos relativos o cargar los datos desde una base de datos. En este post vamos a dar ejemplos de 4 escenarios y mostrando como hacerlo.

Imagen en JasperReport : Estas son las opciones del contenedor de imagen.

Opción 1 . Usando recursos Externos

Un recurso externo es la forma mas común de colocar una imagen en el reporte

Opción 2: Incrustando la imagen en el reporte (Base64)

Paso 1: codifica tu imagen en base64

Definición: Base64 es un estandar que permite tomar un archivo binario y codificarlo en caracteres ASCII. Como sabemos los archivos XML tienen limitaciones en cuanto a lo que pueden contener, por lo que codificar el archivo de imagen binario en base64 proporciona una forma de incrustar los datos de la imagen en XML manteniendonos dentro del ASCII de XML. Hay muchas opciones de codificar; en este caso puedes usar este codificador de imágenes Base64 online, al terminar lo que obtendrá es una cadena de texto que comienza así:

data:image/jpeg;base64,/9j/4AAQSkZJRAABCCCQEAY...

Esta cadena llamada URI DE DATOS contiene detalles al principio que no forman parte de los datos de la imagen en sí. Desde el inicio hasta la coma incluida – data:image/jpeg;base64,– debe eliminarse. El resto de la cadena son los datos de imagen codificados en base64 que vamos a utilizar.

imagen convertida en Base64

Paso 2: coloque los datos de la imagen base64 en una variable de informe

Primero debemos crear la variable.

Creando una variable en JasperReport.
Asignamos nombre a la variable, y dejamos el resto de los campos iguales.

Se deja todos los demás valores iguales (el nombre de clase de valor es java.lang.String, sin función de cálculo o tipo de incremento, el tipo de restablecimiento es Reporty sin datos en la expresión de valor inicial o el nombre de clase de fábrica de incrementador).

Paso 3: Agregar imagen al informe

Haga clic y arrastre un elemento de imagen desde la Paleta hasta el informe. Aparece un cuadro de diálogo “Crear nuevo elemento de imagen” con varias opciones para el “Modo de creación de imagen”, incluido un recurso de espacio de trabajo, una ruta absoluta o una URL. Elija la última opción, “Expresión personalizada”, e ingrese este fragmento de Java a continuación. Hay un lugar en el fragmento donde se incluye la variable con la imagen codificada en base64,  reemplácelo con el nombre de la variable del paso anterior.

Seleccione “Expresión personalizada” y pegue el fragmento de Java.
Expresion

Paso 4: agregue la importación de clase Base64 al informe

Último paso… para usar la Base64.decodeBase64función cuando se ejecuta el informe, necesitamos importar explícitamente esa clase cuando se ejecuta el informe. En el editor de informes hay pestañas para “Diseño”, “Fuente” y “Vista previa”. Haga clic en “Fuente” para ver el JRXML sin procesar. Debajo de la última línea que comienza con <property name="</code">y encima de la <querystring>línea, agregue esta línea:

<import value="org.apache.commons.codec.binary.Base64"></import>
Agregando la importacion de clase Paso 01.

Hemos terminado: Guarde y obtenga una vista previa de su informe, y verá la imagen incluida en el informe.

Las otros métodos de inserción desde la base de datos se describe en el siguiente post.

JasperReport: Usar imágenes dinámicas desde base de datos (Base64)

JasperReport: Usar imágenes dinámicas desde base de datos (Base64)

La forma mas común de usar logos o imágenes dinámicas en los reportes es que sean administrados via base de datos, en las cuales pueden almacenarse en binario y codificados en Base64. A continuación te mostraremos como hacerlo en estos 2 escenarios.

Software Utilizado: JasperStudio 6.19.0 de 2022.

Paso 1: Base de datos

Lo primero que necesitamos es tener nuestra tabla con los datos, en este ejemplo utilizaremos postgresql.

Estructura de la tabla Imágenes:

Paso 2: Importar los Campos

Se importan los campos al diseño/

Paso 3. Definir el elemento imagen.

El objeto imagen tiene varias formas de importar la imagen.

usaremos la opción 5: Expresión Personalizada

Escenario 1: Binario

Para mostrar una imagen de un campo binario es extremadamente fácil solo hay que poner la referencia del campo en la expresión como fuente.

Propiedad del Elemento Imagen.
Ventana de selección de campos.

eso es todo, la conversion se hace automáticamente.

Escenario 2: Base64

Aunque actualmente es raro que alguna empresa use imágenes se guardadas en Base64 tambien es posbible mostrarlas.

Para este escenario se requieren unos pasos adicionales.

Paso 1. Importar las librerías

JasperReport nos permite realizar programación dentro de los reportes, sea con Java o con Groovy, para poder manipular las cadena Base64 recuperada dela base de datos se necesitará solo una librearía.

En la ventana de imports se agregan las librerías.
Importando java.util.Base64

Luego agregamos la expresión personalizada al control de la imagen.

Eso es todo.

Nosotros y terceros seleccionados utilizamos cookies o tecnologías similares con fines técnicos y, con su consentimiento, para otras finalidades (“interacciones y funcionalidades básicas”, “mejora de la experiencia”, “medición” y “segmentación y publicidad”) según se especifica en la política de cookies. Usted es libre de otorgar, denegar o revocar su consentimiento en cualquier momento.    Configurar y más información
Privacidad