En este post diseñaremos un reporte de un padrón electoral con dos columnas que contendrá los certificados de sufragio entregados a los ciudadanos una vez que estos emiten su voto, estos certificados por lo general contienen la información básica de las personas, una fotografía y un código Data Matrix, QR o de barras.
Certificado de Sufragio Bolivia
Necesitamos
Tiempo: 30 minutos
Nivel: Intermedio
Paso 1. Base de datos
Para este ejemplo, se hará uso de la siguiente tabla:
-- -- Estructura de tabla para la tabla 'padron_electoral' -- CREATE TABLE padron_electoral ( ci varchar(7) NOT NULL, people_name varchar(16) NOT NULL, second_name varchar(16) NOT NULL, lastname1 varchar(16) NOT NULL, lastname2 varchar(16) NOT NULL, num_table int(20) NOT NULL, data_matrix varchar(33) NOT NULL, PRIMARY KEY (ci) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -- Volcar la base de datos para la tabla 'padron_electoral' -- INSERT INTO padron_electoral VALUES ('1111111', 'Alan', '', 'Brito', 'Delgado', 23, 'R-2109-3A77-1'); INSERT INTO padron_electoral VALUES ('2222222', 'Pato', 'Carlos', 'Bustos', 'de las Casas', 44, 'R-2109-3A67-6'); INSERT INTO padron_electoral VALUES ('3333333', 'Mario', 'La', 'Neta', '', 1, 'R-2222-3277-2'); INSERT INTO padron_electoral VALUES ('4444444', 'Jessica', '', 'Galindo', 'Tejuro', 44, 'R-8K79-OO77-1'); INSERT INTO padron_electoral VALUES ('5555555', 'Soila', 'Gran', 'Cerda', 'Asquerosa', 2, 'R-2PO9-3A77-A'); INSERT INTO padron_electoral VALUES ('6666666', 'Susana', '', 'Oria', 'Podrida', 5, 'R-4509-3A99-X'); INSERT INTO padron_electoral VALUES ('7777777', 'Zacarias', '', 'Flores', 'del Campo', 4, 'R-26209-3A37-1'); INSERT INTO padron_electoral VALUES ('8888888', 'Aquiles', '', 'Castro', 'Todo', 56, 'R-2288-3A88-D');
Nuestro proyecto consta de una sola tabla llamada «padron_electoral«, entre sus campos tenemos el campo CI (Carnet de identidad o DNI en otros países), este campo que es la llave primaria, también nos servirá para apuntar las fotos de las personas inscritas en el padrón, es decir si una persona tiene el CI = 1234567, su fotografía equivalente será 1234567.JPG
Dicho esto, necesitamos para este ejemplo, 8 imágenes de 60×70 pixeles, si lo deseas puedes usar las nuestras descargando las imágenes en este enlace «Fotos Carnet«
Nuestra tabla también contiene un campo que llamamos data_matrix, en este campo se coloca la información que se desea mostrar en el reporte con formato imagen de Código Data Matrix
El resto de los campos son los datos más comunes que pueden tener este tipo de reportes (nombre, segundo nombre, apellidos, numero de mesa, etc)
Paso 2. Reporte y Configuración de página
Abre JasperReport y crea un nuevo reporte en blanco de tamaño de papel A4 y salva en disco.
Ve al menú FORMAT -> PAGE FORMAT y en la opción columnas (columns) coloca 2 y presiona OK
Siguiendo estos pasos Jasper nos crea una hoja de reporte que estará dividida en dos columnas como se puede apreciar en la siguiente imagen:
Paso 3. Conexión y Report Query
Crea una nueva conexión a tu base de dato de prueba, a continuación crea un Query de la forma:
«select * from padron_electoral«
Paso 4. Parámetros de entrada
Nuestro ejemplo consta de un solo parámetro de entrada que corresponde a la dirección en donde tenemos almacenadas nuestras ocho fotografias, el parámetro se llama «dirPhoto» y es de tipo String, créalo haciendo clic derecho en «parameters» -> «Agregar Parameter»
Paso 5. Diseño del reporte
Valiendote de la paleta de componentes de Jasper crea el siguiente modelo de certificado:
A tener en cuenta, las dimensiones del certificado de sufragio son de 241×142 pixeles equivalentes a una tarjeta de 8.5×5 cm.
Añade el Text Field expression a nombre, apellidos, numero de mesa, CI y Numero de registro, como se haría en cualquier otra reporte.
La fotografía
Añade un componente «imagen» de dimensiones 60×70 pixeles, al añadir una imagen, jasper te pedirá que indiques una ruta de una imagen, no selecciones nada y cierra la ventana.
Teniendo la imagen seleccionada, abre en sus propiedades el Image Expression de la imagen y coloca la siguiente expresión:
Le estamos indicando que se cree un nuevo archivo pasando como parámetros, la dirección de la carpeta en donde están nuestras fotografías y el campo CI junto a la extensión .JPG para formar un archivo, por ejemplo: «c:\misfotos\1234567.jpg»
Código Data Matrix
Desde la paleta arrastra al reporte un componente «Barcode«, aparecerá una ventana en donde podrás elegir el tipo de código de barra que quieras agregar, busca «DataMatrix» en la segunda columna que corresponde a la librería Barcode4J, presiona «Use Barcode4J» para cerrar la ventana.
Las dimensiones del Data Matrix es de 32×32 pixeles, modifica estas en el menú de propiedades del componente, a continuación busca la sección de «Barcode» -> «Shape» y selecciona la opción «Force Square«
Numeración de Certificados
Cada certificado, es único y debe tener un orden correlativo que permita llevar un control por parte del usuario, para este fin, se debe añadir un nuevo Text Field y en su propiedad «Text Field Expression» escribir:
$V{REPORT_COUNT}
Para terminar el reporte, añadir algún encabezado, titulo, numeración de página, etc.
Ejecuta el reporte, cuando te pida el parámetro «dirPhoto«, escribes la dirección en donde tienes almacenadas las 8 fotografías, por ejemplo «E:\mis fotos\»
Debes tener algo como esto:
Descargas
Enjoy!!! 🙂
En este tutorial de android, vemos como leer un archivo de texto y mostrarlo en pantalla del celular, el texto elegido e[...]
Hace un par de años atras google para el aniversario del juego de Pacman saco un doodle en su homenaje, ese doodle que s[...]
Un Fragment representa un comportamiento o una parte de la interfaz de usuario en una Activity. Puedes combinar múltiple[...]
Uno de los cambios principales introducidos a las interfaces en Java 8 fue que estos puedan tener métodos concretos, es[...]
Firebase es la plataforma para el desarrollo de aplicaciones web y aplicaciones móviles de Google el cual se centra en e[...]
Continuando con los tutoriales sobre fragmentos en android, en esta oportunidad veremos como añadir Fragments dinámicame[...]