20251113 JasperReports_1 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
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
00:06:00
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
Sí
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
El
00:38:27
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