JasperReports একটি অত্যন্ত জনপ্রিয় ওপেন সোর্স রিপোর্টিং টুল যা Java অ্যাপ্লিকেশনগুলির জন্য বিভিন্ন ফরম্যাটে রিপোর্ট তৈরি করতে ব্যবহৃত হয়। JasperReports বিভিন্ন ধরনের Data Sources সাপোর্ট করে, যার মধ্যে অন্যতম XML Data Source এবং JSON Data Source। এই দুটি Data Source এর মাধ্যমে আপনি XML এবং JSON ফাইল থেকে ডেটা রিড করে রিপোর্ট তৈরি করতে পারবেন।
নিচে XML এবং JSON Data Source ব্যবহার করে রিপোর্ট তৈরির প্রক্রিয়া বিস্তারিতভাবে আলোচনা করা হবে।
1. XML Data Source হ্যান্ডল করা
XML ডেটা সোর্স ব্যবহার করে JasperReports এ রিপোর্ট তৈরি করতে হলে, প্রথমে একটি XML File প্রয়োজন হবে যা রিপোর্টের জন্য ডেটা প্রদান করবে। এর পর, JasperReports এর JRXML ফাইল ব্যবহার করে সেই XML ডেটাকে প্রসেস করতে হবে।
XML Data Source Example:
Step 1: XML ফাইল তৈরি করা
ধরা যাক, আমাদের একটি employee.xml ফাইল রয়েছে, যা কর্মচারীদের তথ্য ধারণ করে।
<employees>
<employee>
<id>1</id>
<name>John Doe</name>
<age>30</age>
</employee>
<employee>
<id>2</id>
<name>Jane Smith</name>
<age>25</age>
</employee>
</employees>
Step 2: JasperReports Template (JRXML) তৈরি করা
এখন JasperReports এর জন্য একটি JRXML ফাইল তৈরি করতে হবে যেখানে XML ডেটার ফিল্ডগুলি ব্যবহৃত হবে।
<?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="Employee Report" pageWidth="595" pageHeight="842" columnWidth="515"
leftMargin="40" rightMargin="40" topMargin="40" bottomMargin="40">
<field name="id" class="java.lang.Integer"/>
<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["Employee 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>
এখানে, <field> ট্যাগে id, name, এবং age ফিল্ডগুলো সংজ্ঞায়িত করা হয়েছে যা XML ডেটা ফাইল থেকে নেওয়া হবে।
Step 3: JasperReports Service (Java) তৈরি করা
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRXmlDataSource;
import org.springframework.stereotype.Service;
import java.io.InputStream;
@Service
public class JasperReportsService {
public byte[] generateXMLReport() throws JRException {
// Load the Jasper template
InputStream jasperTemplate = getClass().getResourceAsStream("/reports/employee_report.jrxml");
// Compile the Jasper report
JasperReport jasperReport = JasperCompileManager.compileReport(jasperTemplate);
// Load XML DataSource
InputStream xmlData = getClass().getResourceAsStream("/data/employee.xml");
JRXmlDataSource dataSource = new JRXmlDataSource(xmlData, "/employees/employee");
// Fill report
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, dataSource);
// Export to PDF
return JasperExportManager.exportReportToPdf(jasperPrint);
}
}
এখানে, JRXmlDataSource ব্যবহার করে XML ডেটা সোর্স লোড করা হয়েছে এবং JasperFillManager দিয়ে রিপোর্টটি পূর্ণ করা হয়েছে।
Step 4: Controller তৈরি করা
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.RestController;
@RestController
public class JasperReportsController {
@Autowired
private JasperReportsService jasperReportsService;
@GetMapping("/generate-xml-report")
public ResponseEntity<byte[]> generateXMLReport() throws JRException {
byte[] report = jasperReportsService.generateXMLReport();
return ResponseEntity.ok()
.header("Content-Type", "application/pdf")
.header("Content-Disposition", "inline; filename=employee_report.pdf")
.body(report);
}
}
এখন /generate-xml-report এ GET রিকোয়েস্ট পাঠানোর মাধ্যমে আপনি রিপোর্ট জেনারেট করতে পারবেন।
2. JSON Data Source হ্যান্ডল করা
JSON ডেটা সোর্স ব্যবহার করার সময়ও JasperReports JRJsonDataSource ব্যবহার করে JSON ডেটা লোড করা হয়। JSON ডেটা ফাইল থেকে JasperReport তৈরি করা খুবই সহজ এবং সোজা।
JSON Data Source Example:
Step 1: JSON ফাইল তৈরি করা
{
"employees": [
{"id": 1, "name": "John Doe", "age": 30},
{"id": 2, "name": "Jane Smith", "age": 25}
]
}
Step 2: JasperReports Template (JRXML) তৈরি করা
JSON ফাইলের জন্য একই JRXML ফাইল ব্যবহার করা যাবে, যা XML এর জন্য ব্যবহার হয়েছিল, শুধু ফিল্ডগুলোর ডেটা সোর্স JSON-এ হবে।
<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="Employee Report" pageWidth="595" pageHeight="842" columnWidth="515"
leftMargin="40" rightMargin="40" topMargin="40" bottomMargin="40">
<field name="id" class="java.lang.Integer"/>
<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["Employee 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>
Step 3: JasperReports Service (Java) JSON Data Source ব্যবহার করে
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRJsonDataSource;
import org.springframework.stereotype.Service;
import java.io.InputStream;
@Service
public class JasperReportsService {
public byte[] generateJSONReport() throws JRException {
// Load the Jasper template
InputStream jasperTemplate = getClass().getResourceAsStream("/reports/employee_report.jrxml");
// Compile the Jasper report
JasperReport jasperReport = JasperCompileManager.compileReport(jasperTemplate);
// Load JSON DataSource
InputStream jsonData = getClass().getResourceAsStream("/data/employee.json");
JRJsonDataSource dataSource = new JRJsonDataSource(jsonData, "/employees");
// Fill report
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, dataSource);
// Export to PDF
return JasperExportManager.exportReportToPdf(jasperPrint);
}
}
Step 4: Controller তৈরি করা
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.RestController;
@RestController
public class JasperReportsController {
@Autowired
private JasperReportsService jasperReportsService;
@GetMapping("/generate-json-report")
public ResponseEntity<byte[]> generateJSONReport() throws JRException {
byte[] report = jasperReportsService.generateJSONReport();
return ResponseEntity.ok()
.header("Content-Type", "application/pdf")
.header("Content-Disposition", "inline; filename=employee_report.pdf")
.body(report);
}
}
এখানে, JSON ডেটা সোর্স ব্যবহার করে রিপোর্ট তৈরি করা হয়েছে, এবং /generate-json-report রিকোয়েস্ট পাঠানোর মাধ্যমে আপনি JSON থেকে রিপোর্ট তৈরি করতে পারবেন।
- XML Data Source এবং JSON Data Source ব্যবহার করে আপনি JasperReports থেকে ডেটা ফাইলের ভিতর থেকে ডেটা নিয়ে রিপোর্ট তৈরি করতে পারবেন। JasperReports JRXmlDataSource এবং JRJsonDataSource ক্লাস ব্যবহার করে এই ডেটা সোর্সগুলোর সঙ্গে কাজ করতে সক্ষম।
- Spring Boot বা Java-based অ্যাপ্লিকেশনগুলোতে JasperReports ইন্টিগ্রেট করা সহজ, এবং আপনি JSON এবং XML থেকে ডেটা নিয়ে কাস্টম রিপোর্ট তৈরি করতে পারেন।
- JasperReports আপনাকে PDF, Excel, HTML, CSV সহ একাধিক ফরম্যাটে রিপোর্ট এক্সপোর্ট করার সুবিধা দেয়, যা অ্যাপ্লিকেশনগুলিতে রিপোর্টিংয়ের প্রয়োজন মেটাতে ব্যবহৃত হয়।
Read more