Cara Membuat Report di Java dengan JasperReport - Java Community

Cara Membuat Report di Java dengan JasperReport

Cara Membuat Report di Java dengan JasperReport - Dalam pemrograman java, kalian harus mengenal library JasperReport atau IReport. Pada tutorial java kali ini saya akan membahas apa itu JasperReport, bagaimana cara menggunakan JasperReport dan contoh penggunaan JasperReport.


Apa itu JasperReport?

JasperReport merupakan aplikasi berbasis open source yang digunakan untuk membuat report atau laporan pada pemrograman java. JasperReport selain digunakan untuk melakukan cetak atau printing juga memiliki keluaran laporan dalam berbagai format, seperti : Microsoft Excel, CSV, PDF, RTF, ODC, HTML dan XML. JasperReport dapat digunakan pada Java Desktop (Java Swing) maupun Java Web (Java EE).

Tutorial Cara Membuat Report

Persiapan

Tools Yang Digunakan

  • Apache Netbeans 12
  • IReport (bagi yang belum memilikinya, silahkan download jasper report di situs resminya disini)
  • Untuk database saya menggunakan Postgresql versi 14. Untuk library dapat di download disini
Library pendukung ireport seperti :
  • commons-beanutils-1.8.0.jar
  • commons-collections-2.2.1.jar
  • commons-digester-2.1.jar
  • commons-logging-1.1.1.jar
  • commons-javaflow-20060411.jar
  • iText-2.1.7.js2.jar
  • jasperreports-4.7.0.jar (*Dapat diganti dengan versi terbaru 5.6.0)
  • core-3.1.1.jar
  • jxl-2.6.10.jar
  • poi-3.7-20101029.jar
Kalian dapat download library tersebut disini
Persiapan Data
Buatlah sebuah database dengan nama db_mahasiswa.
createdb -U postgres db_mahasiswa

Buatlah sebuah Tabel dengan nama m_mahasiswa.
CREATE TABLE m_mahasiswa( id_mahasiswa bigserial, nim VARCHAR(255), nama VARCHAR(255), ttl VARCHAR(255), jurusan VARCHAR(255), alamat VARCHAR(255) );

Menambahkan data mahasiswa :
INSERT INTO m_mahasiswa(id_mahasiswa, nim, nama, ttl, jurusan, alamat) VALUES (1, '41101328', 'Akira', 'Indramayu, 27 Juli 1990', 'Teknik Informatika', 'Jln. Kavling Pemda 2 No. 269'), (2, '41101390', 'Akbar', 'Cirebon, 26 September 1990', 'Teknik Informatika', 'Kel. Gumulung Lebak - Greged'), (3, '32102438', 'Dendi', 'Indramayu, 03 Maret 1995', 'Management Informatika', 'Blok Balaidesa No. 49 - Karangampel'), (4, '31115419', 'Luqman', 'Indramayu, 17 Juli 1997', 'Komputerisasi Akuntansi', 'Blok Balaidesa No. 50 - Karangampel'), (5, '41128527', 'Hana', 'Cikampek, 09 Juli 1994', 'Teknik Informatika', 'Kel. Gumulung Lebak - Greged');
Berikut struktur project yang akan saya buat untuk membuat contoh report :
Struktur Project
Struktur Project Contoh Printing Menggunakan IReport

Tahap 1

Membuat Project Baru - Buatlah sebuah project dengan nama ContohPrinting. Seperti gambar dibawah ini :

Contoh Printing Menggunakan IReport

Contoh Printing Menggunakan IReport

Tahap 2

Membuat Class Entity - Buatlah sebuah package dengan nama com.community.entity, kemudian buat 1(satu) buah Class dengan nama Mahasiswa.
Source Code
package com.community.entity;

/**
 *
 * @author Java Community
 */
public class Mahasiswa {
    private long id;
    private String nim;
    private String nama;
    private String ttl;
    private String jurusan;
    private String alamat;

    public Mahasiswa() {
    }

    public Mahasiswa(long id, String nim, String nama, String ttl, 
            String jurusan, String alamat) {
        this.id = id;
        this.nim = nim;
        this.nama = nama;
        this.ttl = ttl;
        this.jurusan = jurusan;
        this.alamat = alamat;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNim() {
        return nim;
    }

    public void setNim(String nim) {
        this.nim = nim;
    }

    public String getNama() {
        return nama;
    }

    public void setNama(String nama) {
        this.nama = nama;
    }

    public String getTtl() {
        return ttl;
    }

    public void setTtl(String ttl) {
        this.ttl = ttl;
    }

    public String getJurusan() {
        return jurusan;
    }

    public void setJurusan(String jurusan) {
        this.jurusan = jurusan;
    }

    public String getAlamat() {
        return alamat;
    }

    public void setAlamat(String alamat) {
        this.alamat = alamat;
    }

    @Override
    public String toString() {
        return nim;
    }
}

Tahap 3

Pada tahap ini kita akan melakukan pengambilan data yang berasal dari database menggunakan JDBC, untuk itu buatlah package dengan nama com.community.sql. Didalam package tersebut kita akan membuat sebuah interface MahasiswaSQL dan 2(dua) buah Class (Koneksi dan MahasiswaSQLImpl).

Membuat Class Koneksi

Source Code
package com.community.sql;

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

public class Koneksi {
    public static Connection getKoneksi() {
        Connection koneksi = null;
        try {
            String driver = "org.postgresql.Driver";
            String url = "jdbc:postgresql://localhost:5432/db_mahasiswa";
            String user = "postgres";
            String password = "postgres";
            
            Class.forName(driver);
            koneksi = DriverManager.getConnection(url, user, password);

        } catch (ClassNotFoundException | SQLException ex) {
            ex.printStackTrace();
        }
        
        return koneksi;
    }
}

Catatan
Pada Tutorial ini saya menggunakan PostgreSQL jika kalian menggunakan database yang berbeda, silahkan ubah value dari driver, url, user dan password.

Membuat Interface MahasiswaSQL

Source Code
package com.community.sql;

import com.community.entity.Mahasiswa;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author Java Community
 */
public interface MahasiswaSQL {
    public List<Mahasiswa> getDataMahasiswa() throws SQLException;
}

Membuat Class MahasiswaSQLImpl

Source Code
package com.community.sql;

import com.community.entity.Mahasiswa;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Java Community
 */
public class MahasiswaSQLImpl implements MahasiswaSQL {

    @Override
    public List<Mahasiswa> getDataMahasiswa() throws SQLException{
        Connection con = Koneksi.getKoneksi();
        String query = "SELECT * FROM m_mahasiswa";
        Statement st = null;
        ResultSet rs = null;
        List<Mahasiswa> list = new ArrayList<>();
        try {
            st = con.createStatement();
            rs = st.executeQuery(query);
            while (rs.next()) {
                list.add(new Mahasiswa(rs.getLong("id_mahasiswa"), rs.getString("nim"),
                        rs.getString("nama"), rs.getString("ttl"), rs.getString("jurusan"),
                        rs.getString("alamat")));
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (st != null) {
                st.close();
            }
            if (rs != null) {
                rs.close();
            }
        }
        return list;
    }
}

Tahap 4

Pembuatan Tampilan JFrame, buat sebuah package dengan nama com.community.view dan buat sebuah Class dengan nama ViewPrinting.
Source Code
package com.community.view;

import com.community.controller.ControllerPrinting;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
/**
 *
 * @author Java Community
 */
public class ViewPrinting extends JFrame implements ActionListener{
    
    private final ControllerPrinting cp;
    private JTable tabel;
    private DefaultTableModel model;
    private JButton cetak;
    
    public ViewPrinting() {
        userInterface();
        cp = new ControllerPrinting(this);
    }
    
    private void userInterface(){
        setTitle("Contoh Printing Jasper Report");
        setSize(1000, 500);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setResizable(false);
        
        JPanel panelHeader = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 10));
        
        JLabel header = new JLabel("Data Mahasiswa");
        header.setHorizontalAlignment(JLabel.CENTER);
        header.setVerticalAlignment(JLabel.CENTER);
        header.setFont(new Font("Arial", Font.PLAIN, 20));
        panelHeader.add(header);
        
        getContentPane().add(panelHeader, BorderLayout.NORTH);
        
        model = new DefaultTableModel();
        model.setColumnIdentifiers(new Object[]{
            "NIM", "Nama", "Tempat, Tanggal Lahir", "Alamat", "Jurusan"
        });
        
        tabel = new JTable(model);
        getContentPane().add(new JScrollPane(tabel));
        
        JPanel panelButton = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 10));
        
        cetak = new JButton("Cetak");
        cetak.addActionListener(this);
        panelButton.add(cetak);
        
        getContentPane().add(panelButton, BorderLayout.SOUTH);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==cetak){
            cp.cetakLaporan();
        }
    }
    
    public DefaultTableModel getModel() {
        return model;
    }

}

Tahap 5

Membuat Class Controller yang akan digunakan untuk melakukan aksi cetak atau download(pdf atau excel) dari ireport. Buatlah sebuah package dengan nama com.community.controller dan buat sebuah Class dengan nama ControllerPrinting.
Source Code
package com.community.controller;

import com.community.entity.Mahasiswa;
import com.community.sql.MahasiswaSQL;
import com.community.sql.MahasiswaSQLImpl;
import com.community.view.ViewPrinting;
import java.io.File;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.view.JasperViewer;
/**
 *
 * @author Java Community
 */
public class ControllerPrinting {
    private final ViewPrinting view;
    private List<Mahasiswa> list = new ArrayList<>();

    public ControllerPrinting(ViewPrinting view) {
        this.view = view;
        getDataMahasiswa();
    }
    
    private void getDataMahasiswa(){
        try {
            MahasiswaSQL sql = new MahasiswaSQLImpl();
            list = sql.getDataMahasiswa();
            
            for(Mahasiswa obj : list){
                view.getModel().addRow(new Object[]{
                    obj, obj.getNama(), obj.getTtl(), obj.getAlamat(), obj.getJurusan()
                });
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "Gagal Mengambil Data Mahasiswa");
        }
    }
    
    public void cetakLaporan(){
        try {            
            String path = "src/com/community/printing/laporan.jrxml";
            JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(list);
            File file = new File(path);
            JasperDesign jasperDesign = JRXmlLoader.load(file);
            JasperReport report = JasperCompileManager.compileReport(jasperDesign);
            JasperPrint print = JasperFillManager.fillReport(report, null, dataSource);
            JasperViewer.viewReport(print, false);
        } catch (JRException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "Gagal Mencetak Laporan");
        }
    }
}
Catatan
Method getDataMahasiswa berfungsi untuk mengambil data dari database dan dimasukkan ke dalam JTable. dan Method cetakLaporan() merupakan method yang saya gunakan untuk melakukan printing tanpa parameter (ireport tanpa parameter).

Tahap 6

Membuat desain untuk Laporan Data Mahasiswa dengan menggunakan ireport, file yang dihasilkan berupa extention jrxml dengan nama laporan. Buat sebuah package dengan nama com.community.printing.

laporan.jrxml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.17.0.final using JasperReports Library version 6.17.0-6d93193241dd8cc42629e188b94f9e0bc5722efd  -->
<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="laporan" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="668a6afb-3e52-4004-b580-5fcb0db21b36">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <queryString>
		<![CDATA[]]>
    </queryString>
    <field name="nim" class="java.lang.String"/>
    <field name="nama" class="java.lang.String"/>
    <field name="ttl" class="java.lang.String"/>
    <field name="alamat" class="java.lang.String"/>
    <field name="jurusan" class="java.lang.String"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="74" splitType="Stretch">
            <staticText>
                <reportElement x="0" y="0" width="800" height="41" uuid="195f5f57-47f4-4c66-8124-beb76aaa96cb"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font size="20"/>
                </textElement>
                <text><![CDATA[Laporan Data Mahasiswa]]></text>
            </staticText>
            <line>
                <reportElement x="0" y="60" width="800" height="1" uuid="ecaa69f5-6bfd-4342-ace7-4601c9df5db7"/>
            </line>
        </band>
    </title>
    <columnHeader>
        <band height="21" splitType="Stretch">
            <staticText>
                <reportElement x="0" y="0" width="120" height="20" uuid="7d01a490-6081-4853-baaa-67ff7c61f83c"/>
                <box>
                    <topPen lineWidth="0.5"/>
                    <leftPen lineWidth="0.5"/>
                    <bottomPen lineWidth="0.5"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[NIM]]></text>
            </staticText>
            <staticText>
                <reportElement x="120" y="0" width="140" height="20" uuid="9520e77e-88f2-4ccb-b294-59efad9cefe2"/>
                <box>
                    <topPen lineWidth="0.5"/>
                    <leftPen lineWidth="0.5"/>
                    <bottomPen lineWidth="0.5"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[Nama]]></text>
            </staticText>
            <staticText>
                <reportElement x="260" y="0" width="190" height="20" uuid="9692e5cf-b6a0-413e-a54e-e19a15c1dbaf"/>
                <box>
                    <topPen lineWidth="0.5"/>
                    <leftPen lineWidth="0.5"/>
                    <bottomPen lineWidth="0.5"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[Tempat, Tanggal Lahir]]></text>
            </staticText>
            <staticText>
                <reportElement x="450" y="0" width="190" height="20" uuid="84d90491-d398-40fb-893e-b9132011d4d4"/>
                <box>
                    <topPen lineWidth="0.5"/>
                    <leftPen lineWidth="0.5"/>
                    <bottomPen lineWidth="0.5"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[Alamat]]></text>
            </staticText>
            <staticText>
                <reportElement x="640" y="0" width="160" height="20" uuid="d2874212-8d75-4d80-b3d3-f1acb01e7ffc"/>
                <box>
                    <topPen lineWidth="0.5"/>
                    <leftPen lineWidth="0.5"/>
                    <bottomPen lineWidth="0.5"/>
                    <rightPen lineWidth="0.5"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[Jurusan]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="21" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="120" height="20" uuid="76c64e88-31dd-41f7-974b-5d1d71a8fbf1"/>
                <box>
                    <topPen lineWidth="0.5"/>
                    <leftPen lineWidth="0.5"/>
                    <bottomPen lineWidth="0.5"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[$F{nim}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="120" y="0" width="140" height="20" uuid="4cdca43b-0d0c-4594-b6e2-a6982b13bd75"/>
                <box padding="3">
                    <topPen lineWidth="0.5"/>
                    <leftPen lineWidth="0.5"/>
                    <bottomPen lineWidth="0.5"/>
                </box>
                <textElement textAlignment="Left" verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[$F{nama}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="260" y="0" width="190" height="20" uuid="cc748e27-64af-4a33-81c5-4cdbef1b6d39"/>
                <box>
                    <topPen lineWidth="0.5"/>
                    <leftPen lineWidth="0.5"/>
                    <bottomPen lineWidth="0.5"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[$F{ttl}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="450" y="0" width="190" height="20" uuid="1b6c3ceb-e32d-4f03-a550-d74d4c23c1f2"/>
                <box padding="3">
                    <topPen lineWidth="0.5"/>
                    <leftPen lineWidth="0.5"/>
                    <bottomPen lineWidth="0.5"/>
                </box>
                <textElement textAlignment="Left" verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[$F{alamat}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="640" y="0" width="160" height="20" uuid="cdfdd5be-3dbe-40fb-88ab-7eea9b6c173c"/>
                <box>
                    <topPen lineWidth="0.5"/>
                    <leftPen lineWidth="0.5"/>
                    <bottomPen lineWidth="0.5"/>
                    <rightPen lineWidth="0.5"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[$F{jurusan}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
    <summary>
        <band height="42" splitType="Stretch"/>
    </summary>
</jasperReport>

Tahap 7

Membuat class AppMain untuk dijadikan sebagai MainClass.
Source Code
package com.community.view;

public class AppMain {
    public static void main(String[] args) {
        ViewPrinting obj = new ViewPrinting();
        obj.setVisible(true);
    }
}

Hasil output dari contoh program ireport diatas sebagai berikut :

Cara+Membuat+Report+di+Java+dengan+JasperReport

Cara menampilkan laporan di netbeans, anda perlu klik button Cetak. Berikut ini tampilan laporan Jasper Report.

Cara+Membuat+Report+di+Java+dengan+JasperReport

Berikut link Download Source Code IReport Java Swing.
Catatan
Untuk IReport 5.6.0 atau dibawahnya tidak mendukung Java 8 atau diatasnya, bagi kalian yang menggunakan Java 8 atau diatasnya kalian perlu Meng-install Java 7.
Sekian tutorial membuat laporan dengan jasperreport, silahkan tinggalkan komentar jika ada kendala dalam mengikuti tutorial diatas. Semoga bermanfaat.


Copyrighted.com Registered & Protected

Subscribe to receive free email updates:

0 Response to "Cara Membuat Report di Java dengan JasperReport"

Posting Komentar