Hoy quiero continuar el tema de generar reportes pdf por medio de JasperReports, este tutorial es mas avanzado que el anterior, así que te sugiero leer la introducción en caso de que seas realmente nuevo con esta herramienta.
Goals
Hoy tratare el tema de paso de parámetros al reporte, y se definiran algunos conceptos claves, al igual que se hará un plantilla donde se mostrara como dar formato a texto entre otras cosas mas.
Para comenzar es necesario poner el enviroment adecuado, ya sabes, agregar al classpath las librerías requeridas (Señaladas en la introducción), luego de esto creamos un archivo de texto llamado plantilla.jrxml y nos disponemos a diseñar la plantilla por medio de xml.
Preparando el papel
Para este tutorial se va a realizar un reporte que muestre los alumnos de una carrera x de una universidad z, no voy a pasarle la información de los alumnos, solo la información necesaria para generar una plantilla, El primer paso es agregar la cabecera y configurar el nodo principal.
Si te das cuenta, se le han especificado algunas propiedades, tales como el ancho, el largo y los márgenes de la pagina, estos datos corresponden a una hoja tamaño carta, los márgenes los puedes poner al gusto, dependiendo tus necesidades.
Los parametros
Ahora viene una de las partes mas importantes de este tutorial, y es que continuación se define dentro de la plantilla los parámetros a utilizar, hay que aclarar que los parámetros no es el contenido principal del reporte, simplemente es información útil para mostrar en el reporte, por ejemplo la fecha en que se genera el reporte, o el periodo que se esta desplegando en el reporte, el autor o cosas semejantes, son parámetros importantes del reporte, pero no la información principal del reporte, con esto en cuenta se definen los parámetros a utilizar.
Como puedes ver se utiliza la etiqueta <parameter /> la cual tiene dos propiedades, name que es el nombre o identificador con la que se hará referencia, y el tipo de dato que es, en este caso String, es importante mencionar que se debe escribir el paquete exacto donde se encuentra la clase.
La cabecera
Para la cabecera se mostrara el nombre de la institución en letras grandes y sobresalientes, se dibujara una línea horizontal debajo del nombre de la institución, se mostrara la facultad y la carrera. Todo esto lo pondremos dentro de la sección <title/> ya que esta únicamente se muestra una vez en el reporte, si existiese mas de una página, esto se muestra solo en la primera.
El único detalle a comentar es que se ha declarado la propiedad height de “50″, esto significa que todo el contenido debe ser menor o igual a 50 pixeles, es importante tener en cuenta este dato y no superarlo con el contenido, de lo contrario tendremos un error a la hora de compilar el jrxml.
Como el texto será dinámico, pues desde nuestra aplicación le pasaremos la información, utilizaremos un textField, declarándolo de esta manera.
El código esta más que entendible, primero se especifica las coordenadas y dimensiones del textField, opcionalmente se da formato a la tipografía del textField mediante el bloque <textElement> por último la parte más importante, la expresión que contendrá el textField <textFieldExpression>, es importante mencionar que se debe especificar la clase que contendrá esta expresión, en este caso es un String, dentro de CDATA se puede concatenar inclusive varios parámetros, en este caso solo estamos poniendo el parámetro P_INSTITUCION.
Una cosa mas que conviene mencionar es que para poder acceder a los parámetros se hace mediante $P{NOMBRE_DEL_PARAMETRO} dende se sustituye el nombre del parámetro que se quiera accesar.
Es el turno de hacer una línea, es muy sencillo, simplemente hacemos lo siguiente.
Aquí solo se declara la linea mediante la etiqueta <line> luego le especificamos las coordenadas y dimensiones donde estará posicionada.
Para los otros dos parámetros se hace exactamente igual que el anterior, con la diferencia que se le cambian las coordenadas, dimensiones, formato de letra y pasarle el parámetro correcto.
Al final el jrxml debe quedar algo asi:
Una vez diseñado el reporte se necesita compilar y generar el archivo jasper, luego se le pasan los parámetros y se exporta al formato deseado, en este caso se exportara a PDF.
El código necesario para realizar lo anterior es muy sencillo, es el siguiente.
Si te has dado cuenta, en el punto numero dos, se ha creado un HashMap, donde como llave contiene el nombre del parámetro, esto es muy importante, especificarle correctamente el nombre, de lo contrario no sucederá nada.
Pues bien, esto ha sido todo por hoy, creo que con esto queda claro como pasar parámetros a un reporte.
Hola Crysfel, te felicito por esta pagina dedicada a jasper r. Para los que recien se inician en este mundillo ,como yo,del jasp.rep, viene muy bien. A ver cuando continuas con tu articulo, o si alguien pudiese hacerlo , para sacar el listado con mas filas, por ejemplo ,como leer los alumnos de una carrera especifica. Gracias
Hola, esta muy bien definido lo mencionado en tu blog. Pero tengo una duda la cual me gustaria que me ayudaras a resolver quisiera enviar una consulta que lea ciertos datos de una tabla enviandola desde una aplicacion Swing (uso netbeans). Has desarrollado algo similar si pudieras contestarme pronto te lo agradeceria.
Felicidades, justamente esto es lo que habia estado buscando y no encontraba, muchas gracias eres de los pocos, que además de saber de lo que hablan tambien saben escribir correctamente y expresar lo que quieren decir, Felicidades y de nuevo Gracias
Gracias por compartir lo que sabes, justamente estaba buscando lo que tu publicaste, y estoy tratando de aplicarlo a una aplicación web desarrollada con el Visual Web Pack (netbeans). Gracias de nuevo Saludos!!
Hola Crysfel!!!
Gracias por compartir tu conocimiento. Pero dime, ¿sabes de una forma para enviar como parametros un objeto? Me explico. En lugar de enviar, como en tu ejemplo los datos de la institucion uno a uno, enviarlos en una clase donde vayan incluidos todos.
@Sergio
Hola, sobre lo que preguntas de pasar parametros como una clase no es posible en Jasper Report, pues la única forma de pasar parámetros es mediante el Map, lo que si puedes pasar en clases es la información del reporte o datasource, para esto último he hecho un tutorial.
Saludos
Hola!!!! por mas y mas que trato de entender como jalarlo no puedo echarlo andar!!!
ya generamos nuestro reporte en el ireport ahi se ve bien desde la pc pero no se ocmo jalarlo … lo quiero meter a un linux, mysql … ya instale segun yo el jdk y jre … pero no se como se compila o como lo llamo desde el web para que funcion… me meto http://midireccion/mireporte.jrxml y solo me lo muestra en la pantalla .. o que tengo que hacer??? o donde puedo encontrar algo paso a paso>??
gracias por tu apoyo .. no que si andaba bien perdido con mi post anterior jeje
Gracias por el articulo me ha servido bastante pues estoy comenzando a trabajar con el ireport.
Saludos,
Ramiro
Muchisimas gracias por el tema me ha ayudado bastante como principiante
Muy buena pagin, no hay mucha documentacion en internet hasta q encontre este y muy bueno. Yo recien emoeze a investigar sobre jasper report y entendi gracias a este post. y ya pude hacer mis reportes con los ejemplo q hay aqui.
Muchas gracias! más gente como tú es lo que hace falta ![]()
como le envio los parametros desde una base de datos de mysql en netbeans
Colle de Verdad que para las personas que se estan iniciando en el mundo de jasper es bastante util los tutoriales que haz colocado en la pagina solo he realizado el de introduccion y este de parametros y funcionan al tiro, de verdad muchas gracias y seguire apoyando para que coloques nuevos tutoriales.
Desde Venezuela Bless…
Hola quisiera saber si se puede en Ireport pasar una query como parametro usando PHP.
Para usar PHP yo uso JAVA/Brige
Alguna idea por favor????
@Lemay
Hay una solución para generar PDFs en PHP, te recomiendo darle un vistaso.
saludos
Gracias Crysfel ya resolvi, el problema era pasarle en el report query del ireport $P!{parametro} y luego desde php se definela consulta.
ejem:
$query = select .. from
y luego se le pasa como parametro:
$parameter = new java(”java.util.HashMap”);
$parameter->put(”parametro”,$query);
Hola alguien sabe como funciona la clase JasperDesign,el problema es que necesito modificar el diseño(jrxml) en tiempo de ejecución y me dijeron que el JasperDesign tiene metodos para eso ,ya vi las características de los métodos pero no me funciona no me deja compilar el .jrxml cuando modifico el diseño desde codigo???
Por favor si me pueden ayudar me sería de mucha utilidad…
Que me dices CRYSFEL has trabajado con esto….ayuda
@Lemay
No, la verdad es que no he trabajado con JasperDesign :s
saludos y suerte
MUY BUENO EL ARTICULO
Hola, se genera el siguiente error:
Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester
at net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:89)
at JasperReport2.main(JasperReport2.java:20)
dfg