Using Jasper Reports to create reports in Java

Last week I was trying to create a report using Jasper. In this post I will document some of the resources and links so that it will be useful for any one looking for similar information. I will cover life cycle of Jasper reports, examples and Dynamic Jasper. 

The Jasper Reports is the world's most popular open source reporting engine. It is entirely written in Java and it is able to use data coming from any kind of data source and produce pixel-perfect documents that can be viewed, printed or exported in a variety of document formats including HTML, PDF, Excel, OpenOffice and Word.

JasperReport Life Cycle

As in the image the life cycle has 3 distinct phases,

1. Designing the Report

In this step involves creation of the JRXML file, which is an XML document that contains the definition of the report layout. We can use the either iReport Designer or a text editor to manually create it. Using iReport Designer, the layout is completely designed in a visual way, so you can ignore the real structure of the JRXML file.

Here is the detailed tutorial on designing a report using iReport. We can also use Dynamic Jasper described later in the article to design a report.

2. Executing the report.

Before executing a report, the JRXML must be compiled in a binary object called a Jasper file(*.jasper). This compilation is done for performance reasons. Jasper files are what you need to ship with your application in order to run the reports. Once the report is compiled it is filled with data from the application. The class net.sf.jasperreports.engine.JasperFillManager provides necessary functions to fill the data in the reports.

The report execution is performed by passing a Jasper file and a data source to JasperReports. There are plenty of types of data sources, it's possible to fill a Jasper file from an SQL query, an XML file, a csv file, an HQL (Hibernate Query Language) query, a collection of Java Beans, etc... If you don't find a suitable data source, JasperReports is very flexible and allows you to write your own custom data source.

JasperFillManager.fillReportToFile( "MasterReport.jasper" , parameters, getDataSource());

This operation creates a Jasper print file (*.jrprint), which used to either print or export the report.

3. Exporting to the desired format

Using the Jasper print file created in the previous step we shall be able to export it into any format using JasperExportManager. Jasper provides various forms of exports. This means with the same input we can create multiple representation of the data. Jasper inernally uses different APIs to create documents. But these complexity are hidden by the simpler JasperExportManager.

JasperExportManager. exportReportToPdfFile( "MasterReport.jrprint" );

In a nutshell the life cycle can be summarized in the below image

Image from Ramki Tech

References and other good articles on Jasper Reports Life Cycle


I have found it really hard to find a working example of Jasper report. But it is right there inside the package shipment!. Once you have downloaded the Jasper Library go to demo\samples, you will find a lot of sample programs. Many of these needs a working HSQL DB connection, to activate it go to demo\hsqldb and start the server. Every folder has a readme.txt file which will help you in understanding how to run it. All the examples can be executed using ant tasks.

Here is a list of few other sources.

Simplify report creation using Dynamic Jasper

DynamicJasper (DJ) is an open source free library that hides the complexity of Jasper Reports, it helps developers to save time when designing simple/medium complexity reports generating the layout of the report elements automatically.

The project homepage provides lots of examples and code snippets on how to use the library. I have been using it for some time and it is a pretty stable replacement for the JRXML file.While using dynamic jasper the report design is coded in Java. Which means every time the report is compiled, filled and exported. By using dynamic jasper we are replacing the first step in the above mentioned jasper life cycle. Even with dynamic jasper you need the jasper library and other dependent files.

Here is some more examples of Dynamic Jasper usage.


  1. Nice ,well articulated article.

  2. Clear points! thanks for sharing

  3. I want to export the report to xls and data coming from database is unpredictable(by language - it could be chinese, english, japanese). I am using spring MVC . when i export all the chinese characters doesnt come. Any idea how to resolve this ?

    1. I am not sure how to solve you problem, but post your questions on and someone will surly be able to help you!.

  4. thanks for the information can i know that if I have jrxml how can get Jasper format report?

  5. how to work with jasper report. I dont know anything, Can any one send material how to work with netbeans IDE from scratch..

  6. really good for new learners like me!!!!!!!!!!!!!!11

  7. Outstanding as well as powerful suggestion by the writer of this blog site are truly valuable to me. Annual Report Cover Page Design

  8. Outstanding as well as powerful suggestion by the writer of this blog site are truly valuable to me. Adwords Management Sydney

  9. ERP business management software for small and medium businesses, especially distributors, drop-shippers and eCommerce retailers. GreeneStep helps lower costs and improve productivity by streamlining operations.

  10. This is actually good to read content of this blog. A is very general and huge knowledgeable platform has been known by this blog. I in reality appreciate this blog to have such kind of educational knowledge. Wordpress Update

  11. It is truly a practical blog to discover some various resource to include my knowledge. Best Digital Marketing Course In Mumbai

  12. This blog aware me about different programs which can become very useful for our friends and kids. Few websites provide combined courses and few of the are separately for single subject. Glad to get this information. Oasis Inventor IT Solutions