Showing posts with label direct pdf output. Show all posts
Showing posts with label direct pdf output. Show all posts

Sunday, July 20, 2014

Grails using jasper report without plugin

This snippet is used to generate .pdf file and the send the byte array to the browser, so the user can print the .pdf directly to the printer. I use jasper report to generate the .pdf file. My grails version is 2.4.2. First, download the necessary .jar file, I use this version of jar :

  • commons-beanutils-1.9.2.jar
  • commons-collections-3.2.jar
  • commons-digester-2.1.jar
  • commons-logging-1.2.jar
  • itext-2.1.7.jar
  • jasperreports-5.6.0.jar

You can download from this link : https://drive.google.com/file/d/0B3BD2OiyeQ3UQWN2Nk82R1dhYmM/edit?usp=sharing

After download the .jar files, put those .jar file to the /lib folder. Then I use this code in my controller :

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRPdfExporter;

class LabController {

    def dataSource
    
    def print() {
     try {
      String reportName, namaFile, dotJasper
      namaFile = "barang"
      reportName = grailsApplication.mainContext.getResource('reports/' + namaFile + '.jrxml').file.getAbsoluteFile()
      dotJasper = grailsApplication.mainContext.getResource('reports/' + namaFile + '.jasper').file.getAbsoluteFile()

      // Report parameter
      Map reportParam = new HashMap()

      // compiles jrxml
      JasperCompileManager.compileReportToFile(reportName);
      // fills compiled report with parameters and a connection
      JasperPrint print = JasperFillManager.fillReport(dotJasper, reportParam, dataSource.getConnection());

      ByteArrayOutputStream  pdfStream = new ByteArrayOutputStream();

      // exports report to pdf
      JRExporter exporter = new JRPdfExporter();
      exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
      exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, pdfStream); // your output goes here
   
      exporter.exportReport();

     } catch (Exception e) {
   
      throw new RuntimeException("It's not possible to generate the pdf report.", e); 
     } finally {
      render(file: pdfStream.toByteArray(), contentType: 'application/pdf')
     }
    }
}