René Nyffenegger's collection of things on the web
René Nyffenegger on Oracle - Most wanted - Feedback -
 

Jasper - Using reports from/with Java

First example

A Java class that compiles an .jrxml and creates a PDF out of it.
<?xml version="1.0" encoding="UTF-8"?>

<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              ="To be called by Java" 
  pageWidth         =        "595" 
  pageHeight        =        "845"
  columnWidth       =        "595" 
  leftMargin        =          "0" 
  rightMargin       =          "0" 
  topMargin         =          "0" 
  bottomMargin      =          "0"
>

  <queryString>
    <![CDATA[

    select owner,
           object_type,
           object_name 
      from all_objects
     where owner not in ('SYS', 'SYSTEM')
  order by owner,
           object_type,
           object_name

]]>
  </queryString>

  <field name="OWNER"       class="java.lang.String"/>
  <field name="OBJECT_TYPE" class="java.lang.String"/>
  <field name="OBJECT_NAME" class="java.lang.String"/>

  <detail>
    <band height="16" splitType="Stretch">
      <textField> <reportElement x=  "0" y="0" width="130" height="14"/> <textElement/> <textFieldExpression class="java.lang.String"><![CDATA[$F{OWNER}      ]]> </textFieldExpression> </textField>
      <textField> <reportElement x="130" y="0" width="130" height="14"/> <textElement/> <textFieldExpression class="java.lang.String"><![CDATA[$F{OBJECT_TYPE}]]> </textFieldExpression> </textField>
      <textField> <reportElement x="260" y="0" width="130" height="14"/> <textElement/> <textFieldExpression class="java.lang.String"><![CDATA[$F{OBJECT_NAME}]]> </textFieldExpression> </textField>
    </band>
  </detail>

</jasperReport>
// set path=C:\program files\Java\jdk\1.6.0_10\bin;%PATH%
// set classpathdir=z:\Development\locale\
//
// Compilation:
// ------------
//   javac -Xlint:deprecation -classpath %classpathdir%jasperreports-3.5.2.jar Ex_11_00.java
//
// Run
// ---
//  Needed jars:
//    o jasperreports.xyz.jar
//    o commons-digester-x-y.jar
//    o commons-logging-x-y.jar
//    o commons-collections-x.y.z.jar
//    o commons-beanutils-x.y.z.jar
//    o jdbc5.jar                       (thin jdbc driver for Oracle?)
//    o iText-x.y.z.jar                 (PDF creation?)
//
//  set classpath=%classpathdir%jasperreports-3.5.2.jar;%classpathdir%commons-digester-1.7.jar;%classpathdir%commons-logging-1.1.jar;%classpathdir%commons-collections-3.2.1.jar;commons-beanutils-1.8.0.jar;%classpathdir%ojdbc5.jar;%classpathdir%iText-2.1.0.jar;.
//
//  java -classpath %classpath% Ex_11_00



import java.sql.*;  
import java.util.HashMap;   
import java.util.Map;  
import net.sf.jasperreports.engine.JRException;   
import net.sf.jasperreports.engine.JasperCompileManager;   
import net.sf.jasperreports.engine.JasperFillManager;   
import net.sf.jasperreports.engine.JasperExportManager;   
import net.sf.jasperreports.engine.JasperPrint;   
import net.sf.jasperreports.engine.JasperReport;   
import net.sf.jasperreports.engine.design.JasperDesign;   
import net.sf.jasperreports.engine.JasperManager;   
   
public class Ex_11_00  {  

  public static void main(String [] args)  {  
    try  {  

      JasperDesign jasperDesign = JasperManager.loadXmlDesign("Ex_11_00.jrxml");  
      JasperReport jasperReport = JasperManager.compileReport(jasperDesign);  

      Connection conn =
      DriverManager.getConnection(
        "jdbc:oracle:thin:@172.17.5.24:1521:newora11",
        "rene",  // username
        "rene"   // password
      );

      Map parameters = new HashMap();  

      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);  

      JasperExportManager.exportReportToPdfFile(jasperPrint,"Ex_11_00.pdf");  
    }  
    catch (Exception e)  {  
      System.out.println(e);  
    }  
  }  

}

Second example

Same thin except additional passing of parameters.
<?xml version="1.0" encoding="UTF-8"?>

<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              ="To be called by Java" 
  pageWidth         =        "595" 
  pageHeight        =        "845"
  columnWidth       =        "595" 
  leftMargin        =          "0" 
  rightMargin       =          "0" 
  topMargin         =          "0" 
  bottomMargin      =          "0"
>

  <parameter name="P_OWNER"       class="java.lang.String" />
  <parameter name="P_OBJECT_TYPE" class="java.lang.String" />

  <queryString>
    <![CDATA[

    select object_name,
           created 
      from all_objects
     where owner       = $P{P_OWNER}       and
           object_type = $P{P_OBJECT_TYPE}
  order by owner,
           object_type,
           object_name

]]>

  </queryString>

  <field name="OBJECT_NAME" class="java.lang.String"/>
  <field name="CREATED"     class="java.sql.Timestamp"   />

  <detail>
    <band height="16" splitType="Stretch">
      <textField> <reportElement x=  "0" y="0" width="130" height="14"/> <textElement/> <textFieldExpression class="java.lang.String"  ><![CDATA[$F{OBJECT_NAME}]]> </textFieldExpression> </textField>
      <textField> <reportElement x="130" y="0" width="130" height="14"/> <textElement/> <textFieldExpression class="java.sql.Timestamp"><![CDATA[$F{CREATED}    ]]> </textFieldExpression> </textField>
    </band>
  </detail>

</jasperReport>
import java.sql.*;  
import java.util.HashMap;   
import java.util.Map;  
import net.sf.jasperreports.engine.JRException;   
import net.sf.jasperreports.engine.JasperCompileManager;   
import net.sf.jasperreports.engine.JasperFillManager;   
import net.sf.jasperreports.engine.JasperExportManager;   
import net.sf.jasperreports.engine.JasperPrint;   
import net.sf.jasperreports.engine.JasperReport;   
import net.sf.jasperreports.engine.design.JasperDesign;   
import net.sf.jasperreports.engine.JasperManager;   
   
public class Ex_11_01  {  

  public static void main(String [] args)  {  
    try  {  

      JasperDesign jasperDesign = JasperManager.loadXmlDesign("Ex_11_01.jrxml");  
      JasperReport jasperReport = JasperManager.compileReport(jasperDesign);  

      Connection conn =
      DriverManager.getConnection(
        "jdbc:oracle:thin:@172.17.5.24:1521:newora11",
        "rene",  // username
        "rene"   // password
      );

        
      Map parameters = new HashMap();  

      parameters.put("P_OWNER"      , "RENE" );
      parameters.put("P_OBJECT_TYPE", "TABLE");  

      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);  

      JasperExportManager.exportReportToPdfFile(jasperPrint,"Ex_11_01.pdf");  
    }  
    catch (Exception e)  {  
      System.out.println(e);  
    }  
  }  
}

Third example

A4
<?xml version="1.0" encoding="UTF-8"?>
<!--  

  A4 = 8.27 inches * 11.69 inches
   
     8.27 inches * 72 dots/inch =  595 dots
    11.69 inches * 72 dots/inch =  842 dots


  83*7  = 581 (width)
  57*14 = 798 (height)


  Real Character width: 7.2625
                        ======
       
-->

<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              ="To be called by Java" 
  pageWidth         =        "581"  
  pageHeight        =        "798"
  columnWidth       =        "581" 
  leftMargin        =          "0" 
  rightMargin       =          "0" 
  topMargin         =          "0" 
  bottomMargin      =          "0"
> 


  <queryString>
    <![CDATA[
    select dummy from dual
    ]]>

  </queryString>

  <detail>

    <band height="798">

      <staticText>
        <reportElement x="0" y="0" width="603" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[0         1         2         3         4         5         6         7         8   ]]></text>
      </staticText>

      <staticText>
        <reportElement x="0" y="14" width="603" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[01234567890123456789012345678901234567890123456789012345678901234567890123456789 123]]></text>
      </staticText>

      <staticText>
        <reportElement x="0" y="28" width="604" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[third row: 123456789012345678901234567890123456789012345678901234567890123456789 123]]></text>
      </staticText>

      <staticText>
        <reportElement x="0" y="42" width="605" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[fourth row: 23456789012345678901234567890123456789012345678901234567890123456789 123]]></text>
      </staticText>

      <staticText>
        <reportElement x="0" y="56" width="606" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[fifth row: 123456789012345678901234567890123456789012345678901234567890123456789 123]]></text>
      </staticText>

      <staticText>
        <reportElement x="0" y="70" width="607" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[sixth row: 123456789012345678901234567890123456789012345678901234567890123456789 123]]></text>
      </staticText>

      <staticText>
        <reportElement x="0" y="84" width="608" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[seventh row: 3456789012345678901234567890123456789012345678901234567890123456789 123]]></text>
      </staticText>

      <staticText>
        <reportElement x="0" y="98" width="609" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[eighth row: 23456789012345678901234567890123456789012345678901234567890123456789 123]]></text>
      </staticText>

      <staticText>
        <reportElement x="0" y="112" width="610" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[nineth row: 23456789012345678901234567890123456789012345678901234567890123456789 123]]></text>
      </staticText>

      <staticText>
        <reportElement x="0" y="126" width="611" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[tenth row: 123456789012345678901234567890123456789012345678901234567890123456789 123]]></text>
      </staticText>

      <staticText>
        <reportElement x="0" y="140" width="612" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[eleventh row: 456789012345678901234567890123456789012345678901234567890123456789 123]]></text>
      </staticText>

      <staticText>
        <reportElement x="0" y="154" width="1000" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[twelth rwo: 23456789012345678901234567890123456789012345678901234567890123456789 123]]></text>
      </staticText>

    </band>

  </detail>

</jasperReport>
import java.sql.*;  
import java.util.HashMap;   
import java.util.Map;  
import net.sf.jasperreports.engine.JRException;   
import net.sf.jasperreports.engine.JasperCompileManager;   
import net.sf.jasperreports.engine.JasperFillManager;   
import net.sf.jasperreports.engine.JasperExportManager;   
import net.sf.jasperreports.engine.JasperPrint;   
import net.sf.jasperreports.engine.JasperReport;   
import net.sf.jasperreports.engine.design.JasperDesign;   
import net.sf.jasperreports.engine.JasperManager;
 
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.export.JRTextExporter;
import net.sf.jasperreports.engine.export.JRTextExporterParameter;    
   
public class Ex_11_02  {  

  public static void main(String [] args)  {  
    try  {  

      JasperDesign jasperDesign = JasperManager.loadXmlDesign("Ex_11_02.jrxml");  
      JasperReport jasperReport = JasperManager.compileReport(jasperDesign);  

      Connection conn =
      DriverManager.getConnection(
        "jdbc:oracle:thin:@172.17.5.24:1521:newora11",
        "rene",  // username
        "rene"   // password
      );

      Map parameters = new HashMap();  

      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);  

      JRTextExporter txtExporter = new JRTextExporter();

      txtExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

      txtExporter.setParameter(JRTextExporterParameter.BETWEEN_PAGES_TEXT ,"\f");       
      txtExporter.setParameter(JRTextExporterParameter.PAGE_HEIGHT        , new Integer(798));
      txtExporter.setParameter(JRTextExporterParameter.PAGE_WIDTH         , new Integer(581));
      txtExporter.setParameter(JRTextExporterParameter.CHARACTER_WIDTH    , new Integer(  7));
      txtExporter.setParameter(JRTextExporterParameter.CHARACTER_HEIGHT   , new Integer( 14));

//    txtExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,myfile.toString());
      txtExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,"Ex_11_02.txt");
      txtExporter.exportReport();

    }  
    catch (Exception e)  {  
      System.out.println(e);  
    }  
  }  
}

Fourth example

Page size 5 (h) x 100 (w)
<?xml version="1.0" encoding="UTF-8"?>
<!--  

  5   Rows, of which each height is 14 dots:   70
  101 Characters wide, each character 7 dots: 707

-->

<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              ="To be called by Java" 
  pageWidth         =        "707"  
  pageHeight        =         "70"
  columnWidth       =        "707" 
  leftMargin        =          "0" 
  rightMargin       =          "0" 
  topMargin         =          "0" 
  bottomMargin      =          "0"
> 


  <queryString>
    <![CDATA[
    select dummy from dual
    ]]>

  </queryString>

  <detail>

    <band height="70">

      <staticText>
        <reportElement x="0" y="0" width="7" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[.]]></text>
      </staticText>

      <staticText>
        <reportElement x="70" y="0" width="7" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[.]]></text>
      </staticText>

      <staticText>
        <reportElement x="140" y="0" width="7" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[.]]></text>
      </staticText>

      <staticText>
        <reportElement x="210" y="0" width="7" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[.]]></text>
      </staticText>

      <staticText>
        <reportElement x="280" y="0" width="7" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[.]]></text>
      </staticText>

      <staticText>
        <reportElement x="350" y="0" width="7" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[.]]></text>
      </staticText>

      <staticText>
        <reportElement x="420" y="0" width="7" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[.]]></text>
      </staticText>

      <staticText>
        <reportElement x="490" y="0" width="7" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[.]]></text>
      </staticText>

      <staticText>
        <reportElement x="560" y="0" width="7" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[.]]></text>
      </staticText>

      <staticText>
        <reportElement x="630" y="0" width="7" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[.]]></text>
      </staticText>

      <staticText>
        <reportElement x="700" y="0" width="7" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[1]]></text>
      </staticText>


<!--
      <staticText>
        <reportElement x="0" y="0" width="720" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[.         .         .         .         .         .         .         .         .          .          1]]></text>
      </staticText>
-->

      <staticText>
        <reportElement x="0" y="14" width="730" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[0         1         2         3         4         5         6         7         8         9         0]]></text>
      </staticText>

      <staticText>
        <reportElement x="0" y="28" width="73" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[ 123456789]]></text>
      </staticText>

      <staticText>
        <reportElement x="70" y="28" width="73" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[ 123456789]]></text>
      </staticText>

      <staticText>
        <reportElement x="140" y="28" width="73" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[ 123456789]]></text>
      </staticText>

      <staticText>
        <reportElement x="210" y="28" width="73" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[ 123456789]]></text>
      </staticText>

      <staticText>
        <reportElement x="280" y="28" width="73" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[ 123456789]]></text>
      </staticText>

      <staticText>
        <reportElement x="350" y="28" width="73" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[ 123456789]]></text>
      </staticText>

      <staticText>
        <reportElement x="420" y="28" width="73" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[ 123456789]]></text>
      </staticText>

      <staticText>
        <reportElement x="490" y="28" width="73" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[ 123456789]]></text>
      </staticText>

      <staticText>
        <reportElement x="560" y="28" width="73" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[ 123456789]]></text>
      </staticText>

      <staticText>
        <reportElement x="630" y="28" width="73" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[ 123456789]]></text>
      </staticText>


      <staticText>
        <reportElement x="0" y="42" width="14" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[x]]></text>
      </staticText>

      <staticText>
        <reportElement x="7" y="56" width="14" height="14"/>
          <textElement><font fontName="Courier New" size="12"/></textElement>
        <text><![CDATA[y]]></text>
      </staticText>


    </band>

  </detail>

</jasperReport>
import java.sql.*;  
import java.util.HashMap;   
import java.util.Map;  
import net.sf.jasperreports.engine.JRException;   
import net.sf.jasperreports.engine.JasperCompileManager;   
import net.sf.jasperreports.engine.JasperFillManager;   
import net.sf.jasperreports.engine.JasperExportManager;   
import net.sf.jasperreports.engine.JasperPrint;   
import net.sf.jasperreports.engine.JasperReport;   
import net.sf.jasperreports.engine.design.JasperDesign;   
 
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.export.JRTextExporter;
import net.sf.jasperreports.engine.export.JRTextExporterParameter;    
import net.sf.jasperreports.engine.xml.JRXmlLoader;
   
public class Ex_11_03  {  

  public static void main(String [] args)  {  
    try  {  

      JasperDesign jasperDesign = JRXmlLoader.load("Ex_11_03.jrxml");  
      JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);  

      Connection conn =
      DriverManager.getConnection(
        "jdbc:oracle:thin:@172.17.5.24:1521:newora11",
        "rene",  // username
        "rene"   // password
      );

      Map parameters = new HashMap();  

      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);  

      JRTextExporter txtExporter = new JRTextExporter();

      txtExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

      //   5 * 14 =  70
      // 100 *  7 = 700

      txtExporter.setParameter(JRTextExporterParameter.BETWEEN_PAGES_TEXT ,"\f");       

//    Do the following two really play a role?
//
//    txtExporter.setParameter(JRTextExporterParameter.PAGE_HEIGHT        , new Integer( 70));
//    txtExporter.setParameter(JRTextExporterParameter.PAGE_WIDTH         , new Integer(707));

      txtExporter.setParameter(JRTextExporterParameter.CHARACTER_WIDTH    , new Integer(  7));
      txtExporter.setParameter(JRTextExporterParameter.CHARACTER_HEIGHT   , new Integer( 14));

//    txtExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,myfile.toString());
      txtExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,"Ex_11_03.txt");
      txtExporter.exportReport();

    }  
    catch (Exception e)  {  
      System.out.println(e);  
    }  
  }  

}