Cara Membuat Laporan PDF dan Excel di Java - Java Community

Cara Membuat Laporan PDF dan Excel di Java

Pada artikel saya sebelumnya telah membuat contoh program java untuk membuat laporan atau report menggunakan IReport. Akan tetapi di artikel tersebut saya masih menggunakan Java Ant, sedangkan kali ini saya akan menggunakan maven dependency. Kemudian untuk contoh program report kali ini, kalian dapat langsung melakukan unduh atau download laporannya dalam bentuk file PDF dan Excel.

Tutorial Cara Membuat Laporan PDF dan Excel di Java

Persiapan

Tools Yang Digunakan

Catatan
Karena kita menggunakan maven, pastikan kalian terkoneksi ke internet untuk melakukan unduh atau download dependency.
Database
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');

Tahap 1

Membuat Project Baru - Buatlah sebuah project dengan nama ContohPrintingMaven. Seperti gambar dibawah ini :
Cara Membuat Laporan PDF dan Excel di Pemrograman Java

Tahap 2

Karena kita menggunakan maven dependency, maka kita perlu untuk menambahkan dependency atau library yang kita butuhkan. Cara untuk menambahkannya kalian perlu membuka file pom.xml. Berikut dependency yang harus ditambahkan.
pom.xml
  <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
    <modelVersion>4.0.0</modelVersion>
    
    <groupId>com.community</groupId>
    <artifactId>ContohPrintingMaven</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>
    
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>6.18.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>5.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.3.1</version>
        </dependency>
    </dependencies>
</project>
  

Tahap 3

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
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Mahasiswa {
    private long id;
    private String nim;
    private String nama;
    private String ttl;
    private String jurusan;
    private String alamat;
}

Tahap 4

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(Mahasiswa.builder()
                        .id(rs.getLong("id_mahasiswa"))
                        .nim(rs.getString("nim"))
                        .nama(rs.getString("nama"))
                        .ttl(rs.getString("ttl"))
                        .jurusan(rs.getString("jurusan"))
                        .alamat(rs.getString("alamat"))
                        .build());
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (st != null) {
                st.close();
            }
            if (rs != null) {
                rs.close();
            }
        }
        return list;
    }
}

Tahap 5

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 controllerPrinting;
    private JTable tabel;
    private DefaultTableModel model;
    private JButton buttonPDF, buttonXLSX;
    
    public ViewPrinting() {
        userInterface();
        controllerPrinting = 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));
        
        buttonPDF = new JButton("Unduh PDF");
        buttonPDF.addActionListener(this);
        panelButton.add(buttonPDF);
        
        buttonXLSX = new JButton("Unduh XLSX");
        buttonXLSX.addActionListener(this);
        panelButton.add(buttonXLSX);
        
        getContentPane().add(panelButton, BorderLayout.SOUTH);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==buttonPDF){
            controllerPrinting.unduhRepotPDF();
        } else if(e.getSource()==buttonXLSX){
            controllerPrinting.unduhReportXLSX();
        }
    }
    
    public DefaultTableModel getModel() {
        return model;
    }

}

Tahap 6

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.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.export.SimpleExporterInput;
import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput;
import net.sf.jasperreports.export.SimplePdfExporterConfiguration;
import net.sf.jasperreports.export.SimpleXlsxReportConfiguration;
/**
 *
 * @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");
        }
    }
    
    private JasperPrint getJasperPrint() throws JRException {
        String path = "/laporan.jrxml";
        JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(list);
        JasperReport report = JasperCompileManager.compileReport(getClass().getResourceAsStream(path));
        return JasperFillManager.fillReport(report, null, dataSource);
    }

    public void unduhRepotPDF() {
        try {
            String outputFile = "D://Data-Mahasiswa";
            
            JRPdfExporter exporter = new JRPdfExporter();
            exporter.setExporterInput(new SimpleExporterInput(getJasperPrint()));
            exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputFile + ".pdf"));
            
            SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
            exporter.setConfiguration(configuration);

            exporter.exportReport();
        } catch (JRException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "Gagal Mengunduh Laporan Data Mahasiswa");
        }
    }

    public void unduhReportXLSX() {
        try {
            String outputFile = "D://Data-Mahasiswa";
            
            JRXlsxExporter exporter = new JRXlsxExporter();
            exporter.setExporterInput(new SimpleExporterInput(getJasperPrint()));
            exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputFile + ".xlsx"));
            
            SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration();
            configuration.setOnePagePerSheet(true);
            configuration.setDetectCellType(true);
            configuration.setCollapseRowSpan(false);
            exporter.setConfiguration(configuration);

            exporter.exportReport();
        } catch (JRException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "Gagal Mengunduh Laporan Data Mahasiswa");
        }
    }
}
Catatan
Pada method getJasperPrint() terdapat variabel String path, itu merupakan direktori tempat kita menyimpan file laporan.jrxml, dan di dalam method unduhRepotPDF() dan unduhReportXLSX() juga terdapat variabel String outputFile yang merupakan hasil dari unduhan report tersebut akan disimpan.

Tahap 7

Pada folder scr/main buatlah sebuah folder dengan nama resources. Kemudian buat desain untuk Laporan Data Mahasiswa dengan menggunakan JasperSoft Studio, file yang dihasilkan berupa extention jrxml dengan nama laporan. Hasil dari design laporan tersebut disimpan didalam folder resources.

Berikut source code untuk report-nya :
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 8

Membuat class AppMain untuk dijadikan sebagai MainClass.
AppMain
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 membuat laporan diatas sebagai berikut :
Cara Membuat Program Untuk Membuat Laporan PDF dan Excel

Hasil unduh Laporan PDF dari aplikasi tersebut :
Cara Membuat Program Untuk Membuat Laporan PDF dan Excel
Hasil unduh Laporan Excel dari aplikasi tersebut :
Cara Membuat Program Untuk Membuat Laporan PDF dan Excel
.
Berikut link Download Source Code IReport Java Swing.
Sekian tutorial cara membuat laporan PDF dan Excel di pemrograman java menggunakan menggunakan maven, silahkan tinggalkan komentar jika ada kendala dalam mengikuti tutorial diatas. Semoga bermanfaat.

Subscribe to receive free email updates:

0 Response to "Cara Membuat Laporan PDF dan Excel di Java"

Posting Komentar