Friday, 5 August 2011

Generate Report using iReport in Liferay

Step :1 )Create .jrxml file.

For creating PDF or EXCEL file , you need iReport that generates .jrxml file . 

I'm using iReport-3.7.5 for generating .jrxml file.


I had create two parameter name as "name" and "address" by clicking on Parameters in Report Inspector
     window (in left handside).                                
     After creating parameter just drag and drop where you want to put in report. You can also create static         Text("Name::" and "Address::") as I show above snapshot.

Step : 2 )  Create method to export in .xls file.

For below code you need to import jars in portlet's lib folder like iText-2.1.5.jar , iText-2.1.7.jar , jasperreports-3.7.5.jar , jasperreports-applet-3.7.5.jar , jasperreports-fonts-3.7.5.jar , jasperreports-javaflow-3.7.5.jar.

After creating report save it. Here i'm saving as reportDemo.jrxml under report folder of my docroot directory.

    private void makeExcelReport(ActionRequest actionRequest, ActionResponse actionResponse, User user)
            throws JRException, IOException
    {

               JasperReport report; 
               Map paramMap = new HashMap();
               report = JasperCompileManager.compileReport(getPortletContext().getRealPath("/reports/reportDemo.jrxml"));
               
        String nameFromRequest = user.getUserName();
        String addressFromRequest = userUserAddress();
        paramMap.put("name", nameFromRequest);
        paramMap.put("address", addressFromRequest );

        java.util.List list = new ArrayList();
        list.add(paramMap);
        String userFormFile = actionRequest.getPortletSession().getPortletContext().getRealPath("") + "/" +                                              
                                                                                    "UserForm_" + ".xls";
                                           // This is where we store .xls file, It is in temp folder where deployment is done.
        File fileName = new File(userFormFile);
        if (fileName.exists())
        {
            fileName.delete();
        }

        JRBeanCollectionDataSource dataSourceWebContent = new JRBeanCollectionDataSource(list);
        JasperPrint print = JasperFillManager.fillReport(report, paramMap, dataSourceWebContent);
        ByteArrayOutputStream outputByteArray = new ByteArrayOutputStream();
        OutputStream outputfile = new FileOutputStream(new File(userFormFile));

        JRXlsExporter exporter = new JRXlsExporter();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);  // Optional
        exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, userFormFile);  // Optional
        exporter.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, outputByteArray); // Optional
        exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); //
        exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);
                               // Optional
        exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);                                                                                                              // Optional
        exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);                                                                                                // Optional
        exporter.exportReport();
        outputfile.write(outputByteArray.toByteArray());