Saltar navegación

20251113 JasperReports_1 - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 14 de noviembre de 2025 por Raquel G.

16 visualizaciones

Descargar la transcripción

Ya estamos grabando, ¿ya estás contento? 00:00:00
Venga, vale 00:00:02
Pues venga 00:00:04
Vamos a hacer un ejemplito básico 00:00:06
Un proyecto normal y corriente 00:00:07
¿Maven? Pues sí, maven 00:00:09
Porque la librería de Jasper Report la vamos a necesitar 00:00:11
Entonces, ¿para qué descarga? 00:00:13
Gestionamos la dependencia con maven, lógicamente 00:00:16
Vale 00:00:18
Vale, pues 00:00:19
Mini proyecto ejemplo 00:00:39
De uso de la librería Jasper Report 00:00:41
Y las plantillas 00:00:43
Ya está 00:00:52
¿Dónde está? 00:01:01
Adelante 00:01:05
¿Qué ha pasado? 00:01:06
No me lo ha... 00:01:13
Es que esos tienen poca... 00:01:15
¿Por qué se caracteriza? 00:01:18
Pues poca cosa que describir 00:01:26
¿Por qué se caracteriza el correo de Fórmula 1? 00:01:28
Un pedido pues tiene ítems 00:01:30
Tiene no sé qué 00:01:32
No entiendo de Fórmula 1 00:01:33
Ah, sí, pues mira 00:01:39
Para que te pases de listo 00:01:41
Antes de que tú nacieras 00:01:42
Vale, pues 00:01:44
Venga, pues eso 00:01:50
Como no entiendo mucho de Fórmula 1 00:01:53
Vamos a hacer un pedido 00:01:55
Y se acabó, si es un ejemplito rápido 00:01:56
Para que luego vais a dejarme sorpresa 00:01:57
¿Eh? 00:01:59
Pedido para los de Fórmula 1 00:02:00
Vale, pues venga 00:02:02
Vamos a ponerle un id 00:02:04
Y vamos a ponerle 00:02:06
Una 00:02:12
Lista 00:02:13
De ítem 00:02:15
Y ya está 00:02:17
Vamos a hacer ya directamente los 00:02:25
Sencillo para acabar rápido 00:02:29
Y ahora vamos a hacer la clase 00:02:32
Ítem 00:02:38
Vale 00:02:40
Creamos la clase ítem 00:02:41
Que la clase ítem 00:02:50
Que tenga solamente cada ítem del pedido 00:02:53
Se va a caracterizar por 00:02:55
Su nombre 00:02:57
Y, joder, que calor es hacia aquí 00:02:58
O soy solo yo 00:03:05
Y su precio 00:03:05
Pues nada, será la menopausia 00:03:09
A ver 00:03:12
Vale 00:03:13
Y ahora ya importamos la lista 00:03:20
Bueno, pues nuestra aplicación 00:03:25
Lo que tiene que hacer es generar un informe 00:03:33
Con 00:03:36
La lista 00:03:36
De nuestros ides de pedido 00:03:40
Con por ejemplo 00:03:41
El precio medio de cada pedido 00:03:43
Ya está 00:03:45
Entonces vamos a hacer aquí 00:03:47
Nuestra 00:03:49
Uy, perdón 00:03:51
Vamos a hacer aquí otro paquete 00:03:53
Para hacer ese método que genera el informe 00:03:55
Y ya está 00:03:58
Una clase informe 00:03:58
Una clase de informes con ese método 00:04:11
Vale, pues venga 00:04:15
Funcionalidad de esta aplicación 00:04:16
Generar informe 00:04:18
Vale 00:04:21
Entonces 00:04:26
Ese informe que va 00:04:27
Necesitar 00:04:29
Pues una lista de pedidos 00:04:32
Vale 00:04:34
Y por ejemplo 00:04:37
El nombre del fichero 00:04:39
Donde se va a guardar ese informe 00:04:41
que será un nombre de fichero PDF. 00:04:44
Vale, pues podría ser esta la firma de este método, ¿verdad? 00:04:47
Ya está. 00:05:02
Entonces, el resultado del método será que ese PDF aparezca 00:05:03
en la ruta que sea, donde yo quiera. 00:05:07
Es decir, el método no devuelve nada. 00:05:09
A ver, podría hacer que devolviera un file asociado a ese recurso también. 00:05:11
Podría hacerlo así. 00:05:15
Pero lo que me importa de este método es que cree ese fichero PDF. 00:05:16
Si además estuviéramos en una aplicación web, pues lo que podríamos hacer es que ese informe generado automáticamente se nos descargara, ¿vale? 00:05:20
Que ese podría ser el examen sorpresa que hagáis después, ¿vale? 00:05:28
¿Quién habla por ahí? 00:05:38
Dice, ah, que en el examen va a entrar, que va a entrar. 00:05:39
Vale, entonces, esto es un pedido, ¿no? 00:05:42
Un import, vale. 00:05:48
¿Cómo hacéis esto vosotros para que no 00:05:50
Tener que escribirlo a mano? Cuando necesitas 00:05:53
Tanto crear como importar 00:05:54
No te ofrecen las dos cosas 00:05:56
Control-C 00:05:58
O de hola 00:06:00
O sea, si la haces 00:06:04
Ah, vale 00:06:05
Vale 00:06:07
Pues ya está 00:06:10
Bueno, pues entonces 00:06:13
En algún momento en el main donde llamemos 00:06:17
tendremos que generar los datos, esta lista de pedidos 00:06:20
y ahora 00:06:23
a ver, primero 00:06:26
vamos a pensar, nuestro informe 00:06:29
que nos han dicho que tiene que tener 00:06:31
nuestro informe tiene que tener 00:06:32
dos columnas 00:06:34
donde figure 00:06:37
id del pedido 00:06:38
precio medio 00:06:41
id precio medio 00:06:42
eso es lo primero que tenemos que identificar 00:06:43
exactamente el informe que tiene que contener 00:06:46
vale 00:06:48
Y de precio medio, y de precio medio, y de precio medio 00:06:50
Vale, pues esa va a ser su fuente de datos 00:06:53
Entonces, su fuente de datos va a ser una colección de pares 00:06:55
Y de precio medio, y de precio medio 00:06:59
Una colección de pares 00:07:02
Vale, entonces, aquí 00:07:03
Lo más sencillo para crear esa colección 00:07:07
Es que yo me haga aquí una clase 00:07:10
Donde van a estar los datos del informe 00:07:14
Vale, esta clase es solamente para rellenar el informe, para rellenarlo. 00:07:17
Con lo cual, esta clase tiene solamente los campos que van a ir a la plantilla. 00:07:29
¿Y cuáles son los campos que van a ir a la plantilla? 00:07:35
Pues los campos que van a ir a la plantilla son un ID de pedido y el precio medio. 00:07:37
Estos son los datos que van a ir a la plantilla exclusivamente. 00:07:54
Vale, entonces la plantilla se va a llenar con una información, entonces en función de la información que va, pues a veces el propio modelo, la propia entidad puede servir directamente como fuente de datos para el informe, vale, depende, pero en este caso como solo vamos a usar ID y el precio medio, esa estructura no es exactamente la estructura del modelo, 00:07:57
Porque la estructura mía del modelo es ID colección de ítems 00:08:33
Eso no es la estructura de mi informe 00:08:36
La estructura de mi informe es un ID dabel 00:08:39
ID dabel, ID dabel 00:08:41
Vale, pues entonces me voy a hacer otra clase 00:08:43
Exclusivamente para representar 00:08:45
Para representar lo que va a ir al informe 00:08:49
Entonces al informe la idea es que vayan un montón de objetos como este 00:08:52
Al informe lo van a nutrir un montón de objetos como este de aquí 00:08:56
Luego, lo primero que tendremos que generar es este conjunto de datos 00:09:01
Que son los que van a rellenar el informe 00:09:09
Una lista de datos informe 00:09:12
Y ahora, esto ya sí que es una parte de programación 00:09:15
¿Vale? 00:09:39
Que es pasar de la lista de pedidos 00:09:40
Por cada pedido llevar a esto 00:09:42
¿Vale? Pues entonces 00:09:44
Vale, pues así en plan rápido 00:09:45
Podéis haber hecho algo así 00:09:50
Para cada pedido vamos a construir 00:09:51
Un nuevo dato para el informe 00:09:54
Como no tengo ni constructores 00:09:56
Ni tengo nada 00:09:58
Y ahora 00:09:59
Este dato su ID está claro 00:10:02
Que es 00:10:05
El pedido.id 00:10:05
El ID está claro 00:10:08
Y ahora de este dato 00:10:10
El precio total 00:10:11
Tendré que calcularlo 00:10:15
Como 00:10:17
la suma de todos los precios 00:10:18
de todos los ítems que están 00:10:21
dentro del pedido P 00:10:22
vale, entonces el pedido P 00:10:24
tiene su lista de ítems 00:10:26
entonces esa lista la puedo serializar 00:10:28
con un stream y hacer ahí el total 00:10:30
la media, lo que sea 00:10:32
bueno, a ver 00:10:33
si quieres añadir fuerza hasta el infinito 00:10:36
pero es que esto es mucho más rápido 00:10:38
tú tienes tu P 00:10:40
si sabes pensarlo 00:10:41
tú tienes, cuando 00:10:44
tiene sentido hacer esto, cuando tienes 00:10:46
que hacer operaciones sobre 00:10:48
una lista de cosas, aquí tenemos que 00:10:50
hacer la suma 00:10:52
de todos los elementos de una lista 00:10:53
pues ya está, entonces ahí para qué vas a hacer 00:10:55
un for con una suma acumulativa 00:10:58
si puedes hacer una función lambda, entonces siempre 00:11:00
que tengas una lista 00:11:02
sobre la que tienes que hacer cosas 00:11:04
hacer una suma, una media 00:11:06
para cada elemento, transformarlo 00:11:08
en algo, siempre que tengas que hacer cosas 00:11:10
con todos y cada uno de los elementos de una lista 00:11:12
alternativa 1, for 00:11:14
que va uno por uno y hace lo que sea 00:11:17
alternativa 2, la serializo 00:11:18
y algún método de esa serialización 00:11:20
me lo hará 00:11:23
casi seguro, bueno pues entonces 00:11:24
opción 2, cojo esa lista 00:11:27
sobre la que tú harías el for 00:11:29
sobre esa lista de pegged items 00:11:30
pues en lugar de hacer el for 00:11:33
sobre esa lista, la serializo 00:11:35
con stream y ya la tengo en filita 00:11:37
¿qué quiero hacer con cada elemento? 00:11:39
pues de cada elemento item 00:11:41
Solo me interesa 00:11:43
Su precio 00:11:44
Y luego una vez que tenga 00:11:46
Esos elementos transformados a precio 00:11:49
Ahí ya me viene un map 00:11:52
Tengo el ítem gordote 00:11:53
Pero solo me interesa el precio 00:11:55
Luego ahí ya pienso, es un map 00:11:56
Ítem gordo, solo quiero el precio 00:11:59
Map 00:12:01
Vale, en este caso como el map 00:12:02
Me lleva un dabble, pues podemos usar directamente 00:12:05
Map to dabble 00:12:07
O lo podéis usar con el map y luego convertirlo a dabble 00:12:09
Lo que queráis 00:12:12
Vale, pues entonces, la tengo en filita 00:12:13
¿Qué quiero con cada ítem? 00:12:15
Con cada ítem quiero transformarlo 00:12:17
Quedarme solo con su precio 00:12:20
A través de 00:12:22
Para quedarme solo 00:12:23
Con la parte del ítem 00:12:27
Que es el precio, pues me hago la función 00:12:29
Lambda, esta 00:12:31
¡Hala! 00:12:33
Ya tengo 00:12:35
El precio, ¿vale? 00:12:36
Y ahora, ¿qué quiero hacer 00:12:40
Con todos y cada uno de los precios? 00:12:43
sumarlos 00:12:45
pues ya está 00:12:46
¿Vale? Más sencillo 00:12:48
que un for 00:12:53
pues ya está, esto es lo primero que se nos puede 00:12:54
ocurrir y ya está, ya tenemos 00:12:57
toda la lista de datos informe 00:12:58
de la cual se va a nutrir 00:13:01
la plantilla del Jasper Report 00:13:03
para construir el 00:13:05
listado, ¿Vale? 00:13:07
Pues esta parte ya la tenemos, ahora 00:13:09
estos datos informe 00:13:11
se transformarán en fuente de datos 00:13:13
para la plantilla, pero jolín, la plantilla 00:13:15
Nos falta 00:13:17
Pues vamos a hacer la plantilla 00:13:17
Ala 00:13:21
Sin perder de vista 00:13:23
Esto que es 00:13:25
El que tiene los datos 00:13:27
Que van a ir a la plantilla 00:13:29
Sin perder de vista esto vamos a hacer la plantilla 00:13:30
Pues ala, venga 00:13:32
Nueva plantilla 00:13:35
Jolísima 00:13:36
Puesto tonto 00:13:44
Pues venga, ala 00:13:46
Un nuevo Jasper Report 00:13:47
Ya está 00:13:50
Bueno, pónselo si quieres 00:13:51
Pero es que luego tendrás que personalizarlo 00:13:55
Quitarle los gráficos 00:13:57
Que tú no vayas a incluir 00:14:00
Luego en el examen sorpresa lo haces como tú quieras 00:14:01
Lista, pedidos 00:14:04
Vale 00:14:09
Lista, pedidos, congratulations 00:14:10
¿Eh? ¿Dónde está el congratulations? 00:14:13
Porque le he dado finish 00:14:19
Pues así 00:14:20
Vale, pues hala 00:14:22
Lista pedidos, ¿dónde está? 00:14:24
Lista pedidos 00:14:28
Ah, es que debe ser que ya tenía 00:14:29
Un listado pedidos 00:14:33
Porque tengo aquí el Jasper, ya compilado 00:14:34
Pues debía tener ya un listado pedidos 00:14:37
Sí, efectivamente 00:14:39
Aquí está 00:14:41
Vale 00:14:41
Pues 00:14:43
Lo voy a llamar 00:14:45
No, es que ya lo tenía, tenía ya un listado de pedidos y lo que ha hecho es sobrescribir, le he debido decir que no o algo así y ya está. 00:14:48
Pues venga, voy a hacer un lista pedidos, que este no le tengo seguro. 00:14:56
Gracias, ya está. 00:15:08
Lista pedidos. 00:15:09
Lista pedidos ya existe, pero ¿cómo va a existir lista pedidos? 00:15:16
También existe lista pedidos. 00:15:20
Ah, es que debes, ah, vale, es que lista pedidos es la nueva, que me he liado. 00:15:22
Esta es la que acabo de hacer. 00:15:25
Vale, lista de pedidos, que está en blanca, blanquísima. Bueno, vale, pues aquí en el detail, aquí en esta banda detail, que está aquí en el outline, que es la clave porque me aparece el mapa de todo lo que tengo, en esta banda detail es donde vamos a poner lo que es el cuerpo del informe, toda la lista de pedidos, los datos que se replican. 00:15:26
Entonces, para cada variable de mi aplicación Java 00:15:47
Que tiene un dato 00:15:52
Y en este caso, ¿cuántas variables tengo que tienen dato? 00:15:53
Tengo la ID y precio total 00:15:57
Luego cada una de ellas se replicará tantas veces como pedidos 00:15:59
Cada una de ellas se replicará 00:16:03
Tantas veces como en la lista aparezca 00:16:04
Pero lo que es variables, cajas que tengan datos 00:16:07
Solo tengo estas dos cajas 00:16:11
ID y precio total 00:16:12
Solo esas dos 00:16:13
vale, pues entonces me tengo que hacer aquí 00:16:14
dos campos 00:16:17
porque variable de java 00:16:19
se corresponde a campo 00:16:22
en el informe 00:16:24
vale, asociación 00:16:25
que hacemos, la más importante 00:16:28
variable de java a campo en el informe 00:16:29
pues nos vamos a hacer 00:16:32
un campo nuevo 00:16:33
me crea el campo nuevo y aquí 00:16:34
a la derecha 00:16:38
me aparece la parte java 00:16:40
que puedo cambiar de él 00:16:43
En nuestro caso, el nombre, porque se llama id, ¿vale? 00:16:44
Se tiene que llamar igual que se llama la variable en java, 00:16:49
para que la librería jasperreport sea capaz de enlazar el campo del informe con esa variable id. 00:16:55
¿Qué tipo de dato tiene un string? 00:17:01
Porque id es string, pues ya está. 00:17:03
Pues venga, ya tenemos nuestro campo id. 00:17:06
entonces 00:17:10
este campo, si nos vamos al 00:17:14
fuente de la plantilla, a la plantilla 00:17:15
real, en realidad lo único 00:17:18
que ha hecho eso es meterme 00:17:20
esto, es lo único que ha hecho 00:17:21
meterme esta línea 00:17:24
meterme esta línea, pero que pasa 00:17:24
que todavía falta por colocar, esta es mi 00:17:27
banda detail, aquí todavía no hay nada 00:17:29
es decir, está 00:17:31
declarado, está declarada pero todavía 00:17:32
no está colocado en ningún sitio 00:17:35
vale, pues vamos a colocarla 00:17:37
vamos a diseño y ahora ¿dónde la llevamos? 00:17:39
pues al detail 00:17:42
ahí quiero que se coloque 00:17:43
por ejemplo 00:17:47
ahora ya si la tengo 00:17:49
seleccionada en el informe y me voy 00:17:51
otra vez a properties 00:17:53
me aparecen ya las propiedades 00:17:54
pero no las relativas a Java 00:17:57
me aparecen ya las propiedades relativas al aspecto 00:17:59
pues aquí 00:18:01
pues para que se vea el informe 00:18:03
un poquito más grande 00:18:05
pues 00:18:06
en text fill 00:18:09
en text fill 00:18:14
es donde está 00:18:15
el tipo de letra, el tamaño 00:18:17
y todo eso 00:18:19
pues vamos a ponerle que sea un poquito más 00:18:20
grande, 14 00:18:23
para verla bien 00:18:25
vale, aquí uno podría explorar 00:18:26
millones de cosas, pero bueno 00:18:38
las vamos pasando 00:18:40
por alto 00:18:43
vale, ya tenemos 00:18:43
el id ahí colocado 00:18:46
Entonces, fijaos lo que ha hecho el Jaspers of Studio el solito. Lo que ha hecho el Jaspers of Studio el solito, me ha colocado un texto estático que no se corresponde con ninguna variable de javas, me ha colocado un texto estático porque él asume que aquí va a haber una columna de ides y me ha puesto un texto estático para que la cabecera, para que la columna tenga una cabecera. 00:18:48
Pero hombre, que ponga id es muy feo 00:19:13
Vamos a cambiar el texto estático 00:19:15
Vamos a cambiárselo 00:19:17
No quiero que sea id de pedido 00:19:19
Que es muy feo 00:19:22
Lo seleccionáis, os vais a propiedades de la derecha 00:19:23
Id del pedido 00:19:26
Para que se vea un poco más bonito 00:19:29
Y vamos a ponerle 00:19:31
Pues también en letra grande 00:19:34
Y negrita 00:19:36
¡Hala! Ya tenemos 00:19:38
El primer campo de la columna 00:19:42
Vale 00:19:44
Pero mi informe va a tener 00:19:46
Otro dato de Java 00:19:49
Que es el precio 00:19:51
Total 00:19:53
Pues venga 00:19:55
Precio total 00:19:56
Se llama de esta manera, pues vamos a hacernos 00:19:58
Un nuevo campo aquí 00:20:01
Me creo un campo 00:20:02
Field 1, no, no quiero que se llame field 1 00:20:04
Pues lo selecciono 00:20:08
Y me voy aquí 00:20:10
Sus propiedades 00:20:12
Y quiero que se llame 00:20:14
Precio total 00:20:15
Para que se cargue 00:20:16
Desde java 00:20:19
Con la variable que se llame así 00:20:20
Precio total 00:20:22
Ahora está declarada 00:20:23
Pero no está colocada en ningún sitio 00:20:30
Ah no no 00:20:32
Perdón 00:20:35
Precio total 00:20:35
Era un double 00:20:42
Vale 00:20:43
Estás a tiempo de aprender 00:20:52
A montar a caballo 00:20:54
Todo eso 00:20:56
¿De ganar dinero por ello? No lo sé 00:20:56
Mira, ¿ves? Ya me has puesto nerviosa y se me ha ido esto por ahí 00:20:59
Vale, precio total 00:21:02
Ahora que ya la tenemos colocada 00:21:07
Vamos a darle el mismo aspecto que la otra 00:21:09
Que si no nos queda muy feo 00:21:11
Hombre, tú puedes cambiar la plantilla 00:21:12
Siempre que quieras 00:21:24
Lo que pasa es que 00:21:25
luego tendrás que volver a compilar 00:21:26
la plantilla 00:21:29
no, no, no, vete a sus propiedades 00:21:29
y cámbialo ahí 00:21:38
pero tienes que seleccionarlo 00:21:39
en la parte de fields, no en la de abajo 00:21:42
en el de arriba 00:21:44
cuando lo seleccionas 00:21:46
arriba ves su parte Java, que es poca 00:21:49
en este caso de campo, cuando lo seleccionas 00:21:51
abajo ves su parte informe 00:21:53
¿vale? 00:21:54
Entonces, precio total como, vamos a ponerla también en 14 como la otra. Y ahora, el campo extático que me ha puesto el solo, vamos a quedárnoslo, pero vamos a llamarlo mejor. 00:21:56
Precio total 00:22:12
Este nombre no me gusta 00:22:15
Precio total 00:22:19
Me gusta más 00:22:21
También 14 00:22:22
Y negrita 00:22:25
Ala 00:22:27
Y vamos a ponerle 00:22:34
En el título 00:22:36
Pues hombre, vamos a ir a la paleta esta 00:22:37
Y vamos a ponerle un título 00:22:40
al menos, listado pedidos 00:22:43
en la paleta, pues hay muchas 00:22:45
cositas 00:22:47
entre ellas hay 00:22:47
el static text 00:22:50
¿vale? 00:22:53
pues entonces 00:22:55
el static text 00:22:56
lo arrastráis directamente, los elementos 00:22:59
que cogéis de la paleta, los arrastráis 00:23:01
directamente, porque esos 00:23:03
no tienen conexión con Java 00:23:04
¿vale? no tienen conexión con Java 00:23:06
entonces 00:23:08
este 00:23:11
ala, este texto estático 00:23:12
propiedades 00:23:16
mis pedidos 00:23:18
que esté centrado 00:23:23
y vamos a ponerlo 00:23:28
en más gordote, 18 00:23:33
y en negrita 00:23:34
más gordo todavía 00:23:37
Cuando guardes se modificará 00:23:40
Vuelve a 10 00:23:44
Que me vuelve a 10 todo el rato 00:23:45
Y esto 00:23:48
Ah, lo tienes que ir dándole así 00:23:57
O escribirlo a mano 00:24:01
O escribirlo a mano en el source, dices 00:24:02
Bueno, pues 00:24:04
Entonces este tampoco se nos ha hecho grande 00:24:06
Efectivamente 00:24:08
Pinchad y escribidle a mano 00:24:09
O sea, editarlo tú directamente 00:24:16
Pues que cutre 00:24:18
Nunca me había dado cuenta de eso 00:24:19
Vale, pues ala 00:24:21
No pasa nada 00:24:23
Este está en 15, este está en 15 00:24:24
Y este está 00:24:27
Por eso os decía 00:24:29
Que es que este software a mí me escama 00:24:31
Y se, obviamente 00:24:33
Se sigue 00:24:36
Y ahora 00:24:37
Este no lo veo 00:24:40
Ahí 00:24:42
Bueno, nos quedamos con este diseño 00:24:42
Venga, vale, nos quedamos con este diseño 00:24:49
Uy, esta se ha quedado muy pequeña 00:24:51
Más pequeña que esta otra 00:24:52
A ver, esta está a 16 00:24:54
Y esta la he dejado a 14 00:24:58
Ay, perdón, vale 00:24:59
O sea, ¿qué diferencia hay en lo de abajo, en el FID y detenido? 00:25:04
¿Perdona? 00:25:13
La variable, en lo de detail, ahí va a mostrar el dato. 00:25:15
Claro, aquí va a mostrar el dato. 00:25:19
Y arriba el texto. 00:25:20
El texto tal cual. 00:25:21
Vale, esto no tiene nada que ver con Java, es un static test el texto que tú pongas. 00:25:22
Lo de abajo es la variable que se llame así. 00:25:26
Vale, por eso lo de arriba lo hemos arrastrado desde la paleta, 00:25:29
No había que crearlo 00:25:32
Ni nada 00:25:33
Vale, pues ya está, entonces, ¿nos gusta este informe? 00:25:35
Vale, entonces 00:25:38
Lo que pasa es que la banda detail 00:25:39
Vamos a hacerla un poquito más pequeña 00:25:41
Porque si no 00:25:43
Todas las líneas 00:25:45
Que se van a ir replicando 00:25:47
Van a quedar muy separadas entre sí 00:25:49
Entonces vamos a hacerla un poquito más pequeñita 00:25:51
Ponemos esto aquí 00:25:54
Esto aquí 00:25:58
Podéis hacer esta banda un poco más pequeña 00:26:01
Vale, bueno, pues así se queda 00:26:05
A ver si luego es feo, bonito, ya veremos como es 00:26:08
Se ve divino 00:26:10
Bueno, pues 00:26:13
Esto es lo que ha generado, que en realidad 00:26:15
Tampoco es nada muy allá del otro mundo 00:26:18
Ha declarado los dos campos 00:26:20
Y luego en la banda detail, en la banda columna 00:26:23
Ha puesto dos textos estáticos 00:26:28
Y en la banda detail ha puesto 00:26:30
Estos dos textos 00:26:32
Estos dos campos 00:26:35
¿Vale? Y ya está 00:26:36
Y no hemos hecho nada más 00:26:38
Bueno, ahora 00:26:40
Vamos a asegurarnos 00:26:42
De que esta plantilla, el Jasper Report 00:26:44
La va a poder 00:26:47
Utilizar correctamente 00:26:49
Las librerías del Jasper Report 00:26:51
Que no se van a liar con ella de que está bien hecha 00:26:52
O lo que es lo mismo 00:26:55
Vamos a compilarla, porque el Jasper Report no usa 00:26:56
el xml 00:26:59
usa la versión compilada 00:27:00
y sobre la compilada es sobre la que 00:27:03
inserta ya los datos 00:27:05
¿cómo compilamos la plantilla? 00:27:07
pues le dais a este botoncito 00:27:09
¿vale? 00:27:11
hombre, pues 00:27:14
si os da errores es que 00:27:15
hemos escrito algo mal en la plantilla 00:27:17
que algún campo que se sale de su sitio 00:27:19
alguna incoherencia con tamaños 00:27:21
pero hombre 00:27:23
no nos ha dado errores, con lo cual esta plantilla 00:27:25
Ya está bien hecha. No tiene colisiones entre dos campos que se llamen igual, entre un campo que esté encima del otro, con lo cual no tiene cosas raras. Ha compilado y ya está. Y al compilarla nos ha generado el fichero que ya sí que realmente va a usar la librería Jasper Report. 00:27:28
que es el punto 00:27:48
jasper 00:27:51
nosotros este es el fuente 00:27:51
y este es el punto jasper 00:27:55
que este ya lo usa 00:27:57
la librería del jasper report para 00:27:59
ahora ya en nuestro mail 00:28:01
coger esto, coger 00:28:02
los datos, se funden 00:28:04
y se acabó, vale 00:28:07
pues venga 00:28:09
ahora ya nos tenemos que ir a java otra vez 00:28:11
pero bueno, vamos a copiar este archivo 00:28:13
este vamos a 00:28:15
copiarlo 00:28:17
para llevarlo a una ruta más fácilmente 00:28:18
accesible desde 00:28:21
pues venga, vamos a hacernos 00:28:22
estamos aquí, ¿no? pues vamos a hacernos 00:28:26
una carpetita 00:28:29
o el mismo resources 00:28:30
¿vale? vamos a ponernos 00:28:32
la plantilla 00:28:34
a ver, lo que pasa es que no lo voy a poner en resources 00:28:36
porque es un rollo, porque hay que 00:28:46
sacarlo con, no sé si os acordáis 00:28:49
de get resources stream 00:28:51
O poner la ruta entera 00:28:53
Entonces se me hace más pesado 00:28:57
Vamos a hacerlo 00:28:59
Directamente 00:29:00
En una carpeta aquí 00:29:01
Vamos a hacernos aquí una carpetilla 00:29:04
Con forges 00:29:11
En el raíz, y así la ruta es más corta 00:29:13
Que la de resources 00:29:17
¿Vale? Porque recordad esto 00:29:18
Tendríamos que remontarnos unas cuantas semanas atrás 00:29:22
Y lógicamente lo tendréis olvidado 00:29:24
Pero seguro que está grabado 00:29:26
Que 00:29:28
cuando trabajamos con archivos 00:29:29
cuando trabajamos 00:29:32
con archivos, no es como las clases 00:29:34
de Java, la máquina virtual 00:29:36
busca las clases de Java 00:29:38
para ejecutarlas y para todo eso 00:29:40
en el classpad 00:29:42
y resources está en el classpad 00:29:44
pero otra cosa son los archivos 00:29:46
de datos, esos son recursos que no se 00:29:48
buscan en el classpad, se buscan en la ruta 00:29:50
que tú le digas, entonces si yo meto un archivo 00:29:52
aquí, que no es un .java 00:29:54
sino un archivo para sacar 00:29:56
datos, tendría que poner toda la ruta 00:29:58
o hacer eso que hacíamos 00:30:00
de getResource asStream. 00:30:02
Entonces, el getResource, si es un método 00:30:04
que te va aquí directamente. 00:30:06
Claro, pero tengo que usar ese 00:30:09
método para que ya me lo devuelva como 00:30:10
un stream y ya se ve. 00:30:12
¿Es un método de qué clase? 00:30:13
¿De la rucha, directamente, de qué clase? 00:30:14
Es un método de la propia 00:30:17
clase. Está en un... 00:30:19
Uno de los proyectos de ejemplo del principio. 00:30:21
Sí, lo vi allí. 00:30:23
Ah, vale. 00:30:24
Pues la propia clase 00:30:26
Claro, porque lo llama 00:30:28
La propia clase en la que estás 00:30:31
Cualquier clase lo puede llamar 00:30:32
Llama a ver tus obras y ya está 00:30:35
Entonces, para no liarnos 00:30:37
Lo voy a poner en informes y se acabó 00:30:38
Entonces, ahí lo pego 00:30:40
Ahí tenemos el Jasper 00:30:42
Vale 00:30:44
Y ahora ya sí que sí 00:30:46
En nuestro main 00:30:48
Que estaba por aquí 00:30:49
En nuestro método 00:30:51
Ahora hay que hacer 00:30:53
crear la fuente de datos 00:30:54
para el Jasper 00:30:56
asociada a este 00:30:57
pasar la fuente de datos 00:30:59
a la librería 00:31:04
de Jasper Report y decir a la librería 00:31:08
de Jasper Report que cree el informe 00:31:10
y se acabó 00:31:12
para todo eso necesito 00:31:13
necesito la dependencia 00:31:16
del Jasper Report, lógicamente 00:31:18
porque es la librería de Jasper Report la que me hace esas cosas 00:31:20
y no la tenemos 00:31:22
Pues entonces, como somos unos ignorantes que partimos todo de cero 00:31:24
Nadie nos ayuda, pues vámonos al repositorio de Mavi y la buscamos 00:31:30
Al final no ha añadido datos 00:31:34
Ay, perdone usted, tiene razón 00:31:35
Claro, efectivamente, no lo he añadido 00:31:43
Vale, datos.add 00:31:46
Vale, efectivamente 00:31:50
Vale, bueno pues entonces 00:31:54
Necesitamos la dependencia 00:31:56
Eso significa 00:31:59
Vámonos a un maven repository 00:32:00
A ver este maven repository 00:32:02
Que nos dice 00:32:06
De jasper report 00:32:08
Jasper reports library 00:32:09
Pues tiene pinta de que es la primera 00:32:14
De todas 00:32:16
Ala 00:32:17
Julio del 2025 00:32:20
Venga, entra adentro 00:32:23
¿Con qué nos quedamos? 00:32:25
Ala, con la última 00:32:27
Pues venga, con la última 00:32:29
A ver si no funciona 00:32:31
Venga 00:32:32
Copiamos 00:32:36
Y llevamos esto 00:32:40
Aquí 00:32:43
Pues nos habrá metido 00:32:44
Unas cuantas cosas 00:33:12
Aquí, en A, que tardaba mucho en aparecer 00:33:13
Pues sí 00:33:16
Nos ha metido aquí 00:33:18
La leche 00:33:19
Fijaos todo lo que tira el Jasper Report 00:33:21
De hecho el propio Jasper Report 00:33:24
Ya incorpora 00:33:29
Jackson 00:33:31
O sea Jackson está 00:33:32
Porque estoy abriendo el proyecto correcto 00:33:33
A ver si me he metido en otro 00:33:36
Si estoy en este 00:33:38
Fijaos solamente he puesto la dependencia 00:33:40
De Jasper Report 00:33:42
Y todo lo que me ha metido 00:33:43
La de Jackson es que aparece siempre en todas partes 00:33:45
la primera de todas 00:33:48
como workflow 00:33:53
yo he buscado Jasper Report 00:33:56
me ha salido Jasper Report Library 00:33:57
me he metido ahí 00:33:58
y de las versiones que me ofrecía 00:33:59
la última 00:34:00
que no sé si era la 703 00:34:01
entonces fijaos 00:34:03
todo lo que ha incorporado 00:34:06
y el Jackson este 00:34:08
es que está en todas partes 00:34:09
todo el mundo depende de él 00:34:11
pero qué problema ha habido 00:34:13
¿no lo encontráis en el repositorio? 00:34:19
Pues 703, la última 00:34:21
Pero bueno, no creo que haya muchas diferencias 00:34:25
Si hubiera muchas diferencias 00:34:28
Entre versiones que salen en meses diferentes 00:34:30
El mundo sería un caos 00:34:31
Vale 00:34:34
Pues entonces, ahora ya 00:34:36
Sí que sí, nos viene 00:34:37
O tener una memoria extraordinaria 00:34:39
O el copia y pega 00:34:41
Entonces, ¿qué tenemos que hacer? 00:34:43
Crear la fuente de datos y llamar al método de Jasper Report 00:34:44
Que me cree el informe y se acabó 00:34:47
Entonces, si no tenemos una memoria extraordinaria, pues nos vamos al proyecto que ya tengamos hecho que haga eso, crear la fuente de datos y llenar el informe y lo copiamos, ¿vale? Nada, son dos líneas. 00:34:49
Entonces, estos aquí tendremos una, vale, aquí lo tenemos. Vale, pues crear la fuente de datos desde, vale, pues esto, primero, el Jasper Report necesita, se llama datos, sí, qué suerte, casualidad. 00:35:07
Vale, el Jasper Report necesita que la fuente de la cual coge los datos sea de una de las clases propias que le entiende, claro. Pues entonces, transformamos nuestro datos que tiene las variables con esos nombres, la transformamos a una fuente de datos que el Jasper Report pueda entender. 00:35:41
Entonces el JASPER report 00:36:00
Se puede llenar 00:36:04
Con más datos 00:36:05
Que una colección de variables 00:36:07
Se puede llenar con una consulta 00:36:09
O una base de datos 00:36:11
Se puede llenar de un fichero JSON 00:36:12
Se puede llenar de muchas cosas 00:36:13
Todas ellas serían data source en general 00:36:15
Pues un data source en concreto 00:36:18
Es el de colección de bins 00:36:21
Que es el nuestro 00:36:23
El nuestro es una colección 00:36:24
De datos informe, datos informe 00:36:26
Una colección de bins 00:36:28
Es una fuente concreta. 00:36:29
Pues esta es la que vamos a usar. 00:36:31
Vamos a usar la fuente colección de BIMs para llenar el informe. 00:36:33
Que es esta, nuestra colección de BIMs. 00:36:37
Vale, ya tenemos esa fuente que es capaz la librería Jasper Report de usar para llenar el informe. 00:36:39
Pues ¿cómo llenamos el informe? 00:36:45
Pues, ¿dónde tenemos? Vale. 00:36:48
Pues con estas dos líneas. 00:36:55
Y punto, bueno, vamos a incorporar ya. 00:36:58
Ponemos las tres. 00:37:02
Que ya me lleva pdf 00:37:03
Y ya lo tenemos todo 00:37:05
Vale 00:37:06
No, son tres líneas, de verdad 00:37:08
No, esto no está en la chuleta 00:37:09
Porque al menos si lo 00:37:11
Vale 00:37:13
Sí, sí, sí, sí 00:37:15
Lo voy a poner juntito 00:37:18
Lo voy a poner juntito 00:37:19
Son tres líneas, nada más 00:37:22
Por eso no he hecho chuleta con ellas 00:37:24
Pero lo que pasa es que, a ver 00:37:26
Tenemos que cambiar aquí 00:37:29
Estos nombres 00:37:31
Espera, deja, antes de empezar a copiar 00:37:32
Antes de empezar a copiar 00:37:34
Vamos a entender estas tres líneas 00:37:36
Y adaptarlas a nuestros datos 00:37:39
En concreto, ¿vale? 00:37:41
Y luego ya las copiáis tranquilamente 00:37:42
En ese cambio de clase ficticio 00:37:44
Que no hemos hecho 00:37:47
00:37:47
¿Eh? Segurísimo 00:37:49
Vale, pues a ver 00:37:52
Esta es la fuente de datos de tipo colección de BIM 00:37:54
Que se crea desde una colección de BIM 00:37:57
Efectivamente, vale 00:37:59
Ahora, creamos el reporte, el reporte, o sea, el objeto, un objeto report que es el que es capaz de hacerlo todo, creamos este objeto, este objeto como lo creamos, pues lo creamos de, ¿vale? 00:38:00
Desde el 00:38:18
Fichero 00:38:20
Aquí tendremos que hacer 00:38:21
Un fichero 00:38:23
Asociado a 00:38:24
A ver 00:38:28
New file 00:38:30
A ver 00:38:33
Nuestra plantilla como se llamaba 00:38:34
Lista pedidos 00:38:38
Punto 00:38:40
Jasper 00:38:47
Vale, lista pedidos 00:38:50
Punto Jasper, ¿verdad? 00:38:52
E importamos file. 00:38:54
Y esto tiene la... 00:39:03
A ver, un momentito. 00:39:05
Ah, vale, vale. 00:39:10
Sí, sí, sí, sí. 00:39:11
Vale, vale. 00:39:12
Es que es más cutre que todo eso. 00:39:13
Vale. 00:39:16
Vale, entonces. 00:39:22
Esta es nuestra palantilla ya compilada. 00:39:25
¿Vale? 00:39:28
De la que parte el... 00:39:29
Ahora. 00:39:31
Vamos a rellenarla. 00:39:32
¿Con qué la rellenamos? 00:39:39
con mi fuente de datos 00:39:40
la rellenamos con mi fuente de datos 00:39:42
que es esta 00:39:44
el segundo parámetro 00:39:45
es un parámetro para meterle parámetros 00:39:48
adicionales que ahora mismo 00:39:50
no le estamos metiendo parámetros adicionales 00:39:52
lo dejamos a no 00:39:54
y este es el objeto que hemos creado 00:39:54
antes 00:40:00
entonces este método 00:40:00
el field report, este método es 00:40:03
el que rellena esta plantilla 00:40:05
Jasper ya compilada, el que rellena 00:40:08
esta plantilla con esto. 00:40:10
¿Vale? Este método, 00:40:13
mi plantilla compilada 00:40:14
se rellena con estos datos. 00:40:16
En nuestro caso, sin parámetros 00:40:18
adicionales. Por eso eso está nulo. 00:40:20
Sin parámetros adicionales, que todavía no sabemos 00:40:22
lo que es. Ahora ya 00:40:24
tengo el informe 00:40:26
en Jasper Print, pero todavía 00:40:28
no tengo un PDF, ni porque 00:40:30
podría exportarlo a otras cosas. 00:40:32
Vamos a exportarlo 00:40:35
A pdf 00:40:36
Y para exportarlo a pdf 00:40:37
Pues ahora 00:40:39
Esto te pedía después un file o un string 00:40:41
Vale, directamente 00:40:44
Pues para exportarlo a pdf 00:40:45
Le decimos el nombre del fichero 00:40:47
Esto si quiero que lo meta en informes 00:40:49
Pues 00:40:53
Informes 00:40:56
Listado 00:41:01
Punto pdf 00:41:03
¿Cómo se vea la variable nombre que tenemos arriba? 00:41:05
¿Te he hecho una variable nombre con ese nombre? 00:41:14
El parámetro. 00:41:16
Arriba. 00:41:20
Si me llevas al método, tienes que pasar el parámetro. 00:41:21
La lista de pedidos. 00:41:24
Pues antes lo has hecho bien. 00:41:26
No sé de qué me estáis hablando. 00:41:28
Arriba. 00:41:30
Sí. 00:41:31
Realmente el método. 00:41:32
Ah, perdón, claro. 00:41:33
Sí, sí, sí. 00:41:35
Vale, vale, vale. 00:41:35
Que le había pasado el nombre como parámetro. 00:41:36
Vale, perdón. 00:41:38
Se lo había pasado como parámetro. 00:41:39
Entonces, sin la ruta, entiendo. 00:41:42
Luego, entonces, vale, vale. 00:41:43
Que lo había pasado como parámetro. 00:41:45
Entonces esto tendré que cerrar aquí y concatenarlo con nombres, no fichero, ¿vale? 00:41:46
Y ya está, y esto todo son excepciones que para no dejarlo feo y que la copia sea más fácil, hacemos un flow. 00:41:58
Y ahora ya, sí que sí, vamos a ver, vamos a ponerlo así más para que quepa y lo, vale, pues son esas tres líneas de ahí. 00:42:05
¿vale? 00:42:30
cargamos la plantilla 00:42:47
a ver, está hecho 00:42:48
está programado en plan cutre 00:42:50
solo queremos ver que funciona 00:42:52
porque hombre, poner esto aquí 00:42:54
cableado directamente sin pasar como parámetro 00:42:56
ni nada, es bastante cutre 00:42:58
aparte de que no le he puesto 00:43:00
la ruta, que está en informes, con lo cual no lo va a encontrar 00:43:02
se me había puesto la ruta 00:43:04
se me ha olvidado poner la ruta 00:43:06
lo pongo aquí abajo 00:43:15
¿vale? entonces 00:43:17
Como programado está cutre 00:43:20
No sacar esto fuera 00:43:22
Lo ideal sería sacar esto a properties 00:43:23
Un fichero properties 00:43:26
¿Vale? 00:43:28
Cargamos la plantilla 00:43:31
La rellenamos 00:43:33
Con nuestros datos 00:43:35
Y exportamos a PDF 00:43:37
Punto pelota, ya está 00:43:39
Aquí sí que es un copia y pega 00:43:41
La única dificultad que tiene esta herramienta 00:43:42
Es hacer la plantilla 00:43:45
Hacer una plantilla 00:43:47
que se adapte a lo que queremos nosotros 00:43:49
y que quede bonito, es la única dificultad 00:43:51
si la plantilla está 00:43:53
la cargamos 00:43:54
rellenamos y exportamos 00:43:57
bueno, está copiado 00:43:59
podemos probarlo a ver si hemos acertado 00:44:01
no, no, no, está copiado 00:44:02
vale, pues un segundito, espera que paramos aquí 00:44:04
detenemos aquí un momentito 00:44:07
vale 00:44:08
file es el que me imaginaba 00:44:12
file nos fa una excepción en que la ruta seguro que la estaba 00:44:14
poniendo mal 00:44:17
Puede que, yo creo que esta barrita igual sobra 00:44:17
No lo sé, vale 00:44:20
Este es el primero que me esperaba 00:44:22
Que no estoy poniendo bien la ruta 00:44:23
Vamos a ver 00:44:25
Lista pedidos Jasper 00:44:27
Que está en informes, que está en el 00:44:29
Raíz, verdad 00:44:32
Entonces 00:44:33
Eh, informes 00:44:35
Lista pedidos Jasper 00:44:38
Por 00:44:39
Que no encuentro el fichero 00:44:41
Informes, lista pedidos, estaré poniendo mal la ruta 00:44:43
Es que con esto siempre me 00:44:46
¿Por qué punto? 00:44:49
Porque no le he puesto un punto antes 00:44:53
Yo creo que si le quito la doble barra ya lo encontrará 00:44:54
Creo 00:44:57
Vamos a ver 00:44:58
Con esto de las rutas 00:45:00
Relativas o absolutas 00:45:02
Siempre me hago un lío 00:45:04
Claro, si empiezas poniendo doble barra 00:45:05
Ya la liamos 00:45:09
Entonces yo este ya me lo esperaba 00:45:09
Vale, a ver si con esto ya 00:45:12
Me encuentra todas las rutas 00:45:15
Efectivamente 00:45:17
Vamos a ver si hemos atinado 00:45:18
Al menos con eso 00:45:22
Uh, bueno 00:45:24
Eso al menos ya no sale 00:45:28
No marker de for marking 00:45:30
No sé qué 00:45:34
For marker 00:45:35
A ver, este 00:45:38
Sí que no 00:45:40
Materias:
Programación
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Primer Curso
Subido por:
Raquel G.
Licencia:
Todos los derechos reservados
Visualizaciones:
16
Fecha:
14 de noviembre de 2025 - 12:18
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
45′ 42″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
223.15 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid