JasperReports একটি জনপ্রিয় ওপেন সোর্স রিপোর্টিং টুল যা Spring Framework এর সাথে খুব সহজে ইন্টিগ্রেট করা যায়। Spring Framework এর মধ্যে JasperReports ব্যবহার করে আপনি ডাইনামিক এবং কাস্টম রিপোর্ট তৈরি করতে পারবেন, যা বিভিন্ন ফরম্যাটে (যেমন PDF, HTML, Excel, CSV) এক্সপোর্ট করা যাবে।
Spring Boot বা Spring MVC অ্যাপ্লিকেশন ব্যবহার করে JasperReports রিপোর্ট তৈরি এবং রেন্ডার করার প্রক্রিয়া সাধারণত খুবই সোজা। এখানে Spring MVC এবং Spring Boot এ JasperReports ইন্টিগ্রেশন দেখানো হবে।
Spring Framework এর সাথে JasperReports ইন্টিগ্রেশন
ধাপ ১: Maven ডিপেনডেন্সি
প্রথমে, আপনার pom.xml ফাইলে JasperReports এর ডিপেনডেন্সি অন্তর্ভুক্ত করুন।
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.17.0</version>
</dependency>
এটি JasperReports এর লাইব্রেরি আপনার প্রজেক্টে অন্তর্ভুক্ত করবে। এছাড়াও আপনি যদি Spring Boot ব্যবহার করেন, তাহলে Spring Boot Starter Web ডিপেনডেন্সি ব্যবহার করতে হবে, যা সাধারণভাবে HTTP এন্ডপয়েন্টে রিপোর্ট জেনারেট করার জন্য দরকারি।
ধাপ ২: JasperReports Template তৈরি করা
JasperReports এর রিপোর্ট ডিজাইন সাধারণত .jrxml ফাইল আকারে থাকে, যা আপনি Jaspersoft Studio অথবা iReport Designer দিয়ে তৈরি করতে পারেন। এই ফাইলগুলি পরে .jasper ফাইলে কম্পাইল হয়, যেটি রিপোর্ট জেনারেট করতে ব্যবহৃত হয়।
ধরা যাক, আপনি একটি সাধারণ Employee রিপোর্ট তৈরি করতে চান।
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="515"
leftMargin="40" rightMargin="40" topMargin="40" bottomMargin="40">
<field name="employeeId" class="java.lang.Integer"/>
<field name="employeeName" class="java.lang.String"/>
<field name="department" class="java.lang.String"/>
<detail>
<band height="20">
<textField>
<reportElement x="0" y="0" width="200" height="20"/>
<textFieldExpression><![CDATA[$F{employeeId}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="200" y="0" width="200" height="20"/>
<textFieldExpression><![CDATA[$F{employeeName}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="400" y="0" width="200" height="20"/>
<textFieldExpression><![CDATA[$F{department}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
এখানে, employeeId, employeeName, এবং department ফিল্ডের মান টেবিল আকারে প্রদর্শিত হবে।
ধাপ ৩: Spring Boot এ JasperReports সেটআপ
Spring Boot অ্যাপ্লিকেশন সেটআপ করতে, নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করতে হবে:
Spring Boot Application Class:
একটি
@SpringBootApplicationক্লাস তৈরি করুন।
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ReportApplication {
public static void main(String[] args) {
SpringApplication.run(ReportApplication.class, args);
}
}
JasperReports Service ক্লাস:
এখন একটি JasperReports Service তৈরি করুন যা রিপোর্ট ফিল এবং এক্সপোর্ট করবে।
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Value;
import java.util.*;
@Service
public class ReportService {
@Value("${report.template.path}")
private String reportTemplatePath;
public byte[] generateReport() throws JRException {
// Compile the .jrxml file to JasperReport object
JasperReport jasperReport = JasperCompileManager.compileReport(reportTemplatePath);
// Prepare data for the report (using a sample list of employees)
List<Employee> employees = getEmployees(); // Assume getEmployees() fetches data
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(employees);
// Fill the report with data
Map<String, Object> parameters = new HashMap<>();
parameters.put("ReportTitle", "Employee Report");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);
// Export the report to PDF
return JasperExportManager.exportReportToPdf(jasperPrint);
}
// A simple method to simulate fetching employee data
private List<Employee> getEmployees() {
List<Employee> employees = new ArrayList<>();
employees.add(new Employee(1, "John Doe", "HR"));
employees.add(new Employee(2, "Jane Smith", "Finance"));
return employees;
}
}
এখানে generateReport মেথডটি .jrxml ফাইল কম্পাইল করবে এবং তারপর JRBeanCollectionDataSource ব্যবহার করে রিপোর্টটি পূর্ণ করবে। শেষে, JasperExportManager ব্যবহার করে রিপোর্টটি পিডিএফ আকারে এক্সপোর্ট করবে।
- Employee ক্লাস:
public class Employee {
private int employeeId;
private String employeeName;
private String department;
public Employee(int employeeId, String employeeName, String department) {
this.employeeId = employeeId;
this.employeeName = employeeName;
this.department = department;
}
public int getEmployeeId() {
return employeeId;
}
public String getEmployeeName() {
return employeeName;
}
public String getDepartment() {
return department;
}
}
ধাপ ৪: Report Controller
এখন, একটি Spring MVC Controller তৈরি করুন, যা রিপোর্ট জেনারেট করে এবং HTTP response এ পিডিএফ রিপোর্ট পাঠাবে।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
@RestController
public class ReportController {
@Autowired
private ReportService reportService;
@GetMapping("/report")
public void generateReport(HttpServletResponse response) throws Exception {
// Generate the report and get the PDF content as byte array
byte[] reportContent = reportService.generateReport();
// Set response type and headers for PDF
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline; filename=employee_report.pdf");
// Write the report content to the response output stream
response.getOutputStream().write(reportContent);
}
}
এখানে, /report এন্ডপয়েন্টে কল করার মাধ্যমে employee_report.pdf রিপোর্ট পিডিএফ আকারে ব্রাউজারে প্রদর্শিত হবে।
ধাপ ৫: Application Properties
Spring Boot এ JasperReports ব্যবহার করার জন্য application.properties অথবা application.yml ফাইলে কনফিগারেশন নির্ধারণ করা যেতে পারে, যেমন রিপোর্ট টেমপ্লেটের পাথ।
report.template.path=classpath:reports/EmployeeReport.jrxml
- JasperReports এবং Spring Framework এর ইন্টিগ্রেশন সহজ এবং কার্যকরী। JasperReports আপনার Spring Boot অ্যাপ্লিকেশনে কাস্টম এবং ডাইনামিক রিপোর্ট তৈরি করতে সহায়ক।
- JasperReports Service ক্লাসের মাধ্যমে আপনি JRBeanCollectionDataSource ব্যবহার করে ডেটা পূর্ণ করে JasperExportManager এর মাধ্যমে বিভিন্ন ফরম্যাটে রিপোর্ট এক্সপোর্ট করতে পারেন।
- Spring MVC Controller এর মাধ্যমে রিপোর্ট এক্সপোর্ট করা এবং HTTP response এ রিপোর্ট পাঠানো সম্ভব।
Read more