สอนสร้างรายงานด้วย JasperReports

สอนสร้างรายงานด้วย JasperReports

JasperReports เป็นไลบรารี Java สำหรับออกแบบและสร้างรายงาน โดยกำหนดรูปแบบรายงานในไฟล์ `.jrxml` แล้วเติมข้อมูลจากฐานข้อมูลหรือจากรายการในโค้ด จากนั้นส่งออกเป็น PDF, Excel หรือ HTML บทความนี้จะให้โครงสร้างพื้นฐานของ template และตัวอย่างโค้ดที่สร้างรายงานจากรายการข้อมูล

หมายเหตุการทดสอบ: เครื่องที่ใช้เขียนบทความนี้ไม่มีไลบรารี JasperReports และยังไม่ได้รันโค้ดในบทความ ก่อนใช้งานให้เพิ่มดีเพนเดนซีตามเอกสารของโครงการแล้วทดสอบเอง

สิ่งที่ต้องเตรียม

ภาพรวมการทำงาน

ภาพแผนผัง: template .jrxml รวมกับข้อมูล แล้วได้ไฟล์ PDF
ภาพแผนผัง: template .jrxml รวมกับข้อมูล แล้วได้ไฟล์ PDF

ขั้นที่ 1: ออกแบบ template

ไฟล์ `.jrxml` เป็น XML ที่กำหนดฟิลด์ข้อมูล ส่วนหัว รายละเอียด และส่วนท้ายของรายงาน ตัวอย่างฟิลด์

<field name="name" class="java.lang.String"/>
<field name="score" class="java.lang.Integer"/>

ในส่วน `<detail>` ใส่ `textField` ที่อ้างถึง `$F{name}` และ `$F{score}` เพื่อแสดงค่าของแต่ละแถว

ขั้นที่ 2: เตรียมข้อมูลและสร้างรายงาน

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import java.util.List;
import java.util.Map;

public class ReportDemo {
    public static class Row {
        private final String name;
        private final int score;
        public Row(String name, int score) { this.name = name; this.score = score; }
        public String getName() { return name; }
        public int getScore() { return score; }
    }

    public static void main(String[] args) throws Exception {
        List<Row> rows = List.of(new Row("สมชาย", 85), new Row("สมหญิง", 72));
        JasperReport report = JasperCompileManager.compileReport("scores.jrxml");
        JasperPrint print = JasperFillManager.fillReport(report, Map.of(), new JRBeanCollectionDataSource(rows));
        JasperExportManager.exportReportToPdfFile(print, "scores.pdf");
    }
}

ข้อผิดพลาดที่มักพบ

ขั้นต่อไป

ลองเพิ่มกลุ่มข้อมูลในรายงาน เช่น รวมคะแนนแยกตามวิชา หรือใช้พารามิเตอร์ส่งชื่อโรงเรียนเข้าไปในรายงาน

สรุป

JasperReports แยกการออกแบบรายงานออกจากข้อมูล template กำหนดหน้าตา โค้ดเติมข้อมูล และส่งออกเป็นไฟล์ที่ต้องการ การแยกส่วนนี้ทำให้ปรับแบบรายงานได้โดยไม่ต้องแก้โค้ดหลัก