Как отобразить Jasper Resport в JSP - PullRequest
2 голосов
/ 22 марта 2012

Я разработал отчет jasper, используя ireport, и я хочу вызвать этот отчет из jsp, и я создал отчет, используя SQL-запрос.

1 Ответ

0 голосов
/ 22 марта 2012

Вам нужно вызвать сервлет по нажатию кнопки или изображения из вашего файла JSP.В сервлете скомпилируйте свой jrxml (формат отчета jasper).И тогда вам нужно написать код для загрузки этого сервлета.

Ниже приведен код, используемый для составления отчета о яшме и экспорта в определенную папку:

HashMap<String, Object> response = new HashMap<String, Object>();
        String fileName = "C:\\temp\\report.jrxml"; 
        String pdfFile = "C:\\temp\\";
        JasperReport mainReport;
        JasperDesign mainReportDesign;

        try {
            mainReportDesign = JRXmlLoader.load(fileName);
            mainReport = JasperCompileManager.compileReport(mainReportDesign);
            if(reportFormat.equalsIgnoreCase("PDF"))
                pdfFile = pdfFile+"report.pdf";
            else if(reportFormat.equalsIgnoreCase("CSV"))
                pdfFile = pdfFile+"report.csv";
            JasperPrint jasperPrint = JasperFillManager.fillReport(mainReport, params, new JREmptyDataSource());


            if(reportFormat.equalsIgnoreCase("PDF"))
                JasperExportManager.exportReportToPdfFile(jasperPrint, pdfFile);
            else if(reportFormat.equalsIgnoreCase("CSV")) {
                JRExporter exporter = new JRCsvExporter();
                exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, pdfFile);
                exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
                exporter.exportReport();
            }

        } catch (JRException e) {
            e.printStackTrace();
       }

Ниже код используется для загрузки этого файла экспорта из этой папки.Это будет в вашем классе сервлетов:

        File  f        = new File("C:\\temp\\report.pdf");
        int                 length   = 0;
        ServletOutputStream op       = resp.getOutputStream();
        ServletContext      context  = getServletConfig().getServletContext();
        String              mimetype = context.getMimeType(f.getName());

        resp.setContentType( (mimetype != null) ? mimetype : "application/octet-stream" );
        resp.setContentLength( (int)f.length() );
        resp.setHeader( "Content-Disposition", "attachment; filename="+reportName );

        byte[] bbuf = new byte[1024];
        DataInputStream in = new DataInputStream(new FileInputStream(f));

        while ((in != null) && ((length = in.read(bbuf)) != -1))
        {
            op.write(bbuf,0,length);
        }

        in.close();
        op.flush();
        op.close();
...