JasperReports একটি জনপ্রিয় ওপেন সোর্স রিপোর্টিং টুল যা Java অ্যাপ্লিকেশনগুলির জন্য রিপোর্ট তৈরি করতে ব্যবহৃত হয়। এটি বিভিন্ন ধরনের ডেটা ফরম্যাটে (যেমন PDF, HTML, Excel, CSV) রিপোর্ট জেনারেট করতে সক্ষম। JasperReports সাধারণত JasperReports Library বা JasperReports Server হিসেবে ব্যবহৃত হয় এবং এটি বিভিন্ন ডেটাবেস, XML, CSV, বা JavaBeans-এর সাথে ইন্টিগ্রেট করা যায়।
Spring Framework-এর সাথে JasperReports ইন্টিগ্রেট করার মাধ্যমে আপনি Spring-based অ্যাপ্লিকেশনে রিপোর্ট তৈরি এবং পরিচালনা করতে পারবেন। এই ইন্টিগ্রেশন সাধারণত Spring MVC বা Spring Boot অ্যাপ্লিকেশনগুলোতে ব্যবহৃত হয়।
JasperReports এর সাথে Java এবং Spring Integration
JasperReports এর সাথে Java এবং Spring Integration করার জন্য প্রধানত তিনটি উপাদান থাকে:
- JasperReports Library: Java-based reporting tool যা JasperReports ফাইল (JRXML) তৈরি এবং রিপোর্ট জেনারেট করতে ব্যবহৃত হয়।
- JasperReports Server: একটি Web-based Server যা Reports এবং Dashboards হোস্ট এবং ম্যানেজ করার জন্য ব্যবহৃত হয়।
- JasperReports Library Integration: Java অ্যাপ্লিকেশন বা Spring Framework এর সাথে রিপোর্ট তৈরি করার জন্য
jasperreportsলাইব্রেরি ব্যবহৃত হয়।
Spring Framework-এ JasperReports ইন্টিগ্রেট করার জন্য jasperreports এবং spring-jasperreports লাইব্রেরি যোগ করতে হবে, যাতে JasperReports ম্যানেজ এবং জেনারেট করা রিপোর্ট Spring Context-এর মাধ্যমে পরিচালিত হতে পারে।
Step-by-Step Guide: JasperReports Integration in Spring Boot
Step 1: Dependency Setup
Spring Boot অ্যাপ্লিকেশনে JasperReports লাইব্রেরি ইন্টিগ্রেট করতে প্রথমে Maven বা Gradle ডিপেন্ডেন্সি যোগ করতে হবে।
Maven Dependency:
<dependencies>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.19.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-fonts</artifactId>
<version>6.19.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
</dependencies>
Gradle Dependency:
dependencies {
implementation 'net.sf.jasperreports:jasperreports:6.19.0'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'net.sf.jasperreports:jasperreports-fonts:6.19.0'
implementation 'org.springframework:spring-web'
}
Step 2: JasperReports Template (.jrxml) তৈরি করা
JasperReports রিপোর্ট তৈরি করার জন্য, আপনাকে একটি .jrxml ফাইল তৈরি করতে হবে যা রিপোর্টের ডিজাইন এবং ফিল্ডগুলির ডেটা মডেল নির্ধারণ করবে।
Example: report_template.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="Sample Report" pageWidth="595" pageHeight="842" columnWidth="515"
leftMargin="40" rightMargin="40" topMargin="40" bottomMargin="40">
<field name="name" class="java.lang.String"/>
<field name="age" class="java.lang.Integer"/>
<title>
<band height="50">
<textField>
<reportElement x="0" y="0" width="500" height="30"/>
<textFieldExpression><![CDATA["Sample Report"]]></textFieldExpression>
</textField>
</band>
</title>
<detail>
<band height="30">
<textField>
<reportElement x="0" y="0" width="250" height="30"/>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="260" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA[$F{age}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
এখানে, name এবং age ফিল্ডে ডেটা থাকবে এবং প্রতিটি পংক্তি একটি নির্দিষ্ট রিপোর্টে উপস্থাপিত হবে।
Step 3: JasperReports Service তৈরি করা
Spring Boot অ্যাপ্লিকেশন থেকে JasperReports ব্যবহার করার জন্য একটি JasperReports Service তৈরি করতে হবে যা রিপোর্টের ইনপুট ডেটা প্রদান করবে এবং রিপোর্ট তৈরি করবে।
JasperReportsService.java
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class JasperReportsService {
@Value("classpath:report_template.jrxml")
private InputStream jasperTemplate;
public byte[] generateReport(List<Person> persons) throws JRException {
// Compile the Jasper report
JasperReport jasperReport = JasperCompileManager.compileReport(jasperTemplate);
// Set parameters
Map<String, Object> parameters = new HashMap<>();
parameters.put("ReportTitle", "Person Report");
// Create JRDataSource
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(persons);
// Fill report
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);
// Export the report to PDF
return JasperExportManager.exportReportToPdf(jasperPrint);
}
}
Step 4: Controller তৈরি করা
Spring Boot Controller তৈরি করে ব্যবহারকারীকে রিপোর্ট জেনারেট করার জন্য একটি API Endpoint প্রদান করুন।
JasperReportsController.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
@RestController
public class JasperReportsController {
@Autowired
private JasperReportsService jasperReportsService;
@GetMapping("/generate-report")
public ResponseEntity<byte[]> generateReport(@RequestParam("name") String name) throws Exception {
List<Person> persons = Arrays.asList(new Person(name, 25), new Person("Jane", 30));
byte[] report = jasperReportsService.generateReport(persons);
return ResponseEntity.ok()
.header("Content-Type", "application/pdf")
.header("Content-Disposition", "inline; filename=report.pdf")
.body(report);
}
}
এখানে, /generate-report URL এ GET রিকোয়েস্ট পাঠানোর মাধ্যমে আপনি রিপোর্ট জেনারেট করতে পারেন এবং PDF আউটপুট পাবেন।
Step 5: Person Model
public class Person {
private String name;
private int age;
// Constructor, Getter, and Setter
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getters and Setters
}
Step 6: Running the Application
আপনি Spring Boot অ্যাপ্লিকেশনটি রান করলে, /generate-report?name=John রিকোয়েস্ট পাঠানোর মাধ্যমে PDF রিপোর্ট পাবেন।
JasperReports এর সাথে Spring Integration-এর সুবিধা:
- Flexible Reporting:
- JasperReports শক্তিশালী এবং নমনীয়, যার ফলে আপনি JSON, XML বা অন্য কোনো ডেটার সোর্স থেকে রিপোর্ট তৈরি করতে পারেন।
- Support for Multiple Output Formats:
- JasperReports একাধিক আউটপুট ফরম্যাট সমর্থন করে, যেমন PDF, Excel, HTML, CSV ইত্যাদি।
- Comprehensive Report Features:
- JasperReports ব্যবহার করে আপনি পৃষ্ঠা নম্বর, চার্ট, গ্রাফ, ডেটা টেবিল, সাব-রিপোর্ট, প্যারামিটার এবং কাস্টম লজিক সহ রিপোর্ট তৈরি করতে পারবেন।
- Easy Spring Integration:
- Spring Boot বা Spring MVC অ্যাপ্লিকেশনগুলির সাথে JasperReports একত্রিত করা সহজ, এবং রিপোর্টগুলি দ্রুত এবং কার্যকরীভাবে তৈরি এবং প্রদান করা যায়।
Spring Framework এবং JasperReports একত্রিত করার মাধ্যমে আপনি সহজে রিপোর্ট তৈরি করতে পারেন, যা REST API বা Web Application থেকে সরাসরি JSON বা ডেটাবেস ডেটা ব্যবহার করে তৈরি হয়। JasperReports-এর মাধ্যমে বিভিন্ন আউটপুট ফরম্যাট (যেমন PDF, Excel, HTML) সহজেই সাপোর্ট করা যায়। JasperReports Spring Integration ডেভেলপারদের রিপোর্ট তৈরির জন্য শক্তিশালী এবং নমনীয় সলিউশন প্রদান করে।
Read more