JasperReports - Mengisi Laporan
Tujuan utama setiap alat pelaporan adalah menghasilkan dokumen berkualitas tinggi. Proses pengisian laporan membantu alat pelaporan untuk mencapai hal ini dengan memanipulasi kumpulan data.
Input utama yang diperlukan untuk proses pengisian laporan adalah -
Report Template - Ini adalah file JasperReport yang sebenarnya.
Report Parameters- Ini pada dasarnya adalah nilai bernama yang diteruskan pada waktu pengisian laporan ke mesin. Kami akan membahasnya di bab Parameter Laporan .
Data Source- Kita dapat mengisi file Jasper dari berbagai sumber data seperti query SQL, file XML, file csv, query HQL (Hibernate Query Language), kumpulan Java Beans, dll. Hal ini akan dibahas secara rinci di Laporan Bab Sumber Data .
Output yang dihasilkan dari proses ini adalah a .jrprint dokumen yang siap untuk dilihat, dicetak, atau diekspor ke format lain. Kelas fasad net.sf.jasperreports.engine.JasperFillManager biasanya digunakan untuk mengisi template laporan dengan data. Kelas ini memiliki berbagai metode fillReportXXX () yang mengisi template laporan (template dapat ditempatkan di disk, diambil dari aliran input, atau disediakan langsung sebagai dalam memori).
Ada dua kategori metode fillReportXXX () di kelas fasad ini -
Jenis pertama, terima objek java.sql.Connection sebagai parameter ketiga. Seringkali, laporan diisi dengan data dari database relasional. Ini dicapai dengan -
Hubungkan ke database melalui JDBC.
Sertakan kueri SQL di dalam templat laporan.
Mesin JasperReports menggunakan koneksi yang diteruskan dan menjalankan kueri SQL.
Sumber data laporan kemudian dihasilkan untuk mengisi laporan.
Jenis kedua, menerima objek net.sf.jasperreports.engine.JRDataSource, ketika data yang perlu diisi tersedia dalam bentuk lain.
Mengisi Template Laporan
Mari menulis template laporan. Isi file JRXML (C: \ tools \ jasperreports-5.0.1 \ test \ jasper_report_template.jrxml) adalah sebagai berikut -
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<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 = "jasper_report_template" language = "groovy" pageWidth = "595"
pageHeight = "842" columnWidth = "555" leftMargin = "20" rightMargin = "20"
topMargin = "20" bottomMargin = "20">
<queryString>
<![CDATA[]]>
</queryString>
<field name = "country" class = "java.lang.String">
<fieldDescription><![CDATA[country]]></fieldDescription>
</field>
<field name = "name" class = "java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<columnHeader>
<band height = "23">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "3"
width = "535" height = "15" backcolor = "#70A9A9" />
<box>
<bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" />
</box>
<textElement />
<text><![CDATA[]]> </text>
</staticText>
<staticText>
<reportElement x = "414" y = "3" width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Country]]></text>
</staticText>
<staticText>
<reportElement x = "0" y = "3" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Name]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height = "16">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "0"
width = "535" height = "14" backcolor = "#E5ECF9" />
<box>
<bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" />
</box>
<textElement />
<text><![CDATA[]]> </text>
</staticText>
<textField>
<reportElement x = "414" y = "0" width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font size = "9" />
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{country}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x = "0" y = "0" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle" />
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{name}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
Selanjutnya, mari teruskan kumpulan objek data Java (kacang Java), ke JasperReport Engine, untuk mengisi laporan yang telah dikompilasi ini.
Tulis POJO DataBean.java, yang mewakili objek data (kacang Java). Kelas ini mendefinisikan dua objek String yaitu 'name' dan 'country'. Simpan ke direktoriC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint.
package com.tutorialspoint;
public class DataBean {
private String name;
private String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
Tulis kelas DataBeanList.java, yang memiliki logika bisnis untuk menghasilkan kumpulan objek kacang java. Ini selanjutnya diteruskan ke mesin JasperReports, untuk menghasilkan laporan. Di sini kami menambahkan 4 objek DataBean dalam Daftar. Simpan ke direktoriC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint.
package com.tutorialspoint;
import java.util.ArrayList;
public class DataBeanList {
public ArrayList<DataBean> getDataBeanList() {
ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();
dataBeanList.add(produce("Manisha", "India"));
dataBeanList.add(produce("Dennis Ritchie", "USA"));
dataBeanList.add(produce("V.Anand", "India"));
dataBeanList.add(produce("Shrinath", "California"));
return dataBeanList;
}
/**
* This method returns a DataBean object,
* with name and country set in it.
*/
private DataBean produce(String name, String country) {
DataBean dataBean = new DataBean();
dataBean.setName(name);
dataBean.setCountry(country);
return dataBean;
}
}
Tulis file kelas utama JasperReportFill.java, yang mendapatkan koleksi kacang java dari kelas (DataBeanList) dan meneruskannya ke mesin JasperReports, untuk mengisi template laporan. Simpan ke direktoriC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint.
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class JasperReportFill {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sourceFileName =
"c://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";
DataBeanList DataBeanList = new DataBeanList();
ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource = new
JRBeanCollectionDataSource(dataList);
Map parameters = new HashMap();
try {
JasperFillManager.fillReportToFile(
sourceFileName, parameters, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
}
}
Menghasilkan Laporan
Kami sekarang akan mengkompilasi dan mengeksekusi file-file ini menggunakan proses build ANT reguler kami. File build.xml seperti yang diberikan di bawah ini -
File impor - baseBuild.xml diambil dari bab Pengaturan Lingkungan dan harus ditempatkan di direktori yang sama dengan build.xml.
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "executereport" basedir = ".">
<import file = "baseBuild.xml"/>
<target name = "executereport" depends = "compile,compilereportdesing,run">
<echo message = "Im here"/>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
Selanjutnya, buka jendela baris perintah dan buka direktori tempat build.xml ditempatkan. Terakhir, jalankan perintah ant -Dmain-class = com.tutorialspoint.JasperReportFill (executereport adalah target default) sebagai berikut -
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class = com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
compile:
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:27:
warning: 'includeantruntime' was not set, defaulting to
build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 1 source file to
C:\tools\jasperreports-5.0.1\test\classes
run:
[echo] Runnin class : com.tutorialspoint.JasperReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 8 seconds
Sebagai hasil dari eksekusi di atas, file jasper_report_template.jrprint dibuat di direktori yang sama dengan file .jasper (Dalam hal ini, file ini dibuat di C: \ tools \ jasperreports-5.0.1 \ test).