Observatorio de Grails 
  • Inicio
  • Actualidad
  • Artículos
  • Tutoriales
  • Eventos
  • Foro
  • Acerca de
Acceso a la ejecución de un flujo de navegación desde fuera de WebFlow Cuidado con los mapas y la caché de 2º nivel en las clases del dominio
may 11

Informes con JasperReports, iReport y el plugin Jasper

publicado por Enrique Medina Montenegro

37 comentarios
12.064 visitas
(30 votos, media: 5,00)

Enrique Medina Montenegro

Twitter |  LinkedIn

Con más de 14 años de experiencia en el mundo de las TI, donde comenzó desarrollando aplicaciones de escritorio en Delphi o Visual Basic, este Ingeniero en Informática por la Universidad de Alicante (1991-1996) ha ido perfilando su actividad profesional hacia las arquitecturas J2EE, donde siempre ha seguido muy atento, e incluso colaborado en ocasiones, con proyectos open-source como MyFaces, Spring, Hibernate, Groovy o Grails. Ocupando puestos desde Programador Junior hasta Arquitecto Senior de Soluciones, Enrique ha sido testigo de cómo ha ido evolucionando la tecnología en torno al desarrollo de aplicaciones web, adquiriendo un conocimiento y experiencia que le permiten evaluar con detalle las necesidades de cada proyecto y aplicar las herramientas que maximizan su productividad. Actualmente, Enrique se ha especializado en el framework de desarrollo Grails, y ejerce la Dirección Técnica de proyectos basados, entre otras, en esta tecnología.

En uno de los proyectos que estamos desarrollando el equipo del Observatorio, como en muchos de los proyectos ahí fuera, necesitábamos generar una serie de informes en PDF para el usuario. Echando un rápido vistazo a la oferta de plugins de Grails, nos encontramos con 3 posibles candidatos (a nuestro entender, para nuestras necesidades):

  • Jasper Plugin – http://grails.org/plugin/jasper
  • DynamicJasper Plugin – http://grails.org/plugin/dynamic-jasper
  • Export Plugin – http://grails.org/plugin/export

Tanto DynamicJasper como Export son plugins orientados a hacer un volcado, más o menos formateado, de las instancias de cualquiera de las clases de nuestro dominio, lo cual es de extrema utilidad cuando queremos hacer el típico volcado del listado de pantalla a un PDF. Sin embargo, en nuestro caso lo que estábamos buscando era algo más ‘profesional’, donde poder definir cabeceras, grupos, detalle, sub-detalle, etc.; en definitiva, una herramienta de creación de informes al estilo BIRT. Y como ya habréis adivinado, nuestra elección debía ser el plugin Jasper.

El Jasper Plugin básicamente integra la librería JasperReports en nuestra aplicación Grails; pero hay que ser un poco críticos en este punto y decir que la gestión de las versiones que realiza es bastante pobre, por no decir inútil, ya que, como os vamos a explicar en este artículo, hay que actualizarlas a mano en la mayoría de los casos (y si no, buscad por Google y los foros/listas de Grails los problemas que tiene la gente tratando de usar el plugin tal y como viene por defecto). Empecemos entonces por instalar el plugin de la forma ya conocida:

	grails install-plugin jasper

NOTA: Para este artículo hemos utilizado la versión 1.2.2 de Grails, pero los mismos pasos y conceptos se aplican para cualquier 1.2.x y las futuras 1.3.x.

Una vez instalado, échemos un vistazo al propio plugin y los ficheros y librerías que lo componen. En nuestro caso, como usuarios de Mac, la ruta donde buscar el plugin sería ‘~/.grails/1.2.2/projects/<NOMBRE_DE_NUESTRO_PROYECTO>/plugins/jasper-0.9.7/‘. Dentro de esta carpeta, veremos un directorio llamado ‘lib‘ y, a la vez dentro de este último, una serie de librerías JAR correspondientes a iText, JasperReports, JFreeChart y Apache POI (y algunas otras de utilidad general). Lamentablemente, las versiones distribuidas con el plugin no siempre son las correctas, sobre todo si queremos utilizar alguna herramienta externa para el diseño de nuestros informes, como es el caso de iReport. Veamos, pues, cómo configurar correctamente el plugin para utilizar la última versión disponible de iReport al momento de escribir este artículo: la 3.7.2.

NOTA: No confundir iReport con JasperReports. El primero es una herramienta Java (un IDE) que permite diseñar y crear informes compatibles con JasperReports, mientras que el último es la API que nos permite generar, entre otros, ficheros PDF a partir de definiciones de informes, que pueden haber sido creados con iReport, por ejemplo (o a mano si nos gusta escribir mucho XML).

Si nos bajamos la versión 3.7.2 de iReport para nuestro sistema, debemos comprobar que las versiones de las librerías mencionadas anteriormente para el plugin Jasper coinciden con las que el propio iReport utiliza, lo cual como os comentábamos al comienzo del artículo, nunca suele ser la regla, sino más bien la excepción. En cualquier caso, aquí os explicamos cómo asegurarnos de que las versiones de las librerías no nos van a dar quebraderos de cabeza, mediante los siguientes pasos y comprobaciones:

  1. Localiza las versiones de las librerías distribuidas con iReport -> De nuevo, en el caso de Mac, las podemos encontrar en la siguiente ruta: /Applications/iReport.app/Contents/Resources/ireport/ireport/modules/ext/
  2. Copia los siguientes ficheros JAR, independientemente de su versión (digamos que iReport es el que manda en cuestión de versiones aquí) –> iText-x.y.z-LICENSE.txt, iText-x.y.z.jar, jasperreports-x.y.z.jar, jasperreports-LICENSE.txt, jfreechart-x.y.z-LICENSE.txt, jfreechart-x.y.z.jar, poi-x.y-FINAL-yyyymmdd-LICENSE.txt, poi-x.y-FINAL-yyyymmdd-NOTICE.txt y poi-x.y-FINAL-yyyymmdd.jar
  3. Elimina todas las librerías coincidentes con el paso 2 en la carpeta del plugin Jasper (sin preocuparse de qué versión son), que como hemos indicado más arriba, sería (para Mac) –> ~/.grails/1.2.2/projects/<NOMBRE_DE_NUESTRO_PROYECTO>/plugins/jasper-0.9.7/lib/
  4. Pega los ficheros copiados en el paso 3 en la carpeta del plugin Jasper (para Mac) –> ~/.grails/1.2.2/projects/<NOMBRE_DE_NUESTRO_PROYECTO>/plugins/jasper-0.9.7/lib/

Ahora que ya tenemos configurado correctamente el plugin para trabajar con los informes creados en iReport 3.7.2, nuestro siguiente paso debería ser comenzar a diseñar nuestros informes. Sin embargo, debemos comprender algunos aspectos importantes de la forma en que el plugin Jasper integra la librería JasperReports en nuestra aplicación Grails para poder usarlo correctamente. Y es que al diseñar un informe con iReport, una pieza fundamental de configuración es indicarle el DataSource a usar, de forma que pueda consumir la información para la generación futura del informe, por lo que necesitamos, lo primero de todo, entender cómo gestiona esta fuente de datos nuestro plugin.

Al instalar el plugin Jasper, éste nos proporciona entre otros ficheros, un controlador y un servicio, denominados JasperController y JasperService, respectivamente. El controlador es el encargado de comprobar la ruta donde está definidos los informes .jasper (más detalle sobre .jrxml y .jasper en el Apéndice A), el tipo de informe a generar y si los datos a utilizar son del tipo ‘java.util.Collection‘ o no (a pesar de que la documentación del plugin claramente indica que se puede utilizar un mapa, pero no es posible). Una vez realizadas las comprobaciones, delega en la lógica de negocio definida en el servicio que, según el tipo de informe, invoca a la API de JasperReports, genera el informe y lo devuelve como un ‘java.io.ByteArrayOutputStream‘. Nada maravilloso aquí, ¿verdad? Pero, volviendo al tema del DataSource, ¿cómo se las arregla el plugin para proporcionar dicha fuente de datos a JasperReports? El truco está en que usa internamente un ‘net.sf.jasperreports.engine.data.JRBeanCollectionDataSource‘, que se alimenta de la colección de datos que le pasamos cómo modelo al controlador JasperController. Veamos un ejemplo:

def informe = {
	def listaDatos = // obtener la colección de datos que alimentarán al informe.

	chain(controller: "jasper", action: "index", model: [data: listaDatos], params: params)
}

Si analizamos el código de arriba, vemos la definición de una acción dentro de un controlador (este controlador pertenece a nuestra aplicación y es necesario para llamar al plugin para que genere el informe): informe. Dentro de esta acción, calculamos la colección de datos que será necesaria para alimentar al informe y, al final de la acción, encadenamos nuestra acción con una nueva acción: index dentro del controlador proporcionado por el plugin, pasándole la colección de datos y también los posibles parámetros (más sobre parámetros en un futuro artículo sobre sub-informes). Cuando el controlador del plugin recibe la petición, automáticamente invoca al servicio, como se ha explicado con anterioridad, generando el informe y mostrándolo por pantalla (en realidad, dependiendo del navegador, puede que lo guarde como un fichero y lo abra con la aplicación correspondiente, como Acrobat Reader).

Aunque aquí os aconsejamos utilizar una colección de datos como entrada a la fuente de datos del informe, es también posible no indicar dicha colección, en cuyo caso el servicio JasperService utilizará automáticamente el ‘dataSource‘ definido en nuestra aplicación (recordad, en /grails-app/conf/DataSource.groovy), obteniendo del mismo una conexión que pasará directamente al informe. Sin embargo, en nuestra modesta opinión y en la mayoría de los casos, esta última estrategia de fuente de datos no será la más adecuada, ya que nos obligará a definir todas las sentencias SQL necesarias para obtener los datos directamente en la definición del informe, lo cual resulta algo absurdo cuando tenemos todos los datos a nuestra disposición en el controlador, ¿no? Además, y todavía más importante, al desarrollar en Grails nos olvidamos bastante del SQL y, sobre todo, de la estructura de las tablas en base de datos, ya que trabajamos a nivel de objetos, por lo que tener que definir sentencias SQL que sólo son necesarias para obtener los datos del informe se nos antoja, definitivamente, una pérdida de nuestro preciado tiempo.

NOTA: Al pasar una colección de objetos a la acción encadenada del plugin Jasper hay que tener muy en cuenta la forma en que hemos mapeado las asociaciones de nuestros objetos, ya que una vez la colección se ha pasado a JasperReports, ya no existe ninguna sesión de Hibernate, con los consiguientes problemas de LazyInitializationException que todos hemos sufrido alguna vez en la vida. Para asegurarnos que no nos vamos a encontrar con estos problemas, entre otras razones porque Grails mapea las asociaciones entre objetos de forma perezosa (lazy) por defecto, lo mejor es materializar el objeto de forma completa, y para ello un truco muy sencillo es utilizar el método dinámico ‘findById‘ de la siguiente forma:

	// Forzamos la recuperación de la información sin carga perezosa.
	def objetoMaterializado = MiClase.findById(id, [fetch: [asociacion1: 'eager', asociacion2: 'eager']], [cache:true])

También podríamos conseguir el mismo objetivo con Criteria o con HQL, de forma muy similar, pero creemos que con el método dinámico es mucho más sencillo y simple de entender.

Volviendo, pues, a los pasos necesarios para generar nuestros informes, y una vez que hemos configurado nuestra acción en nuestro controlador para que encadene con la acción del controlador del plugin Jasper, ahora necesitaremos generar el enlace desde nuestra pantalla GSP a esta primera acción de nuestro controlador. Para ello, el plugin nos ofrece una pequeña librería de etiquetas (JasperTagLib) donde podemos utilizar la siguiente:

Esta etiqueta nos generará un enlace a nuestra acción dentro de nuestro controlador, pintando, además, un pequeño icono correspondiente al formato indicado, en este caso PDF, como se muestra en este ejemplo:

Ejemplo de icono PDF

Y ya estamos concluyendo este artículo. Ahora, como paso final, sólo nos queda conocer cómo debemos definir cada uno de los campos en el informe para que JasperReports sea capaz de interpretar los datos y aplicarlos correctamente. Como estamos haciendo la suposición en todo momento de que usamos iReport, simplemente desde el IDE creamos un nuevo ‘Field‘ y, esto es muy importante, lo llamamos exactamente igual que el campo definido en la clase del dominio que corresponde a cada uno de los objetos pasados en nuestra colección como fuente de datos. Por ejemplo, si tenemos una clase del dominio como esta:

	class MiClase {
		String nombre
		String apellidos
		Date fechaNacimiento
	}

y le pasamos una colección de objetos del tipo ‘MiClase’ al informe, entonces este último debe tener definidos los siguientes ‘Fields’ (los indicamos directamente en XML para su mayor compresión):

Nótese que utilizamos exactamente el mismo nombre y el mismo tipo que en la propia definición de la clase del dominio. Esto es de vital importancia, ya que si no coinciden a la exactitud (también en mayúsculas y minúsculas), no os funcionará nada.

Y ya tenemos nuestro informe listo para trabajar. No ha sido un camino de rosas desde luego, pero una vez hemos creado el primer informe, el resto son coser y cantar o, al menos, trabajo puro y duro de diseño con nuestro IDE en iReport.

Si os ha gustado este artículo, no os perdáis el nuevo que estamos preparando sobre sub-informes. Y como siempre os decimos, por favor dejad vuestros comentarios y experiencias al aplicar en vuestro desarrollos los artículos aquí explicados. Nos encanta saber que la información que compartimos para todos vosotros realmente es de utilidad.

APÉNDICE A: .jrxml es la extensión de los ficheros de texto XML de definición de informes según la especificación de JasperReports, mientras que .jasper es la extensión de los ficheros binarios ya compilados por JasperReports, que son los que realmente se “ejecutan” al generar el informe.

Del.icio.us Facebook LinkedIn Twitter

  1. josem
    16/05/2010 a las 23:52

    Muy buen artículo, muy claramente explicado todo. Yo había probado el plugin export pero precisamente tenía el problema que comentáis, que es muy simple. Lo guardo en los marcadores de Google para cuando llegue a la fase de informes en mi aplicación con Grails. Muchas gracias y esperando el siguiente artículo.
    Saludos

  2. Gabriel
    19/08/2010 a las 17:45

    Muy util sobre todo la parte de las librerias de IReport
    , nos confomabamos con usar la version compatible, ahora sabemos como usar la version que queremos. Muchas Gracias
    te comentoq ue estamos teniedo problemas para migrar de 1.1.2 a 1.3.4 con el plugin de Jasper (bajando la ultima version claro)
    Saludos

  3. Enrique Medina Montenegro
    20/08/2010 a las 17:45

    Gabriel,

    Hace poco publicábamos un artículo donde un desarrollador se “peleaba” con la migración de 1.2.1 a 1.3.4:

    http://observatoriodegrails.com/2010/08/12/migrando-un-projecto-de-1-2-1-a-1-3-4-ingles/

    En cualquier caso, cualquier migración de una versión anterior a 1.3.x es complicada, ya que esta versión introdujo algunos cambios de arquitectura sobre todo en los plugins.

    Nosotros por ejemplo, tenemos nuestra aplicación en 1.2.1 y no pensamos migrarla mientras no sea crítico, porque sabemos no sólo de la complejidad de esta tarea, sino además de algunos ‘bugs’ que se introducirían como consecuencia de dicha migración.

    Eso sí, sería estupendo si pudieras compartir con los amigos del Observatorio tu experiencia en la migración en forma de algún blog o incluso como un artículo que podemos publicarte en la sección de Artículos, si te apetece ;-)

    Un saludo.

  4. Eric Gómez
    13/09/2010 a las 03:44

    Hola Enrique,

    Donde puedo descargar la versión 0.9.7 del plugin de jasper?. Actualmente estoy trabajando con la versión 1.2.2 de grails y cuando trato de instalar el plugin me genera un error indicándome que el plugin solo es compatible con versiones de grails superiores al 1.3.4. La versión que se trata de instalar con el comando “install-plugin jasper” es jasper-1.1.3

    Gracias.

  5. Enrique Medina Montenegro
    13/09/2010 a las 10:05

    ¿Has probado a hacer un “install-plugin jasper 0.9.7″?

  6. Eric Gómez
    15/09/2010 a las 06:47

    Gracias Enrique, ya lo solucionar el inconveniente que tenia, descargué la versión 0.8 del repositorio de plugins de grails.

  7. Dorian
    07/10/2010 a las 20:31

    Hola:
    Me parece muy claro lo que expones estoy haciendo unas pruebas, y tengo el problema de que cuando muestro el reporte me lo saca en blanco sabrás el por que?.

    Gracias

  8. Enrique Medina Montenegro
    08/10/2010 a las 12:47

    Si te lo saca en blanco es porque no le llegan datos…

    En la propia definición del informe tienes la posibilidad de indicar qué debe hacer cuando no llegan datos, como por ejemplo imprimir de todas formas la cabecera (si la hay), el pie (si lo hay), etc. Pero el problema sigue estando en que no le llegan datos. Repasa esa parte del proceso.

  9. Enrique Medina Montenegro
    08/10/2010 a las 12:48

    Si no consigues hacerlo funcionar, utiliza nuestro foro para obtener ayuda :-)

  10. Dorian
    08/10/2010 a las 22:32

    Gracias, el problema si era lo que mencionabas.

  11. Enrique Medina Montenegro
    09/10/2010 a las 10:40

    ;-)

  12. josem
    14/10/2010 a las 12:51

    Hola, no sabía si pregutnar esto aquí o en el foro. Lo hago aquí para que quede dentro del artículo.
    Estoy usando Grails 1.3.4, me he bajado la última versión de ireport que es la 3.7.5 y al instalar el plugin jasper para grails la versión es 1.1.5.
    He localizado las librerias de ireport pero tengo el problema de que en la ruta del plugin de jasper no está la librería lib! entonces no sé como puedo remplazar las librerías.

    Algun consejo?

  13. josem
    14/10/2010 a las 14:08

    Hola de nuevo.
    Informar que he instalado:
    -Ireport 3.7.5
    -Plugin jasper 1.1.3 (el último)
    en mi aplicaicón 1.3.5

    Y todo ha funcionado a la primera, no he tenido que cambiar ninguna librería :) .

    Ahora si abriré un post en el foro para otra serie de dudas.

    Gracias por vuestro trabajo chicos !

  14. jrodri
    22/12/2010 a las 22:23

    Hola

    Estoy usando Jasperreport, ireport y el plugin de jasper

    He podido generar reportes en xls,pdf y xml

    Pero tengo un problema con el formato de las celdas en Excel cuando genero el reporte xls…en ireport tengo definido el campo de detalle de un crosstab como double y con un pattern = #,##0.00

    En excel los dato se muestran bien pero me muestra un cometario q dice “el numero de esta celda tiene formato de texto o va precedido por un apostrofo”…el problemas es q al tratar de hacer un SUM en excel este no lo hace por que la celda esta con formato de string

    Si alguien me pude ayudar se lo agradecere

    Gracias

    Jaime

  15. Enrique Medina Montenegro
    23/12/2010 a las 09:43

    Hola jrodri,

    El mejor lugar para solicitar ayuda es nuestro foro, ya que en los comentarios tu pregunta pueda pasar desapercibida.

    Un saludo.

  16. jrodri
    23/12/2010 a las 16:30

    Gracias ya publique el caso en el foro

    Un saludo

  17. rebeca
    14/01/2011 a las 14:33

    Llevo varios dias trabajando con ireport y jasper report. He avanzado bastante y genero informes con relaciones de tablas complejas pero únicamente a primer nivel. Es decir, si tengo las tablas: localidades,provincias y paises (es un ejemplo). Localidades relacionadas con provincias, y provincias con paises mando al jasper un listado de localidades y le obligo a que no haga carga perezosa de provincias de la forma:
    def reportDetails = Localidades.list([fetch:[provincias: 'join']])
    chain(controller: “jasper”, action: “index”, model: [data: reportDetails], params:params)

    mi problema es como le fuerzo a cargar los datos en el jasper de paises?
    El ejemplo que he puesto no es el real es bastante complejo. No me sirve enviar un listado de provincias y hacer join con localidades y paises. Necesito forzar la carga de datos a segundo nivel de una relación.

    Gracias por leerme y os agradecería cualquier ayuda.

  18. Enrique Medina Montenegro
    14/01/2011 a las 14:50

    Rebeca,

    Para ello debes utilizar SUBREPORTS. En Google puedes encontrar algunos ejemplos e información sobre cómo trabajar con SUBREPORTS en Jasper.

    Si encuentro algo de tiempo escribiré un nuevo artículo con relaciones 1:M, pero no esperes nada a corto plazo porque mis compromisos profesionales me tienen absorvido de momento.

    Un saludo.

  19. rebeca
    17/01/2011 a las 12:28

    Hola y gracias. Estoy manejando un par de manuales y parece que algo avanzo. El problema que se me presenta es que necesito pasarle la conexión a la base de datos desde mi clase de groovy. Se que desde iReport la tengo que recoger en el parametro REPORT_CONNECTION pero no se como enviarla.

    Mil gracias por su ayuda

  20. Enrique Medina Montenegro
    17/01/2011 a las 12:39

    rebeca,

    ¿Puedes añadir este hilo de discusión al foro? En cuanto lo hagas deja aquí un comentario y trataré de darte algunas pistas más directamente en el foro.

    Un saludo.

  21. rebeca
    17/01/2011 a las 13:23

    Hola!

    Ya he publicado en el foro mi problema. Si pudieras ayudarme de alguna manera te lo agradecería

    Un saludo

  22. sinqenta
    14/04/2011 a las 19:17

    Estoy experimentando con informes generados con iReport 4.0.1 y NetBeans 6.9.1 para visualizarlos. Al parecer estoy omitiendo algo, en el momento de ejecución me sale el siguiente error

    log4j:WARN No appenders could be found for logger (net.sf.jasperreports.extensions.ExtensionsEnvironment).
    log4j:WARN Please initialize the log4j system properly.

    Le agradecería me encamine para solucionar el problema

  23. Enrique Medina Montenegro
    15/04/2011 a las 08:24

    Hola sinqenta,

    Utiliza nuestro foro para este tipo de dudas o para pedir ayuda.

    Gracias y un saludo.

  24. jeza
    05/05/2011 a las 22:42

    Hola

    Duda… Mi base esta en sql Server, pero a la hora de escribir mi store en el report Query me manda un error, porque no reconoce un insert, truncate. Solo ejecuta select, todos los ejemplos que veo de consultas solo son select. ¿Funciona solo con select?

    Le agradeceria su ayuda.

    Saludos

  25. Enrique Medina Montenegro
    06/05/2011 a las 10:07

    Hola jeza,

    Por favor, publica tus dudas y preguntas directamente en el Foro para que tengan mayor visibilidad y así puedan ayudarte más personas.

    Un saludo.

  26. VictorHugo
    08/09/2011 a las 01:09

    Hola, tengo una duda quiero saber si es posible generar un reporte obteniendo los datos de un formulario que el usuario llena, es decir desde una GSP. la verdad soy superPrincipiante en este tema tengo el 2.7.1 del spring source y la version del jasper 1.2.1 y ademas la version que aqui citas del iReport. ojala me puedieras proporcionar algun ejemplo

    Tambien tengo el problema que no encuentro las lib de ninguno de los dos, es decir ni del iReport ni del Plugin. trabajo en ambiente Windows especificamente en el Vista. espero puedan ayudarme.

    Muchas gracias.

  27. Enrique Medina Montenegro
    08/09/2011 a las 08:35

    Hola VictorHugo,

    Por favor, publica tus dudas y preguntas directamente en el Foro para que tengan mayor visibilidad y así puedan ayudarte más personas.

    Un saludo.

  28. VictorHugo
    08/09/2011 a las 14:17

    Ok, Muy Bien!

  29. GerardoReyes
    08/09/2011 a las 17:56

    Hola… yo tengo el siguiente problema en un proyecto web dynamic
    diseñe en ireport el .jrxml, hice la actualizacion de las librerias al plugin…
    no se si estoy haciendo lo correcto, solo quiero exportar a pdf el .jrxml y mostrarlo, de principio
    //parte del codigo
    JasperExportManager.exportReportToPdfFile(“ruta_mi_reporte.jrxml”,”destino.pdf”);
    //para lanzar el reporte
    JasperViewer.viewReport(“ruta_mi_reporte.jrxml”, true);

    salida CONSOLA:
    Exception in thread “main” net.sf.jasperreports.engine.JRException: Error loading object from file : <<>>\miREPORTE.jrxml
    at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:101)
    at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:73)
    at net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfFile(JasperExportManager.java:97)
    at reportes.Reportero.main(Reportero.java:80)
    Caused by: java.io.StreamCorruptedException: invalid stream header: 3C3F786D
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
    at java.io.ObjectInputStream.(Unknown Source)
    at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.(ContextClassLoaderObjectInputStream.java:53)
    at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:96)
    … 3 more

    ojala puedan ayudar!!!!

  30. Enrique Medina Montenegro
    09/09/2011 a las 08:59

    Hola GerardoReyes,

    Por favor, publica tus dudas y preguntas directamente en el Foro para que tengan mayor visibilidad y así puedan ayudarte más personas.

    Un saludo.

  31. Pedro
    11/10/2011 a las 14:56

    Hola Enrique, he colgado una pregunta referente en el foro (en el apartado de plugins) sobre jasper y el echo de si sería muy dificil parsear una gráfica (hecha con el api de google chart) a un documento pdf. Gracias por la entrada, es muy buena.

  32. Guillermo
    16/11/2011 a las 12:20

    Tengo una aplicacion en Netbeans y genero reportes con iReoprt, en el ide todo fuciona bien pero desde el .jar no me ejecuta los reportes..por que puede ser?
    Saludos

  33. Jose
    24/11/2011 a las 22:27

    Primeramente saludarles y a lvez hacerte una consulta hacer el de generar reportes con jasperreport y ireport netbeans java específicamente,
    estoy haciendo todos los reportes sale magníficamente, el problema surge cuando le mando las impresiones a una impresora matricial sale todo distorsionado, el diseñador ireport 4.1.1 no aparecen las fuentes para impresoras matriciales, no se si algún componente, plugin adicional, algo mas que hacer agradecería bastante su ayuda, de antemano agradecerles por sus respuestas..

  34. Javier Henríquez
    12/01/2012 a las 17:27

    Hola Enrique, saludos, estoy trabajando con el Jasper 4.1.3 y el netbeans 7.0.1.
    EN mi configuración regional tengo que los números se muestren de la siguiente manera 1,234.56

    El problema que tengo es que diseño un reporte que tiene una columna con un valor real al cual le he dado formato, y cuando doy la vista previa desde el jasper lo muestra de la manera correcta y cuando lo exporta a excel todo funciona bien, pero cuando lo implemento desde el netbeans en la vista previa lo muestra bien pero en el excel me lo guarda como 1.234,56 y por lo tanto lo reconoce como texto, no se si me puedas ayudar con esto. Gracias de antemano.

  35. Andres F
    19/01/2012 a las 17:19

    Hola muchachos, mi pregunta es simple… es totalmente necesario que la clase que se hace para llenarla de datos y finalmente mandar un array de objetos al report tenga datos primitivos osea no puede encapsular otra clase por decirlo asi y sacarla en el reporte… algo como en el parametro de ireport.
    Un ejemplo con el field en el ireport seria $F{persona.direccion.calle}
    Gracias!

  36. Enrique Medina Montenegro
    20/01/2012 a las 09:58

    Andres F,

    Desde luego que se puede, siempre que dichos campos sean accesibles según las “reglas” de un JavaBean. Si tienes algún comentario de ayuda más específico, te rogamos utilices el foro para que sea visible a un mayor número de personas.

    Un saludo.

  37. Eduardo
    03/02/2012 a las 17:56

    Hola alguien me podria ayudar con una cuestion de reportes pero que sean de forma dinamica..Osea que quiero generar un reporte desde una aplicacion swim de java (Netbeans). Ya genere mi archivo pdf con ireport con datos de una BD pero quiero generarlos desde la aplicacion ingresando algun dato y que exporte ese dato al archivo de ireport.
    No se si me explique. Agradeceria sus ayudas.

Escribir un comentario

Clic para cancelar respuesta.

Actualidad  Entradas relacionadas  si te ha interesado la entrada te proponemos otras lecturas relacionadas

  • ago09

    Nueva liberación del plugin Jasper: Jasper 1.1.0 (inglés)

    publicado por Enrique Medina Montenegro en Plugins

    0 comentarios
    397 visitas
    (4 votos, media: 3,75)
  • mar15

    ¿Problemas compilando sub-informes con Jasper? (inglés)

    publicado por Enrique Medina Montenegro en Grails

    0 comentarios
    497 visitas
    (4 votos, media: 3,25)
  • may20

    JasperReports e iReport – La curva de aprendizaje (inglés)

    publicado por Enrique Medina Montenegro en Grails

    0 comentarios
    605 visitas
    (3 votos, media: 4,00)

Comentarios recientes  Comentarios recientes

  • Eduardo Hola alguien me podria ayudar con una cuestion de reportes pero que sean de forma dinamica..Osea que quiero generar un reporte desde una...; en Informes con JasperReports, iReport y el plugin Jasper
    03/02/2012 a las 17:56

  • Enrique Medina Montenegro Lorena, Utiliza nuestro foro para plantear este tipo de dudas o preguntas, ya que tiene mayor visibilidad y...; en Exprimiendo el belongsTo con múltiples relaciones bidireccionales
    25/01/2012 a las 17:37

  • Lorena Castro Hola, tengo un problema al estaablecer la siguiente relación: SedeUniv tiene varios Turnos un Turno se puede asociar a...; en Exprimiendo el belongsTo con múltiples relaciones bidireccionales
    25/01/2012 a las 17:17

Twitter  

preload preload preload

Síguenos en Twitter  |  Facebook
Inicio  |  Actualidad  |  Artículos  |  Tutoriales  |  Eventos  |  Foro  |  Acerca de

© 2010 Observatorio de Grails. Todos los derechos reservados.