Jasper Java API to Export Report

Objective 


Jasper report's java API allows compiling and exporting Jasper Report in different formats pdf, xml or HTML. This blog contains sample code to compile .jrxl and save .jasper file(compiled file) to pdf format. It is a Jasper JAVA API code to generate report using simple JSON object. Re-using complied version of jasper report will save efforts on compiling report every time we export jasper report.

Report can be exported into excel and other avaialbe file formats using methods
JasperExportManager.exportReportToPdfFile
JasperExportManager.exportReportToHTMLFile
JasperExportManager.exportReportToXMLFile

This code based on  Jasper 5.6.0 API Version

Java Code 

package test.simpleJava

import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JsonDataSource;
import net.sf.jasperreports.engine.query.JsonQueryExecuterFactory;

class JasperExample
{
public void generateReport()
{
try {
// compile .jrxml and save compliled .jasper file

String sourceFile =  " file path of .jrxml ";
String destFile = " file path to save .jasper ";

// save compiled file if not exist
File f = new File(destFile);
if(!f.exists() ) {
JasperCompileManager.compileReportToFile(sourceFile, destFile);
}

String flatJSON = "{\"customers\":[{\"name\":\"User One\",\"email\":\"User.One@test.com\"},{\"name\":\"User Two\",\"email\":\"User.Two@test.com\"}]}";
ByteArrayInputStream iStream = new ByteArrayInputStream(flatJSON.getBytes());

Map<String, Object> params = new HashMap<String, Object>();
params.put(JsonQueryExecuterFactory.JSON_DATE_PATTERN, "MM/dd/yyyy");
params.put(JsonQueryExecuterFactory.JSON_DATE_PATTERN, "yyyy-MM-dd");
params.put(JsonQueryExecuterFactory.JSON_NUMBER_PATTERN, "#,##0.##");
params.put(JsonQueryExecuterFactory.JSON_LOCALE, Locale.ENGLISH);
params.put(JRParameter.REPORT_LOCALE, Locale.US);

JasperPrint print;

JsonDataSource jds = new JsonDataSource(iStream, "customers");
print = JasperFillManager.fillReport(prop.getProperty("CompliledReports") + reportName + ".jasper", params, jds);

JasperExportManager.exportReportToPdfFile(print, prop.getProperty("ReportOutPutPath") + reportName + ".pdf");
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


If the JSON has root node as the flatJSON object has "customer" as root node. It is necessary to pass "Select Expression" to JSONDataSource constructor as follows. In absence of "Selecte Expression", jasper report with null values will be generated / exported.
JsonDataSource jds = new JsonDataSource(iStream, "customers");

Jasper Java API has lots of dependencies best way to get ride of it is by using maven bilder. Below are the dependencies added in the POM file.
<dependencies>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>5.6.0</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>4.2.1</version>
</dependency>
<dependency>
<groupId>org.olap4j</groupId>
<artifactId>olap4j</artifactId>
<version>0.9.7.309-JS-3</version>
</dependency>
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
</dependency>
<dependency>
  <groupId>joda-time</groupId>
  <artifactId>joda-time</artifactId>
  <version>2.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.8</version>
</dependency>
</dependencies>

And below are the repositories

<repositories>
<repository>
<id>jasperreports</id>
<url>http://jasperreports.sourceforge.net/maven2</url>
</repository>
<repository>
<id>jaspersoft-third-party</id>
<url>http://jaspersoft.artifactoryonline.com/jaspersoft/third-party-ce-artifacts/</url>
</repository>
</repositories>

While building this project, it was throwing exception, artifact is missing from http://jasperreports.sourceforge.net/maven2/ org.olap4j:olap4j:jar:0.9.7.309-JS-3
TO resolve this issue, download "olap4j-0.9.7.309-JS-3.jar" from url http://jaspersoft.artifactoryonline.com/jaspersoft/jaspersoft-repo/org/olap4j/olap4j/0.9.7.309-JS-3/
and paste it in .m2 directory of following path ".m2\repository\org\olap4j\olap4j\0.9.7.309-JS-3"

1 comment:

  1. Add the following dependency only -->

    org.olap4j
    olap4j
    1.2.0

    It will work.

    And don't try to add with that 0.9.7.309-JS-3 version..

    ReplyDelete