style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Reporte se genera en blanco. (Usando JasperReports)

Que tal comunida, un saludo.
Veran me esta sucediendo algo muy raro, diseñe un reporte en iReport solo que al momento e invocarlo desde el navegador con javascript me aparece el PDF en blanco y lo mas curioso es que no tengo ningun tipo de error. Anteriormente ya habia hecho reportes y no tenia problema pero esta vez ya le busque por todos lados y no mas no logro que se obtenga la informacion que requiero.

Pondre a mi parecer unicamente lo mas escencial del codigo para generar el reporte:

JavaScript:

window.open("generaPDF.htm","nuevo","directories=no,location=no,menubar=yes,scrollbars=yes,statusbar=no,tittlebar=no");

Controller Java:

        @RequestMapping(value = "/generaPDF.htm", method = RequestMethod.GET)
        public void contratoPdf(HttpServletRequest request, HttpServletResponse response)
                                                        throws ClassNotFoundException, JRException, IOException{

        Map<String, String> parametros = new HashMap<String, String>();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                JRPdfExporter exporter = new JRPdfExporter();
       
        parametros.put("parametro", "parametro");

        InputStream reportStream = request.getSession().getServletContext().getResourceAsStream("/WEB-INF/reports/Reporte.jrxml");
        JasperDesign jd = JRXmlLoader.load(reportStream);
       
            JasperReport jr = JasperCompileManager.compileReport(jd);
             
            JasperPrint jp = JasperFillManager.fillReport(jr, parametros );              
                                 
                exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp);
                exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
               
                exporter.exportReport();
               
                response.setContentType("application/pdf");
                response.setContentLength(baos.size());
               
                ServletOutputStream outputStream = response.getOutputStream();
                baos.writeTo(outputStream);
                outputStream.flush();
        }

Bueno espero sus comentarios.
Saludos.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de neko069

Y la consulta que (me

Y la consulta que (me imagino) ocupas en tu reporte, si te devuelve datos si la ejecutas en tu navegador de base de datos?

Imagen de AlexSnake

Son parametros.

Si, claro de hecho son parametros que mando desde un map.

Imagen de neko069

Mmmmm ... no se me ocurre

Mmmmm ... no se me ocurre nada, digo, busqué en soluciones aquí mismo en el foro, pero pues nada que pueda ser útil, la única diferencia que veo, es que yo uso el reporte compilado (no lo compilo cada que invoco el reporte), pero de ahí en fuera, nada.
ni el iReports te manda alguna excepción a la hora de compilar el reporte?
Es más, en el iReports sí te manda el reporte con datos?

Imagen de AlexSnake

Oks neko069

Si ya tmb lo probe así y tampoco. Con el iReport no manda ninguna excepcion, complia bien incluso pongo el preview y si sale (obviamente yo le paso lo parms y se visualiza). Seguire buscandolo o lo comenzaré otra vez de cero. Gracisa neko!

Imagen de 043h68

Jasper Reports.

No entendí todo lo que tratabas de hacer con tu código, pero te paso como lo hago yo y espero te sirva:

Yo tengo una clase la cuál se encarga de recibir un mapa con los parámetros como son: el nombre del reporte a compilar, el titulo con el que se nombra al archivo, ubicación del archivo, etc.

Llamando al método de contratoPdf tendrás que decirle a Jasper que sesión utilice para poder obtener esos datos (print), lo cuál no vi por tu código >.<'

También te recomiendo que si el formato del reporte no es dinámico mandes llamar el reporte compilado, para evitar esta carga de trabajo y mejorar un poco el performance, esto es útil si utilizas miles de datos en tu reporte.

Este código compila el reporte, te paso este por que veo que mandas llamar el .jrxml

Sin más, te comparto lo que considero te puede servir.

                       
String ruta= lobjContex.getServletContext().getRealPath(rutaReporte+nombreReporte+".jrxml");

try {

JasperReport reporte= JasperCompileManager.compileReport(ruta);
JasperPrint print = JasperFillManager.fillReport(report,parameters,con);
byte[] reportePdf = JasperExportManager.exportReportToPdf(print);

      try {
OutputStream outputStream = lobjResponse.getOutputStream();
lobjResponse.setContentType("application/pdf");
lobjResponse.setContentLength(reportePdf.length);
lobjResponse.setHeader("Content-Disposition","attachment; filename="+nombreReporteSalida+".pdf");
outputStream.write(reportePdf, 0, reportePdf.length);
outputStream.flush();
outputStream.close();

      } catch(bla, bla, bla ... )

}catch (JRException e)
                       

Saludos.

Imagen de AlexSnake

Gracias por el tip

Ok lo probare y ya te digo si funciono o no.

Imagen de AlexSnake

Pues no

Realmente el problema no radica en obtener el reporte.. mas bien veo que la instruccion no esta obteniendo el reporte que se le indica, osea el jasper, por que abre un pdf pero en blanco. Quiza me hace falta poner algo en el application-context.xml o en web.xml De todos modos ya lo estoy haciendo desde el principio. Saludos.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">