Twitter

JasperReports basic example

Hi everybody,

Today i have played around with JasperReports. Really nice java tool to created very easy reports. I did not find many examples on internet. Therefor I post my first try. I hope this will help other developers starting up with this great tool.

This example runs a query (JDBC connected) with some parameters define in Java. The result is converted to PDF and then zipped.

Test.java file


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import java.sql.Connection;
import java.sql.DriverManager;

import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

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.JasperReport;

/**
 * The Class Test.
 */
public class Test {

	/** The Constant LOG. */
	private static final Logger LOG = Logger.getLogger(test.class);
	
	/** The Constant BUFFER. */
	final static int BUFFER = 10240;
	
	/** The connection. */
	static Connection connection = null;

	/**
	 * Connect database.
	 */
	static void ConnectDatabase() {
		try {			
			// Load the JDBC driver
			String driverName = "oracle.jdbc.driver.OracleDriver";
			Class.forName(driverName);

			// Create a connection to the database
			String serverName = "127.0.0.1";
			String portNumber = "1521";
			String sid = "XE";
			String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
			String username = "test";
			String password = "test";
			connection = DriverManager.getConnection(url, username, password);
		} catch (ClassNotFoundException e) {
			System.err.println("Could not find the database driver");
		} catch (Exception e) {
			System.err.println("Could not connect to the database");
		}
	}

	/**
	 * File zip.
	 */
	static void fileZip() {
		
		BufferedInputStream origin = null;
		try
		{
			FileOutputStream dest = new FileOutputStream("test.zip");
			ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
			byte data[] = new byte[BUFFER];
			
			// get a list of files from current directory
			File f = new File("src/.");
			String files[] = f.list();

			for (int i=0; i<files.length; i++) {
			
				System.out.println("Adding: "+files[i]);
				FileInputStream fi = new FileInputStream("src/"+files[i]);
				origin = new BufferedInputStream(fi, BUFFER);
				ZipEntry entry = new ZipEntry(files[i]);
				out.putNextEntry(entry);
				int count;
				while((count = origin.read(data, 0, BUFFER)) != -1) {
					out.write(data, 0, count);
				}
				origin.close();
			}
			out.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
     
	/**
	 * The main method.
	 * 
	 * @param args the arguments
	 */
	public static void main(String[] args) {
		JasperReport jasperReport;
		JasperPrint jasperPrint;
		
		long start = System.currentTimeMillis();
		
		try {			
			// Log log4j configuration
			final Properties log4jProperties = new Properties();
			log4jProperties.load(new FileInputStream("etc/log4j.properties"));
			PropertyConfigurator.configure(log4jProperties);
			
			LOG.info("Start");
			LOG.info("--------");
						
			LOG.info("Compile Jasper XML Report");
			jasperReport = JasperCompileManager.compileReport("src/test.jrxml");
			LOG.info("time : " + (System.currentTimeMillis() - start)+ " ms.");
			
			LOG.info("Create Database connection");
			ConnectDatabase();
			LOG.info("time : " + (System.currentTimeMillis() - start)+ " ms.");
			
			LOG.info("Create parameters");
			Map <String, Object> parameters = new HashMap<String, Object>();
			parameters.put("ReportTitle", "User Report");
			parameters.put("DataFile", "src/test1.jrxml");
			parameters.put("IdRange", 10);	
			
			LOG.info("Generated report");
			jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
			LOG.info("time : " + (System.currentTimeMillis() - start)+ " ms.");
			
			LOG.info("Generated PDF");
			JasperExportManager.exportReportToPdfFile(jasperPrint, "src/test.pdf");
			LOG.info("time : " + (System.currentTimeMillis() - start)+ " ms.");
			
			LOG.info("Create Zip File");
			fileZip();
			LOG.info("time : " + (System.currentTimeMillis() - start)+ " ms.");
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		LOG.info("--------");
		LOG.info("Done");
	}
}

JaspersReports test.jrxml (Report template) file.

<?xml version="1.0"?>

<jasperReport
		xmlns="http://jasperreports.sourceforge.net/jasperreports"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
		name="User Overview" pageWidth="595" pageHeight="842" columnWidth="515" leftMargin="40" rightMargin="40" topMargin="50" bottomMargin="50">


	<style name="Sans_Bold" isDefault="false" fontName="DejaVu Sans" fontSize="8" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false"/>
	<style name="Sans_Normal" isDefault="true" fontName="DejaVu Sans" fontSize="8" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false"/>
	<style name="Title" style="Sans_Bold" fontSize="12"/>
	<style name="ColumnHeader" style="Sans_Bold" forecolor="white"/>
	
	<parameter name="ReportTitle" class="java.lang.String"></parameter>
	<parameter name="DataFile" class="java.lang.String"></parameter>
	<parameter name="IdRange" class="java.lang.Integer"></parameter>
	
	<queryString><![CDATA[SELECT id, displaynaam, puik_id FROM gebruiker WHERE id <=$P{IdRange} order by id]]></queryString>
	<field name="id" class="java.lang.Integer"/>
	<field name="displaynaam" class="java.lang.String"/>
	<field name="puik_id" class="java.lang.String"/>
	
	<title>
		<band height="70">
			<line>
				<reportElement x="0" y="0" width="515" height="1"/>
				<graphicElement/>
			</line>
			<textField isBlankWhenNull="true" bookmarkLevel="1">
				<reportElement x="0" y="10" width="515" height="30" style="Sans_Normal"/>
				<textElement textAlignment="Center">
					<font size="22"/>
				</textElement>
				<textFieldExpression class="java.lang.String"><![CDATA[$P{ReportTitle}]]></textFieldExpression>
				<anchorNameExpression><![CDATA["Title"]]></anchorNameExpression>
			</textField>
			<textField isBlankWhenNull="true">
				<reportElement x="0" y="40" width="515" height="20" style="Sans_Normal"/>
				<textElement textAlignment="Center">
					<font size="14"/>
				</textElement>
				<textFieldExpression class="java.lang.String"><![CDATA[$P{DataFile}]]></textFieldExpression>
			</textField>
		</band>

	</title>
	
	<pageHeader>
		<band height="15">
			<frame>
				<reportElement x="0" y="0" width="555" height="15" mode="Opaque" backcolor="black"/>
				<staticText>
					<reportElement x="5" y="0" width="155" height="15" style="ColumnHeader"/>
					<textElement verticalAlignment="Middle" textAlignment="Left"/>
					<text>Id</text>
				</staticText>
				<staticText>
					<reportElement x="125" y="0" width="100" height="15" style="ColumnHeader"/>
					<textElement verticalAlignment="Middle"/>
					<text>Displaynaam</text>
				</staticText>
				<staticText>
					<reportElement x="270" y="0" width="60" height="15" style="ColumnHeader"/>
					<textElement verticalAlignment="Middle" textAlignment="Left"/>
					<text>PuikId</text>
				</staticText>
				</frame>
		</band>
	</pageHeader>
							
 <detail>
 	<band height="15">
			<frame>
				<reportElement x="0" y="0" width="555" height="15" />
				<textField>
					<reportElement x="5" y="0" width="155" height="15"/>
					<textElement verticalAlignment="Middle" textAlignment="Left"/>
					<textFieldExpression>$F{id}.toString()</textFieldExpression>
				</textField>
				<textField>
					<reportElement x="125" y="0" width="100" height="15"/>
					<textElement verticalAlignment="Middle"/>
					<textFieldExpression>$F{displaynaam}</textFieldExpression>
				</textField>
				<textField pattern="#,###.00">
					<reportElement x="270" y="0" width="60" height="15"/>
					<textElement verticalAlignment="Middle" textAlignment="Left"/>
					<textFieldExpression>$F{puik_id}</textFieldExpression>
				</textField>
			</frame>			
		</band>	
  </detail>
  
  <pageFooter>
		<band height="40">
			<line>
				<reportElement x="0" y="10" width="515" height="1"/>
				<graphicElement/>
			</line>
			<textField>
				<reportElement x="200" y="20" width="80" height="15"/>
				<textElement textAlignment="Right"/>
				<textFieldExpression class="java.lang.String"><![CDATA["Page " + String.valueOf($V{PAGE_NUMBER}) + " of"]]></textFieldExpression>
			</textField>
			<textField evaluationTime="Report">
				<reportElement x="280" y="20" width="75" height="15"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[" " + String.valueOf($V{PAGE_NUMBER})]]></textFieldExpression>
			</textField>			
		</band>
	</pageFooter>
  	
	<lastPageFooter>
		<band height="60">
			<textField bookmarkLevel="1">
				<reportElement x="0" y="10" width="515" height="15"/>
				<textElement textAlignment="Center"/>
				<textFieldExpression class="java.lang.String"><![CDATA["There were " + 
					String.valueOf($V{REPORT_COUNT}) + 
					" address records on this report."]]></textFieldExpression>
				<anchorNameExpression><![CDATA["Summary"]]></anchorNameExpression>
			</textField>
			<line>
				<reportElement x="0" y="30" width="515" height="1"/>
				<graphicElement/>
			</line>
			<textField>
				<reportElement x="200" y="40" width="80" height="15"/>
				<textElement textAlignment="Right"/>
				<textFieldExpression class="java.lang.String"><![CDATA["Page " + String.valueOf($V{PAGE_NUMBER}) + " of"]]></textFieldExpression>
			</textField>
			<textField evaluationTime="Report">
				<reportElement x="280" y="40" width="75" height="15"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[" " + String.valueOf($V{PAGE_NUMBER})]]></textFieldExpression>
			</textField>
		</band>
	</lastPageFooter>
		
</jasperReport>

Log4j.properties file

log4j.rootLogger=INFO, console, logfile
log4j.appender.logfile.File=../log/test.log

# Appender to log4j.log
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.MaxFileSize=1000KB
log4j.appender.logfile.MaxBackupIndex=9
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss,SSS} %-5p (%c:%L) - %M: %m%n
log4j.appender.logfile.Append=true

# Appender to Console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss,SSS} %-5p (%c:%L) - %M: %m%n

4 comments to JasperReports basic example

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>