RESTful Web Services এর মাধ্যমে JasperReports রিপোর্ট জেনারেট করা

asperReports এর Integration Java EE এবং Spring এর সাথে - জ্যাসপার রিপোর্ট (JasperReports) - Java Technologies

346

JasperReports এবং RESTful Web Services এর মাধ্যমে রিপোর্ট জেনারেট করা একটি জনপ্রিয় প্র্যাকটিস যা web applications-এ রিপোর্ট ডেলিভারি এবং প্রসেসিং সহজ করে তোলে। JasperReports একটি শক্তিশালী Java ভিত্তিক রিপোর্টিং টুল এবং RESTful Web Services ব্যবহারের মাধ্যমে আপনি রিপোর্টের আউটপুট যেমন PDF, HTML, Excel ইত্যাদি JSON বা অন্য কোনো ফরম্যাটে রিটার্ন করতে পারেন।

এখানে আমরা একটি Spring Boot RESTful Web Service তৈরি করব যা JasperReports ব্যবহার করে রিপোর্ট জেনারেট করবে এবং সেই রিপোর্টটি ক্লায়েন্টে একটি REST API-র মাধ্যমে প্রদান করবে।


ধাপ ১: Spring Boot Application সেটআপ করা

প্রথমে একটি Spring Boot Application তৈরি করতে হবে এবং প্রয়োজনীয় ডিপেনডেন্সি যুক্ত করতে হবে।

pom.xml এ ডিপেনডেন্সি যুক্ত করা:

<dependencies>
    <!-- Spring Boot Starter Web (for REST API) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- JasperReports dependency -->
    <dependency>
        <groupId>net.sf.jasperreports</groupId>
        <artifactId>jasperreports</artifactId>
        <version>6.16.0</version>
    </dependency>

    <!-- Jackson for JSON (optional for REST API) -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>

    <!-- Spring Boot Starter for Thymeleaf (optional if using templates) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
</dependencies>

এই ডিপেনডেন্সি গুলি দিয়ে আপনি Spring Boot এবং JasperReports ব্যবহার করতে পারবেন। spring-boot-starter-web REST API তৈরি করতে ব্যবহৃত হবে এবং jasperreports JasperReports লাইব্রেরি অন্তর্ভুক্ত করবে।


ধাপ ২: JasperReport তৈরি করা

এখন, একটি JasperReport তৈরি করতে হবে যা REST API এর মাধ্যমে ব্যবহারকারীকে আউটপুট প্রদান করবে। আমরা একটি সাধারণ Employee Report তৈরি করব যেখানে কর্মচারী সম্পর্কিত কিছু তথ্য থাকবে।

Employee Report (employeeReport.jrxml)

<?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="EmployeeReport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
              
    <field name="id" class="java.lang.Integer"/>
    <field name="name" class="java.lang.String"/>
    <field name="department" class="java.lang.String"/>

    <detail>
        <band height="20">
            <textField>
                <reportElement x="0" y="0" width="50" height="20"/>
                <textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="60" y="0" width="200" height="20"/>
                <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="270" y="0" width="150" height="20"/>
                <textFieldExpression><![CDATA[$F{department}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

এটি একটি সাধারণ Employee Report যেখানে id, name, এবং department ফিল্ড থাকবে।


ধাপ ৩: Spring Boot Controller তৈরি করা

Spring Boot এ একটি RESTful Controller তৈরি করতে হবে যা রিপোর্ট তৈরির জন্য API হ্যান্ডল করবে এবং সেই রিপোর্টটি বিভিন্ন ফরম্যাটে ক্লায়েন্টকে ফিরিয়ে দিবে।

EmployeeReportController.java

import net.sf.jasperreports.engine.*;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.ByteArrayOutputStream;
import java.util.HashMap;
import java.util.Map;

@RestController
public class EmployeeReportController {

    @GetMapping("/generateReport")
    public byte[] generateReport() {
        try {
            // JasperReports report compile and fill
            JasperReport jasperReport = JasperCompileManager.compileReport("employeeReport.jrxml");

            // Parameters (if any)
            Map<String, Object> parameters = new HashMap<>();
            parameters.put("ReportTitle", "Employee Report");

            // Sample Data (use JRBeanCollectionDataSource or JRResultSetDataSource for actual data)
            JRDataSource dataSource = new JRBeanCollectionDataSource(getEmployeeData());

            // Fill the report
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);

            // Export the report to PDF
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);

            // Return the PDF as byte array
            return outputStream.toByteArray();

        } catch (JRException e) {
            e.printStackTrace();
            return null;
        }
    }

    // Dummy employee data
    private List<Employee> getEmployeeData() {
        List<Employee> employeeList = new ArrayList<>();
        employeeList.add(new Employee(1, "John Doe", "HR"));
        employeeList.add(new Employee(2, "Jane Smith", "IT"));
        return employeeList;
    }
}

Explanation:

  • @RestController: এটি একটি RESTful controller যা HTTP রিকোয়েস্ট হ্যান্ডল করে।
  • @GetMapping("/generateReport"): এটি একটি GET রিকোয়েস্ট হ্যান্ডলার যা রিপোর্ট তৈরি করবে।
  • JasperCompileManager.compileReport: .jrxml ফাইলটি কম্পাইল করে।
  • JasperFillManager.fillReport: রিপোর্টে ডেটা যোগ করে।
  • JasperExportManager.exportReportToPdfStream: রিপোর্টটি PDF ফরম্যাটে এক্সপোর্ট করে।
  • রিপোর্টটি একটি byte array আকারে ক্লায়েন্টে পাঠানো হবে।

ধাপ ৪: Employee ক্লাস তৈরি করা

এখানে Employee ক্লাস যা রিপোর্টে ব্যবহৃত হবে:

public class Employee {
    private int id;
    private String name;
    private String department;

    // Constructor, Getters and Setters
    public Employee(int id, String name, String department) {
        this.id = id;
        this.name = name;
        this.department = department;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getDepartment() {
        return department;
    }
}

ধাপ ৫: Report Exporting (PDF, Excel, etc.)

রিপোর্ট এক্সপোর্ট করার জন্য আমরা এক্সপোর্ট ফরম্যাটের প্রোপার উপায় ব্যবহার করেছি:

  1. PDF Export: রিপোর্টটি PDF ফরম্যাটে রিটার্ন করা হচ্ছে।
  2. আপনি চাইলে Excel, CSV বা অন্য কোন ফরম্যাটে রিপোর্ট রিটার্ন করতে পারেন। উদাহরণস্বরূপ, Excel এক্সপোর্ট করতে JRXlsExporter ব্যবহার করা যাবে।
JRXlsExporter xlsExporter = new JRXlsExporter();
xlsExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
xlsExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
xlsExporter.exportReport();

ধাপ ৬: Client Request and Response

এখন আপনি GET /generateReport রিকোয়েস্ট পাঠালে PDF আউটপুটটি রিটার্ন হবে, যেটি আপনি একটি browser বা Postman-এর মাধ্যমে পরীক্ষা করতে পারবেন।

Output Response:

রিপোর্টটি PDF ফরম্যাটে ক্লায়েন্টে রিটার্ন হবে।


  • JasperReports এবং Spring Boot RESTful Web Services এর মাধ্যমে আপনি রিপোর্ট তৈরি করতে পারেন এবং সেই রিপোর্টটি বিভিন্ন ফরম্যাটে ক্লায়েন্টকে সরবরাহ করতে পারেন।
  • রিপোর্ট জেনারেট করার জন্য আপনি JasperReports API ব্যবহার করতে পারেন এবং ডেটা সোর্স হিসেবে JRBeanCollectionDataSource বা অন্য যে কোনো ডেটা সোর্স ব্যবহার করতে পারেন।
  • REST API এ রিপোর্ট রিটার্ন করার জন্য আপনি byte arrays ব্যবহার করতে পারেন, যা ক্লায়েন্টে ডাউনলোড হিসেবে পাঠানো হবে।
  • JasperReports দিয়ে PDF, Excel, HTML, CSV ইত্যাদি ফরম্যাটে রিপোর্ট তৈরি এবং এক্সপোর্ট করা সম্ভব।

এটি একটি পূর্ণাঙ্গ উদাহরণ যেখানে JasperReports এবং RESTful Web Services এর মাধ্যমে রিপোর্ট জেনারেট করার পদ্ধতি দেখানো হয়েছে।

Content added By
Promotion

Are you sure to start over?

Loading...