6

I'm new to JasperReports and dont know how to call jasper file from servlet. My report contains the pie chart.

Alex K
  • 22,315
  • 19
  • 108
  • 236
deven
  • 805
  • 3
  • 10
  • 10

3 Answers3

5

You can prepare the Jasper file and stream it to the client.

bytes[] byteStream = JasperRunManager.runReportToPdf("myJasperReport.jasper",paramMap,databaseConn);

OutputStream outStream = servletResponse.getOutputStream();
response.setHeader("Content-Disposition","inline, filename=myReport.pdf");
response.setContentType("application/pdf");
response.setContentLength(byteStream.length);
outStream.write(bytes,0,bytes.length);
mohdajami
  • 9,604
  • 3
  • 32
  • 53
2

A complete way to do this from the servlet would be:

public void myServletMethod(HttpServletRequest request, HttpServletResponse response) throws IOException{
            JasperReport jasperReport = null;
            JasperDesign jasperDesign = null;
            Map parameters = new HashMap();
            String path = getServletContext().getRealPath("/WEB-INF/");
            jasperDesign = JRXmlLoader.load(path+"/relative/path/to/MyReport.jrxml");
            jasperReport = JasperCompileManager.compileReport(jasperDesign);
            byte[] byteStream = JasperRunManager.runReportToPdf(jasperReport, parameters, **new DataSourceOfYourPreference**);                            
            OutputStream outStream = response.getOutputStream();
            response.setHeader("Content-Disposition","inline, filename=myReport.pdf");
            response.setContentType("application/pdf");
            response.setContentLength(byteStream.length);
            outStream.write(byteStream,0,byteStream.length);    

    }
Christian Vielma
  • 15,263
  • 12
  • 53
  • 60
2

Here is a dummy report created within a Servlet file.

It is the same as it would be in normal Java class.

Just make sure you have the imports for your jasper report classes at the top of the file.

The bellow example builds a report from an XML datasource.

public class JasperServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        try {
            String reportFile = "myJasperReport.jrxml";
            File outputFile = new File("Report.pdf");
            HashMap hm = new HashMap();

            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder documentBuilder = documentBuilderFactory
                    .newDocumentBuilder();
            Document document = documentBuilder.parse(new File("myXml.xml"));

            // Compile the report
            JasperReport report = JasperCompileManager
                    .compileReport(reportFile);
            JRXmlDataSource xml = new JRXmlDataSource(document, "/xml/root");
            // Fill the report
            JasperPrint print = JasperFillManager.fillReport(report, hm, xml);
            // Create an Exporter
            JRExporter exporter = new JRPdfExporter();
            exporter.setParameter(JRExporterParameter.OUTPUT_FILE, outputFile);
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
            // Export the file
            exporter.exportReport();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Gordon
  • 4,823
  • 4
  • 38
  • 55