Search code examples
javajsf-2jasper-reports

java jasper report export to stream blank page


I use jasper reports version 6.2.1 with the following configuration:

HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
 JREmptyDataSource jasper = new JREmptyDataSource();
 JasperPrint jasperPrint = jasperFillManager.fillReport(this.getClass().getClassLoader().getResource("/reports/tn2.jasper").getPath(), null, jasper);

response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment" + "; filename=hehe.pdf");

ByteArrayOutputStream finalReport = new ByteArrayOutputStream();
JasperExportManager.exportReportToPdfStream(jasperPrint,finalReport);
PrintWriter ouputStream = response.getWriter();
ouputStream.write(new String(finalReport.toByteArray()));
ouputStream.flush();
FacesContext.getCurrentInstance().responseComplete();

I do it from my JSF 2.x backing bean.

But I always get a blank page when try to export to stream. But if I do:

JasperExportManager.exportReportToPdfFile(jasperPrint,
                                "d://hehe.pdf");

it works ok, I see the content in the generated file. How to force it work with streams? I tried to close/flush streams in different configurations, use ARM, etc. No luck so far


Solution

  • The solution is trivial:

     FacesContext.getCurrentInstance().getExternalContext().responseReset();
    

    And that's it!!

    Thanks for your help.