Lanzando informes jasperreports “pdf / xls” desde un servlet

Amiguetes, por aquí seguimos probando y reprobando informes jasperreports. Hoy dejaré un par de apuntes de código que muestran como generar el informe final en pdf o xls teniendo ya el informe diseñado en un fichero .jasper, yo lo he hecho con el ireport, ¿alguien se atreve a hacerlo a mano?, por cierto, y ahora que nadie nos ve, habéis oído hablar de jarvis?, intentaré seguirlo de cerca, parece un plugín para generar informes jasperreport gráficamente en netbeans, pero todavía esta en betas. No me enrollo mas vamos al meollo:

A un informe jasper podremos pasarle tantos parametros como necesitemos para ello debemos crear un Hastable para luego pasarlo como parámetro en la generación del informe: [java]
Map parameters = new HashMap ();
//A nuestro informe de prueba le vamos a enviar la fecha de hoy
parameters.put (“fechainicio”, new Date() );
[/java]

Para exportar a formato pdf:
[java]
ServletOutputStream out;
// Creamos un objecto jasper con el fichero previamente compilado
JasperReport jasperReport = (JasperReport)JRLoader.loadObject (“/javi/InformeDemo.jasper”);

// Generamos el informe pasandole como parametros el objecto creado anteriormente jasperReport, parameters que es el hashmap
// creado anteriormente con todos los parametros que necesitemos enviarle al informe y conn una conexión activa con vuestro
// servidor de BD
byte[] fichero = JasperRunManager.runReportToPdf (jasperReport, parameters, conn);

// Y enviamos el pdf a la salida del navegador como podríamos hacer con cualquier otro pdf
response.setContentType (“application/pdf”);
response.setHeader (“Content-disposition”, “inline; filename=informeDemo.pdf”);
response.setHeader (“Cache-Control”, “max-age=30″);
response.setHeader (“Pragma”, “No-cache”);
response.setDateHeader (“Expires”, 0);
response.setContentLength (fichero.length);
out = response.getOutputStream ();

out.write (fichero, 0, fichero.length);
out.flush ();
out.close ();
[/java]

Y esta vez probaremos también a generarlo como un xls para excell:
[java]
int bit;
File f;
InputStream in;
ServletOutputStream out;

JasperPrint jasperPrint=JasperFillManager.fillReport (“/javi/InformeDemo.jasper”, parameters, conn);
String xlsFileName = “informeDemo.xls”;

//Creacion del XLS
JRXlsExporter exporter = new JRXlsExporter ();
exporter.setParameter (JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter (JRExporterParameter.OUTPUT_FILE_NAME, xlsFileName);
exporter.setParameter (JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
exporter.exportReport ();

// En este punto ya esta Creado el XLS
// Ahora leemos el fichero y forzamos al navegador a que nos descargue el fichero.
f = new File ( xlsFileName);

response.setContentType (“application/vnd.ms-excel”); //Tipo de fichero.
response.setHeader (“Content-Disposition”, “attachment;filename=\”" + xlsFileName + “\”"); //Configurar cabecera http

in = new FileInputStream (f);
out = response.getOutputStream ();

bit = 256;
while ((bit) >= 0)
{
bit = in.read ();
out.write (bit);
}

out.flush ();
out.close ();
in.close ();
[/java]

Y esto ha sido todo por hoy, todavía me queda mucha estadística que machacar, para la próxima mas!

  • carlos

    buenas, tengo una inquietud

    si tengo una clase que me crea o exporta a pdf y rtf, el objeto response, se lo debo enviar como un parametro del contructor de mi clase, y de que forma puedo especificar la ruta del pdf en mi aplicacion web, al momento de exportar con JRExporter exporter=new JRPdfExporter();

  • http://www.jsanroman.net jsanroman

    Carlos, no entiendo muy bien la primera parte de tu pregunta, si me dejas un ejemplo quizás te pueda ayudar. Sobre lo de especificar la ruta del pdf utilizando el JRPdfExporter lo puedes hacer igual que en el ejemplo que está en este post pero que lo exporta a excell:

    JRExporter exporterpdf = new JRPdfExporter ();
    exporterpdf.setParameter (JRExporterParameter.OUTPUT_FILE_NAME, “nombrefichero.pdf”);
    response.setHeader (“Content-Disposition”, “attachment;filename=nombrefichero.pdf”);

    Simplemente le pasas el nombre de tu fichero pdf como un parametro al JRPdfExporter y luego en el envío de la cabecera http.

  • Miguel

    para la parte de exportar como excel, tambien habría que usar la parte de “JRLoader”?
    gracias

  • http://www.jsanroman.net jsanroman

    Miguel no sería necesario utilizar el JRLoader para exportar un informe a excell, es más la exportación a pdf también la podrías hacer con la clase “JRPdfExporter” de la misma forma que hemos exportado el excell. Lo que si necesitarás para exportar a formato excell son las librerias “apache poi” que podrás descargar desde aquí http://poi.apache.org/trans/es/index.html y que se utilizan para poder crear los ficheros xls.

  • Miguel

    Hola otra vez, gracias por contestar tan rápido. Si no te importa molestaré un poco más. Resulta que me lanza un error referente al :
    “JasperPrint jasperPrint=JasperFillManager.fillReport” en la que me dice que no puede cargar el archivo, que le paso como:
    “reportFile.getPath()”, es decir, la línea queda así:

    JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parametros);

    por eso hacía la pregunta anterior. Sabes a que puede deberse.
    Gracias de antemano, haya o no haya respuesta.

  • http://www.jsanroman.net jsanroman

    Hola Miguel, aquí siempre hay respuesta ;-) aunque a veces sea tardía. Si me dejas mas información quizás pueda ayudarte, por ejemplo la traza del error, de donde sale reportFile, bajo que arquitectura estas generando el informe… La verdad es que por lo que dices todo parece indicar que reportFile no tiene cargado un informe “.jasper”, ¿quizás el error sea en la creación de reportFile?, lo dicho si me pasas mas información te puedo echar una mano.

  • Miguel

    Muchas gracias por responder tan pronto otra vez.Te adjunto el codigo para crear el reporte. Como puedes ver he puesto bastantes logs para seguir el proceso de creacion.
    El archivo jrxml lo he creado con iReport sobre windows XP, como el resto de todo el proceso.
    De nuevo muchas gracias

    ReclamacionesForm tabla = new ReclamacionesForm();
    ServletContext application = getServletContext();
    Log.debug(“estoy exportando a excel 2″);

    //Cargamos la definicion del reporte *.jrxml
    java.io.File reportFile = new java.io.File(application.getRealPath(“/plantillaExcel.jrxml”));
    Log.debug(“ruta del reporte” + reportFile);
    if (!reportFile.exists()) {
    throw new JRRuntimeException(“File WebappReport.jasper not found. The report design must be compiled first.Por favor”);
    }
    Log.debug(“declaramos el HashMap”);
    //cargamos parametros del reporte (si tiene).
    HashMap parametros= new HashMap(200);
    Log.debug(“primeros datos”);

    try{
    Log.debug(“la reclamacion es “+ tabla.getCodigoReclamacion());
    parametros.put(“Referencia”, tabla.getCodigoReclamacion());
    Log.debug(“la fecha de solicitud “+tabla.getFechaSolicitud());
    parametros.put(“Fecha Solicitud”,tabla.getFechaSolicitud());
    Log.debug(“el estado “+tabla.getEstadoConfirmacion());
    parametros.put(“Estado”, tabla.getEstadoConfirmacion());
    Log.debug(“para el codigo de la agencia ” +tabla.getFormCodigoAgencia());

    parametros.put(“Ambito”, tabla.getFormCodigoAgencia());
    Log.debug(“la fecha de la reclamacion “+tabla.getFechaRespuesta());
    parametros.put(“Fecha Reclamacion”,tabla.getFechaRespuesta());
    parametros.put(“Motivo”, tabla.getMotivo());
    Log.debug(“el motivo es “+tabla.getMotivo());
    parametros.put(“Importe”, tabla.getImporte());
    }
    catch(IllegalArgumentException e){
    Log.debug(“la capacidad el map es negativa” + e);
    }
    catch(NullPointerException a){
    Log.debug(“el map es nullo” + a);
    }
    Log.debug(“comenzamos a rellenar el reporte”);
    Log.debug(“la rut del reportFile es “+reportFile.getPath());
    try{
    //El metodo JasperPrint crea un nuevo documento vacio

    JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parametros);

    Log.debug(“damos el nombre del archivo”);
    String xlsFileName = “archivo.xls”;

    //Creacion del XLS
    Log.debug(“creamos el fichero XLS”);
    JRXlsExporter exporter = new JRXlsExporter();
    exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,xlsFileName);
    exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
    exporter.exportReport();

    //Ahora leemos el fichero y forzamos el navegador a que descargue el reporte
    Log.debug(“leemos el fichero y lo rellenamos”);
    File f = new File(xlsFileName);
    response.setContentType(“application/vnd.ms-excel”); //Tipo de fichero
    response.setHeader(“Content-Disposition”,”attachment;filename=\”" + xlsFileName +”\”"); //Configurar cabecera HTTP

    InputStream in = new FileInputStream(f);
    ServletOutputStream outs = response.getOutputStream();
    int bit = 256;

    while ((bit) >= 0) {
    bit = in.read();
    outs.write(bit);
    }
    outs.flush();
    outs.close();
    in.close();

  • Miguel

    Me contesto yo mismo, si no te importa. La clave me la has dado tu mismo al mencionar lo del archivo .jasper. Yo no uso archivo .jasper sino .jrxml, así que indagando por ahí llegue a la solución. Tenía que usar un paso intermedio para que se me cargara este archivo y así poder rellenarlo. Explico los pasos:
    1º Importar una librería mas del JasperReport:
    import net.sf.jasperreports.engine.xml.JRXmlLoader;

    Esta librería nos permitirá trabajar con el archivo .jrxml que no está compilado como el .jasper

    2ºCambiar el codigo de está manera:
    // Cargamos la plantilla
    JasperDesign objJasperDesign = JRXmlLoader.load(reportFile);
    // Compilamos la plantilla
    JasperReport objJasperReport =
    JasperCompileManager.compileReport(objJasperDesign);
    // Poblamos la plantilla
    JasperPrint objJasperPrint =
    JasperFillManager.fillReport(objJasperReport, parametros);

    Como se puede ver es añadir un par de pasos más:
    cargar la plantilla con JRXmlLoader y compilarla con JasperCompileManager
    Muchas gracias por ayudarme y espero que esto sirva de ayuda a más gente

  • http://www.jsanroman.net jsanroman

    Me alegro de que se solucionara y gracias a ti Miguel por dejar aquí la solución al problema, seguro que si que ayudamos a mas gente. Un saludo.

  • Miguel

    Hola de nuevo, llevo varios dias intentando obtener mi reporte excel, y no hay manera, me crea el archivo.xls pero simpre aparece vacio, y no se por qué, los datos los trae bien, y la plantilla del informe la carga bien, alguien sabe que puede pasar?
    Gracias de antemano, esto ya me está volviendo loco

  • Ignatius

    En los parametros del JRXlsExporter puedes indicarle un “OUTPUT_STREAM” de forma que no haria falta escribir en disco el .xls y luego leerlo… algo asi:

    ByteArrayOutputStream byteOutpuStream = new ByteArrayOutputStream();
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, byteOutpuStream);

    ahora tenemos los “bytes” del archivo excel en byteOutpuStream.

  • Godo

    Una consulta, estoy usando el jasper para poder exportar un reporte a PDF, todo bien en ambientes que no estan en “zona segura” o que no trabajan con certificado digital. En el ambiente con certificado digital emite el mensaje de “no se pudo escribir el archivo en la cache”. El servidor esta en Linux y usamos el was. No se si falta alguna configuración o permiso para que se ejecute sin problemas.

    Gracias por sus aportes.

  • http://www.jsanroman.net jsanroman

    Godo lo siento pero nunca he trabajado en un entorno con certificado digital+jasper+was por lo que creo no te voy a ser de gran ayuda. Aún así dime ¿quién te lanza el error, el log del was, el navegador?, ¿solo ocurre con la generación de reportes jasper?, intuyo que no tiene tanto que ver con jasper reports sino con la configuración del was+SO e incluso si el error lo lanza el navegador con la configuración del propio equipo cliente.

  • Godo

    Hola Javi, sobre el problema que te consulte, estuve viendo ogtras formas, y si el problema es con el navegador, especificamente con el Control Cache. Probamos con el Mozila y si funciona y con el Internet Explorer no. Con internet Explorer me sale “El archivo no se puede escribir en la cache”.

    Alguna idea al respecto? porfa si no es mucho pedir me puedes explicar la configuracion de lo siguiente y como funciona y para que su uso?
    #
    response.setContentType (“application/pdf”);
    #
    response.setHeader (“Content-disposition”, “inline; filename=informeDemo.pdf”);
    #
    response.setHeader (“Cache-Control”, “max-age=30″);
    #
    response.setHeader (“Pragma”, “No-cache”);
    #
    response.setDateHeader (“Expires”, 0);

    Saludos
    GODO

  • http://www.jsanroman.net jsanroman

    Hola Godo, con las líneas que comentas lo que haces es preparar las cabeceras http para enviar al navegador.
    Por ejemplo con setContentType le dices que el documento que envías es un pdf, con Content-Disposition indicas el nombre del fichero para la descarga, y con las siguientes líneas configuras la caché, se puede enviar mucha mas información en las cabeceras pero para esto solo nos interesan estas.

    Es verdad que existen varios problemas con la caché en el explorer. Haz una búsqueda en google con xmlhttprequest+cache+ie, los problemas que aparecen deben ser similares al tuyo. Juega con los parámetros de la cache que envías en las cabeceras, prueba por ejemplo esto:

    //Para navegadores modernos:
    response.setHeader(“Cache-control”, “private, no-cache, no-store, must-revalidate, max-age=0″)

    //Para navegadores antiguos:
    response.setHeader(“pragma”, “no-cache”)%>
    response.setHeader(“Expires”, “-1″)

    en lugar de los que yo he puesto en este post.
    Ya me cuentas que tal te fué.

  • Hector

    Ayudita tengo el siguiente codigo para generar un archivo xls pero lo genera en blanco como resulevo este problema

    response.setContentType(“application/xls”);
    response.setHeader(“Content-Disposition”, “inline; filename=\”file.xls\”");
    exporter = new JRXlsExporter();
    exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
    exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);

  • Hector

    Ya lo solucione para que en salgan las imagenes en excel se debe utilizar el API asi:
    response.setContentType(“application/xls”);
    response.setHeader(“Content-Disposition”, “inline; filename=\”Reporte.xls\”");
    exporter = new JExcelApiExporter();
    exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
    exporter.setParameter(JExcelApiExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
    exporter.setParameter(JExcelApiExporterParameter.OUTPUT_STREAM, ouputStream);
    try {
    exporter.exportReport();
    }catch (JRException e){
    e.printStackTrace();
    }

  • Bertha Guerra

    hola buen dia a todos

    Ayuda estoy haciendo unos reportes en java utilizando la libreria itext, mi reporte me lo genera en pdf pero
    tambien quiciera generar un archivo xls y cvs.

    Quisiera saber si con la libreria que utilizo se puede hacer eso o que necesito para poder generar ese tipo de archivos, espero y me puedan ayudar Gracias…..

  • http://www.jsanroman.net jsanroman

    Hola Bertha
    La verdad nunca he utilizado itext pero por lo que había leído era una librería para manipular documentos pdf, html, rdf, aunque insisto no la conozco y posiblemente ya exista algún plugin que permita exportarlos a otro formato, no lo se.
    En cualquier caso la librería que te permitiría manejar documentos excell, cvs, y otros formatos microsoft son las apache poi http://poi.apache.org, y si utilizas jasperreport pues ya las tendrás integradas.

    Un saludo.

  • Qko

    Hola a todos, eh estado checando sus comentarios y se nota que saben mucho, yo soy nuevo en esto del iReport estoy manejando la version 3.0.0 y tengo una duda si alguien me prodria ayudar se lo agradeceria.

    Mi probroblema o duda es que quiero crear un boton en php y cuando le de clic que llame el reporte jrxml pero en formato pdf si alguien tiene algo por el estilo se lo agradeceria

  • carleto

    Hola a todos, nunca he trabajado reportes pdf con Java y tengo una duda:se puede convertir una pagina jsp generada con datos de mysql a formato (xml) o (.jasper) o (.jrxml), y a partir de esto generar un pdf con Jasper? Agradecería mucho si me pueden ayudar.

  • http://www.imapax.com favrycio

    JRRtfExporter rtfExporter = new JRRtfExporter();
    rtfExporter.setParameter(JRExporterParameter. JASPER_PRINT, archivoImprimir);
    rtfExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, Programa.datosUsuarios.getDirectorioDocs()+nombreArchivo);
    System.out.println(“Exporting report…”);
    rtfExporter.exportReport();
    System.out.println(“Done Exporting report!!”);
    Es lo que tengo para exportar a rtf archivoImprimir ya esta cargado, ya estoy viendo el reporte, deseo exportarlo a rtf, se exporta, se guarda en el disco pero al abrirlo no me muestra nada, si lo abro como texto la info esta ahi, al parecer es un problema de codificacion o algo, por fa’ dame una mano

  • jamp

    Hola en escencia tengo el mismo codigo q tu, pero me tira un java.lang.NullPointerException

    Y no se que podria ser.
    por fa ayuda :S Gracias

  • jamp

    Ya cabros el medio weveo :P :P:P
    pero salio

    El problema era (El codigo esta bien) que en un utotrial baje los .jar de jasper (Craso ERROR) ya que eran de una de versionpasada del ireport de la 2.0.x, y yo trabajo con el plugin irreport para netbeans y este tenia instalada la ultima version del ireport la 3.0.1 (que trae sus propias librerias en NETBEANSHOME/ireport/lib/ext) ahí están todo lo necesario para el ireport

    por fin me salio la wa’

    un saludo

    APS!!! en otros post encontr que el mismo error se produce por trabajar con versiones distintas entre el ireport y el jasperreport, me explico jasperreport 2.0.x; y ireport 3.0.x da el mismo error En escencia es el mismo error que el mio :P
    un saludo y ojala a alguien le sirva mi calenta de cabeza por 24 hrs. seguidas, pal pic… :D :S

    Chau

  • Javi

    Hola Javier, gran trabajo el que haces en este artículo, pero estoy tan desesperado en un trabajo que me han encasquetado que te suplico ayuda:
    Tengo un proyecto con spring+hibernate+jasperreports+tobago….
    Hago los informes con spring-hibernate y los compilo, el problema viene al intentar llamarlos desde la aplicación, he probado mil codigos y todos me dan problemas, no poseo grandes conocimientos, pero sobre el código que has puesto cuyo titular es “Para exportar a formato pdf” me gustaría saber ,si puedes ayudarme , como tengo que configurar “conn” para que entienda que es una session de hibernate.
    Saludos y muchas gracias.

  • http://www.jsanroman.net jsanroman

    Hola Javi
    conn es un objecto java.sql.Connection. Hay varias formas de integrar hibernate con jasperreports. Pero entiendo que solo buscas la forma de obtener el objecto connection de tu session de hibernate para pasarla a jasperreports, y que este se encargue de todo lo demás igual que si estuvieras utilizando jdbc a pelo. Este “conn” lo puedes obtener de la session de hibernate, creo que así:

    Connection conn = HibernateUtil.currentSession().connection();

    Échale un vistazo a la api de hibernate http://www.hibernate.org/hib_docs/v3/api/ y mas concretamente a la interfaz org.hibernate.Session

    Un saludo

  • Juan

    Hola a todos:

    Soy nuevo en esto, estoy trabajando en un proyecto como consultor y tengo que modificar varios informes .jasper, por lo que he leído por internet, necesito el Ireport, ya me lo he bajado e instalado, concretamente la versión 3.1.3, ahora bien intento abrir los archivos .jasper y no me deja, me tengo que instalar alguna aplicación más o algún plugin. Gracias por adelantado.

  • rob82

    Muy buen manual.

    He dado una vuelta por la página y no me ha parecido ver contestados ninguno de los dos problemas que tengo, haber si alguien le ha pasado algo parecido o sabe solucionarlo.

    El primero y mas importante es que al sacar el informe en pdf, me sale una hoja en blanco, en lugar del informe que me debería salir, el codigo os lo pego abajo, pero creo que esta bien, el problema puede ser que en la plantilla necesite llevar algún parametro especial para sacarlo en formato pdf?Como este? [ <textField isBlankWhenNull=\"false\" ]
    Alguien que le haya pasado algo parecido y lo haya solucionado? A Hector parece que le paso algo parecido pero con excel.

    /*********************************************************************************************************************
    //Se carga el informe y se rellena con los parámetros ya definidos en el hashmap
    JasperReport jasperReport = (JasperReport)JRLoader.loadObject(strDirectorio+InformeJasper);

    //Se obtienen los parámetros que definen el informe
    parameters = getParametrosInforme(request,secciones,beans,strDirectorio);

    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,parameters,new JREmptyDataSource());

    JRPdfExporter exporterPDF = new JRPdfExporter();
    ByteArrayOutputStream baosPDF = new ByteArrayOutputStream();

    exporterPDF.setParameter(JRPdfExporterParameter.JASPER_PRINT,jasperPrint);
    exporterPDF.setParameter(JRPdfExporterParameter.OUTPUT_STREAM,baosPDF);
    exporterPDF.exportReport();

    response.reset();
    response.addHeader(\”content-disposition\”,\”attachment; filename=\” + outFilename+\”.pdf\”);
    response.setContentType(\”application/pdf\”);
    response.setContentLength(baosPDF.size());

    ServletOutputStream outputstreamPDF = response.getOutputStream();
    baosPDF.writeTo(outputstreamPDF);

    outputstreamPDF.flush();
    baosPDF.close();
    *********************************************************************************************************************/

    Y mi segundo problema es que utilizo:
    exporter.setParameter(JRXlsExporterParameter.IS_AUTO_DETECT_CELL_TYPE, Boolean.FALSE);
    Pero ha caido en desuso y en el API pone que se debe utilizar:
    exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.FALSE);
    Pero no me funciona porque aunque ponga la linea anterior me sigue detectando el tipo de celda, sin embargo con IS_AUTO_DETECT_CELL_TYPE, si funciona no me las detecta.Alguna idea?Es por no utilizar algo que esta en desuso.

    Muchas gracias, por anticipado, espero vuestra ayuda.

  • Rosy V. V.

    Hola! Estoy tratando de generar mi reporte de IReport desde mi jsp en formato pdf, me sale el siguiente error:
    java.nio.charset.MalformedInputException: Input length = 1

    Alguna idea? creo que son las versiones de mi IReport y mi jasperreport.jar utilizo el IReport 3.0.0 y mi jasperreports en el netbeans es el 3.1.2

    Alguien sabe que pasa con la compatibilidad de versiones?

    Gracias!

  • http://notengo.com ikis

    Disculpa cuando trato de cargar el .jasper, me lanza una exceptio porque no encuentra el archivo, lo añadi como parte del paquete war a generare, pero no me lo encuentra, donde especificamente debo ponerlo para que lo pueda leer. gracias por tu tiempo

  • Flavia

    Hola a todos. Muchas gracias Javi por este artículo, y gracias también por todas las respuestas. Son de gran ayuda.

  • Juan Espinola

    hola tengo una consulta..cuando genero mi reporte en formato xls en ie6 me arroja este error..
    ErrorClientAbortException:  java.net.SocketException: Software caused connection abort: socket write error

    alguna idea de como solucionarlo? el reporte se genera sin problemas en otros exploradores..

    Gracias.!