JasperReports রিপোর্ট তৈরির জন্য বিভিন্ন ধরণের Data Sources সমর্থন করে, যার মাধ্যমে আপনি আপনার রিপোর্টের জন্য ডেটা সরবরাহ করতে পারেন। রিপোর্ট তৈরি করার সময় আপনাকে একটি উপযুক্ত Data Source নির্বাচন করতে হবে যা আপনার রিপোর্টের ডেটা পেতে সাহায্য করবে।
JasperReports এর জন্য প্রধান ডেটা সোর্সগুলো হলো:
- JDBC Data Source
- XML Data Source
- CSV Data Source
- JavaBeans Data Source
- Custom Data Source
এছাড়া JasperReports Studio এবং JasperReports Library উভয় ক্ষেত্রেই ডেটা সোর্স কনফিগার করা যেতে পারে।
1. JDBC Data Source
JDBC ডেটা সোর্স ব্যবহার করা হয় যখন আপনি RDBMS (Relational Database Management System) থেকে ডেটা গ্রহণ করেন। JDBC কনফিগারেশনটি আপনার রিপোর্টে ডেটা পেতে এবং ব্যবহার করতে সহায়তা করে।
Best Practice:
- JDBC ডেটা সোর্সে ব্যবহার করা সবচেয়ে জনপ্রিয় ডেটা সংরক্ষণ মাধ্যম। এটি MySQL, PostgreSQL, Oracle, SQL Server ইত্যাদি ডেটাবেসের জন্য উপযুক্ত।
JDBC Data Source কনফিগারেশন:
- JDBC Connection তৈরি:
- JDBC URL, ডেটাবেস ব্যবহারকারী নাম, পাসওয়ার্ড ইত্যাদি ব্যবহার করে ডেটাবেসের সাথে সংযোগ স্থাপন করতে হবে।
- JasperReports JDBC Data Source ব্যবহার:
- JasperReports Studio-তে ডেটা সোর্স কনফিগার করার জন্য, JDBC Connection সেট করতে হবে এবং পরে তার ডেটা ফিল্ড ম্যাপ করতে হবে।
উদাহরণ:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRResultSetDataSource;
public class JdbcDataSourceExample {
public static void main(String[] args) {
try {
// JDBC connection to the database
String jdbcUrl = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
Connection connection = DriverManager.getConnection(jdbcUrl, username, password);
// Query to get data for the report
String query = "SELECT name, age FROM persons";
JRResultSetDataSource jrDataSource = new JRResultSetDataSource(connection.createStatement().executeQuery(query));
// Compile and fill the report
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/report.jrxml");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, jrDataSource);
// Export to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "output/report.pdf");
connection.close();
} catch (SQLException | JRException e) {
e.printStackTrace();
}
}
}
2. XML Data Source
XML ডেটা সোর্সে, আপনি XML ফাইল থেকে ডেটা পেতে পারেন এবং এটি একটি সারণি আকারে রিপোর্টে রেন্ডার করতে পারেন।
Best Practice:
- যখন আপনি XML ফাইল থেকে ডেটা পেতে চান, এটি JasperReports এ একটি সাধারণ পদ্ধতি।
XML Data Source কনফিগারেশন:
- XML Data Source তৈরি করা:
- XML ফাইলের গঠন এবং ডেটার জন্য একটি XML Schema প্রয়োজন।
- XML Data Source ব্যবহার করা:
- JasperReports Studio-তে XML Data Source কনফিগার করতে হয়।
উদাহরণ:
<person>
<name>John Doe</name>
<age>30</age>
</person>
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRXmlDataSource;
public class XmlDataSourceExample {
public static void main(String[] args) {
try {
// Define the XML file and XPath expression
String xmlFile = "path/to/data.xml";
JRXmlDataSource jrXmlDataSource = new JRXmlDataSource(xmlFile, "/person");
// Compile the report
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/report.jrxml");
// Fill the report with data
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, jrXmlDataSource);
// Export to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "output/report.pdf");
} catch (JRException e) {
e.printStackTrace();
}
}
}
3. CSV Data Source
CSV (Comma Separated Values) ডেটা সোর্স ব্যবহৃত হয় যখন আপনার ডেটা একটি CSV ফাইল আকারে থাকে।
Best Practice:
- আপনি যদি সহজেই spreadsheet data (যেমন Excel থেকে export করা ডেটা) থেকে রিপোর্ট তৈরি করতে চান তবে CSV উপযুক্ত।
CSV Data Source কনফিগারেশন:
- CSV ফাইল তৈরি করা:
- একটি CSV ফাইল তৈরি করুন যেখানে প্রতিটি কলাম একটি data field প্রতিনিধিত্ব করে।
- CSV Data Source ব্যবহার করা:
- CSV ফাইল থেকে ডেটা পাঠানোর জন্য JasperReports Studio-এ ডেটা সোর্স কনফিগার করতে হবে।
উদাহরণ:
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRCsvDataSource;
public class CsvDataSourceExample {
public static void main(String[] args) {
try {
// Define the CSV file path
String csvFile = "path/to/data.csv";
JRCsvDataSource jrCsvDataSource = new JRCsvDataSource(csvFile);
// Compile the report
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/report.jrxml");
// Fill the report with CSV data
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, jrCsvDataSource);
// Export to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "output/report.pdf");
} catch (JRException e) {
e.printStackTrace();
}
}
}
4. JavaBeans Data Source
JavaBeans Data Source এমন ক্ষেত্রে ব্যবহৃত হয় যেখানে আপনি Java Object বা Collection থেকে ডেটা পেতে চান।
Best Practice:
- আপনি যদি Java Object বা Collection থেকে রিপোর্ট তৈরি করতে চান তবে JavaBeans Data Source ব্যবহার করুন।
JavaBeans Data Source কনফিগারেশন:
- JavaBeans Object তৈরি করা:
- JavaBeans ক্লাস তৈরি করুন এবং সেটিকে একটি Collection বা List আকারে রিপোর্টে ব্যবহার করুন।
- JavaBeans Data Source ব্যবহার করা:
- JasperReports Studio-এ JavaBeans ব্যবহার করে ডেটা সোর্স কনফিগার করতে হবে।
উদাহরণ:
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import java.util.*;
public class JavaBeansDataSourceExample {
public static void main(String[] args) {
try {
// Create a list of Person objects
List<Person> personList = new ArrayList<>();
personList.add(new Person("John Doe", 30));
personList.add(new Person("Jane Smith", 25));
// Create a JRBeanCollectionDataSource from the List
JRBeanCollectionDataSource jrDataSource = new JRBeanCollectionDataSource(personList);
// Compile the report
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/report.jrxml");
// Fill the report with data
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, jrDataSource);
// Export to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "output/report.pdf");
} catch (JRException e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
// Constructor, Getters, Setters
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
5. Custom Data Source
আপনি যদি একটি custom data source ব্যবহার করতে চান, তাহলে JRDataSource ইন্টারফেস ইমপ্লিমেন্ট করতে পারেন এবং এটি আপনার কাস্টম ডেটা সোর্সের জন্য ব্যবহার করতে পারেন।
Best Practice:
- আপনার ডেটার উৎস যদি ডাইনামিক বা বিশেষ কনফিগারেশনের প্রয়োজন হয়, তবে কাস্টম ডেটা সোর্স ব্যবহার করা সবচেয়ে ভাল।
- JasperReports-এর মাধ্যমে আপনি বিভিন্ন ধরনের Data Source থেকে ডেটা নিয়ে রিপোর্ট তৈরি করতে পারেন।
- JDBC, XML, CSV, JavaBeans, এবং custom sources ব্যবহার করে আপনি সহজেই ডেটার উৎস কনফিগার করতে পারেন।
- JasperReports Studio এবং JasperReports Library উভয়ই ডেটা সোর্স কনফিগার করার জন্য খুবই কার্যকর।
- JasperReports ব্যবহার করলে আপনি খুব সহজেই বিভিন্ন ফরম্যাটে রিপোর্ট এক্সপোর্ট করতে পারবেন (PDF, Excel, CSV, HTML, etc.)।
এই টুলটি আপনার Java অ্যাপ্লিকেশনের জন্য শক্তিশালী এবং নমনীয় রিপোর্ট তৈরির জন্য কার্যকর।
JasperReports একটি রিপোর্টিং লাইব্রেরি যা ডেটা থেকে রিপোর্ট তৈরি করতে সাহায্য করে। JasperReports-এর Data Source কনসেপ্ট হল সেই মেকানিজম যার মাধ্যমে রিপোর্টে ব্যবহৃত ডেটা সংগ্রহ করা হয়। JasperReports বিভিন্ন ধরনের ডেটা সোর্সের সাথে কাজ করতে পারে, যেমন JavaBeans, SQL databases, XML files, CSV files, Collection (List, Map), এবং Custom Data Sources।
এখানে, আমরা JasperReports এর ডেটা সোর্স কনসেপ্ট এবং এর ব্যবহার নিয়ে বিস্তারিত আলোচনা করব।
JasperReports Data Sources এর ধরন
- JREmptyDataSource:
- এটি একটি খালি ডেটা সোর্স যা কোনো ডেটা না থাকলেও রিপোর্ট তৈরি করতে সাহায্য করে। এটি সাধারণত একটি ফরম্যাট রিপোর্ট তৈরি করতে ব্যবহৃত হয় যেখানে ডেটার প্রয়োজন হয় না।
- JRBeanCollectionDataSource:
- এটি একটি JavaBeans টাইপের ডেটা সোর্স যা Java Beans-এর একটি কালেকশন থেকে ডেটা নিয়ে কাজ করে। এটি খুবই জনপ্রিয় এবং JavaBeans অবজেক্টগুলোকে রিপোর্টে সন্নিবেশিত করার জন্য ব্যবহৃত হয়।
- JDBC DataSource:
- JDBC ডেটা সোর্সটি ডেটাবেস থেকে ডেটা আনার জন্য ব্যবহৃত হয়। আপনি সাধারণ SQL কুয়েরি চালিয়ে ডেটা রিপোর্টে আনতে পারেন।
- Custom DataSource:
- যদি আপনাকে কাস্টম ডেটা সোর্স তৈরি করতে হয়, যেমন কোনো বিশেষ ডেটা ফরম্যাট বা ডেটার ধরন, তাহলে আপনি কাস্টম ডেটা সোর্স তৈরি করতে পারবেন।
Data Source কিভাবে কাজ করে?
JasperReports-এর ডেটা সোর্স মূলত ডেটার উৎস সরবরাহ করে, এবং JasperFillManager এর মাধ্যমে রিপোর্টে ডেটা পূর্ণ করা হয়। রিপোর্টের ডিজাইনে ডেটা মডেলগুলোর মধ্যে ডেটা ম্যাচিং করে তারপর ডেটা উপস্থাপন করা হয়। ডেটা সোর্স একটি JRDataSource ইন্টারফেস ইমপ্লিমেন্ট করে যা JasperReports-এর সঙ্গে কাজ করতে পারে।
Data Source এর সাথে JasperReports এর কাজ করার পদ্ধতি
1. JREmptyDataSource ব্যবহার করা (কোনো ডেটার উৎস নেই)
JREmptyDataSource হল একটি খালি ডেটা সোর্স যা কোন ডেটা নিয়ে কাজ করে না। এটি সাধারণত static রিপোর্ট তৈরি করার জন্য ব্যবহার হয় যেখানে ডেটা প্রয়োজন হয় না।
কোড উদাহরণ:
import net.sf.jasperreports.engine.*;
public class JREmptyDataSourceExample {
public static void main(String[] args) throws JRException {
// .jasper ফাইলের পাথ
String reportPath = "path_to_report_template.jasper";
// JREmptyDataSource তৈরি
JRDataSource dataSource = new JREmptyDataSource();
// Report ফিলিং
JasperPrint jasperPrint = JasperFillManager.fillReport(reportPath, null, dataSource);
// PDF আউটপুট
JasperExportManager.exportReportToPdfFile(jasperPrint, "output_report.pdf");
}
}
এই ক্ষেত্রে, JREmptyDataSource কোন ডেটা ছাড়া রিপোর্ট তৈরি করবে।
2. JRBeanCollectionDataSource ব্যবহার করা (JavaBeans Data Source)
যখন আপনার JavaBeans অবজেক্টের একটি কালেকশন (যেমন একটি List) থাকে এবং আপনি সেটি রিপোর্টে দেখতে চান, তখন JRBeanCollectionDataSource ব্যবহার করা হয়।
কোড উদাহরণ:
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import java.util.ArrayList;
import java.util.List;
public class JRBeanCollectionDataSourceExample {
public static void main(String[] args) throws JRException {
// ডেটা তৈরি
List<Employee> employees = new ArrayList<>();
employees.add(new Employee(1, "Rahim"));
employees.add(new Employee(2, "Karim"));
// JRBeanCollectionDataSource তৈরি
JRDataSource dataSource = new JRBeanCollectionDataSource(employees);
// .jasper ফাইলের পাথ
String reportPath = "path_to_report_template.jasper";
// রিপোর্ট ফিলিং
JasperPrint jasperPrint = JasperFillManager.fillReport(reportPath, null, dataSource);
// PDF আউটপুট
JasperExportManager.exportReportToPdfFile(jasperPrint, "employee_report.pdf");
}
}
class Employee {
private int id;
private String name;
// Constructor
public Employee(int id, String name) {
this.id = id;
this.name = name;
}
// Getter and Setter methods
public int getId() { return id; }
public String getName() { return name; }
}
এখানে, Employee ক্লাসের একটি List তৈরি করা হয়েছে এবং সেটি JRBeanCollectionDataSource এর মাধ্যমে JasperReports-এ পাঠানো হয়েছে। রিপোর্টে id এবং name ফিল্ডগুলো প্রিন্ট হবে।
3. JDBC DataSource ব্যবহার করা (Database থেকে Data)
JasperReports সাধারণত JDBC ডেটা সোর্স ব্যবহার করে ডেটাবেস থেকে ডেটা নিয়ে কাজ করে। আপনি SQL কুয়েরি ব্যবহার করে ডেটা নিয়ে রিপোর্ট তৈরি করতে পারেন।
কোড উদাহরণ:
import net.sf.jasperreports.engine.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JDBCDataSourceExample {
public static void main(String[] args) throws JRException, SQLException {
// ডেটাবেস কনফিগারেশন
String url = "jdbc:mysql://localhost:3306/your_database";
String username = "root";
String password = "password";
Connection connection = DriverManager.getConnection(url, username, password);
// SQL কুয়েরি
String sql = "SELECT id, name FROM employees";
// .jasper ফাইলের পাথ
String reportPath = "path_to_report_template.jasper";
// রিপোর্ট ফিলিং (JDBC ডেটা সোর্স ব্যবহার করে)
JasperPrint jasperPrint = JasperFillManager.fillReport(reportPath, null, connection);
// PDF আউটপুট
JasperExportManager.exportReportToPdfFile(jasperPrint, "employee_report.pdf");
// কানেকশন বন্ধ করুন
connection.close();
}
}
এখানে, JDBC Connection ব্যবহার করে ডেটাবেস থেকে ডেটা নিয়ে JasperFillManager দিয়ে রিপোর্ট তৈরি করা হয়েছে। SQL কুয়েরি "SELECT id, name FROM employees" দিয়ে ডেটা নেয়া হয়েছে এবং PDF আউটপুট তৈরি করা হয়েছে।
4. Custom DataSource
আপনি যদি কোনো কাস্টম ডেটা সোর্স ব্যবহার করতে চান, তাহলে JRDataSource ইন্টারফেস ইমপ্লিমেন্ট করে কাস্টম ডেটা সোর্স তৈরি করতে পারেন। এর মাধ্যমে আপনি যে কোনো ডেটা সোর্স থেকে ডেটা পাঠাতে পারবেন।
কোড উদাহরণ (Custom DataSource):
import net.sf.jasperreports.engine.*;
import java.util.Iterator;
import java.util.List;
public class CustomDataSourceExample {
public static void main(String[] args) throws JRException {
// কাস্টম ডেটা সোর্স
CustomDataSource dataSource = new CustomDataSource(getEmployeeList());
// .jasper ফাইলের পাথ
String reportPath = "path_to_report_template.jasper";
// রিপোর্ট ফিলিং
JasperPrint jasperPrint = JasperFillManager.fillReport(reportPath, null, dataSource);
// PDF আউটপুট
JasperExportManager.exportReportToPdfFile(jasperPrint, "employee_report.pdf");
}
// Employee List তৈরি করার মেথড
public static List<Employee> getEmployeeList() {
// কিছু ডেটা তৈরি করা
}
}
class CustomDataSource implements JRDataSource {
private Iterator<Employee> iterator;
public CustomDataSource(List<Employee> employees) {
this.iterator = employees.iterator();
}
@Override
public boolean next() {
return iterator.hasNext();
}
@Override
public Object getFieldValue(JRField jrField) throws JRException {
Employee employee = iterator.next();
if ("id".equals(jrField.getName())) {
return employee.getId();
} else if ("name".equals(jrField.getName())) {
return employee.getName();
}
return null;
}
}
এখানে, CustomDataSource একটি কাস্টম ডেটা সোর্স তৈরি করে যেখানে আপনি কাস্টম ডেটার উপর ভিত্তি করে ডেটা প্রক্রিয়া করতে পারেন।
- JREmptyDataSource ব্যবহার করা হয় যখন কোনো ডেটা সোর্স নেই বা একটি স্ট্যাটিক রিপোর্ট তৈরি করতে চান।
- JRBeanCollectionDataSource JavaBeans-এর একটি কালেকশন থেকে ডেটা নিয়ে কাজ করে এবং এটি খুবই জনপ্রিয়।
- JDBC DataSource ডেটাবেস থেকে ডেটা নিয়ে কাজ করতে ব্যবহৃত হয়।
- Custom DataSource ব্যবহার করে আপনি আপনার কাস্টম ডেটা সোর্স তৈরি করতে পারেন।
এইভাবে JasperReports-এর ডেটা সোর্স কনসেপ্টের মাধ্যমে আপনি রিপোর্ট তৈরি করার জন্য যে কোনো ধরনের ডেটা ব্যবহার করতে পারবেন।
JasperReports JDBC Data Source ব্যবহার করে ডাটাবেস থেকে ডেটা নিয়ে রিপোর্ট তৈরি করতে পারে। এই পদ্ধতিতে, JDBC DataSource ব্যবহার করে আপনার ডাটাবেস থেকে ডেটা ক্যাপচার করা হয়, এবং তারপর সেই ডেটাকে একটি রিপোর্টে রূপান্তর করা হয়। নিচে ধাপে ধাপে JDBC Data Source ব্যবহার করে JasperReports রিপোর্ট তৈরি করার প্রক্রিয়া বর্ণনা করা হয়েছে।
ধাপ 1: Maven Dependency যোগ করা
JasperReports ব্যবহার করার জন্য প্রথমে আপনার pom.xml ফাইলে প্রয়োজনীয় ডিপেনডেন্সি যোগ করুন।
<dependencies>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.19.1</version> <!-- আপনার প্রকল্পের জন্য সর্বশেষ সংস্করণ ব্যবহার করুন -->
</dependency>
<dependency>
<groupId>com.mysql.cj</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version> <!-- MySQL JDBC ড্রাইভার -->
</dependency>
</dependencies>
এখানে MySQL JDBC Connector ডিপেনডেন্সি যুক্ত করা হয়েছে। আপনার ডাটাবেস অনুযায়ী আপনি এটি পরিবর্তন করতে পারেন (যেমন PostgreSQL, Oracle ইত্যাদি)।
ধাপ 2: JasperReports Template (JRXML) তৈরি করা
এখন আপনি JRXML ফাইল তৈরি করুন, যেখানে রিপোর্টের কাঠামো থাকবে। এটি একটি টেমপ্লেট হিসেবে কাজ করবে, যা ডাটাবেস থেকে ডেটা নিয়ে রিপোর্ট জেনারেট করবে।
Example: Simple Report (example_report.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" language="java" pageWidth="595" pageHeight="842"
columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<!-- Report fields -->
<field name="employee_id" class="java.lang.Integer"/>
<field name="employee_name" class="java.lang.String"/>
<field name="employee_salary" class="java.lang.Double"/>
<!-- Report details -->
<detail>
<band height="20">
<textField>
<reportElement x="0" y="0" width="200" height="20"/>
<textFieldExpression><![CDATA[$F{employee_id}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="220" y="0" width="200" height="20"/>
<textFieldExpression><![CDATA[$F{employee_name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="440" y="0" width="100" height="20"/>
<textFieldExpression><![CDATA[$F{employee_salary}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
এই টেমপ্লেটে, আমরা employee_id, employee_name, এবং employee_salary ফিল্ড যুক্ত করেছি, যা ডাটাবেস থেকে আসবে এবং রিপোর্টের ডিটেইলস সেকশনে প্রদর্শিত হবে।
ধাপ 3: ডাটাবেস সংযোগ এবং রিপোর্ট তৈরি
এখন JDBC Data Source ব্যবহার করে ডাটাবেস থেকে ডেটা নিয়ে রিপোর্ট তৈরি করা হবে। নিচে JDBC সংযোগের মাধ্যমে ডেটা ফিল্টার করা এবং JasperReports ব্যবহার করে রিপোর্ট তৈরি করার একটি উদাহরণ দেওয়া হল।
Java কোড: JDBC DataSource ব্যবহার করে রিপোর্ট তৈরি করা
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.view.JasperViewer;
import java.sql.*;
import java.util.HashMap;
import java.util.Map;
public class JasperReportWithJDBC {
public static void main(String[] args) {
try {
// JDBC Connection Setup
String url = "jdbc:mysql://localhost:3306/your_database"; // আপনার ডাটাবেস URL
String username = "your_username";
String password = "your_password";
Connection connection = DriverManager.getConnection(url, username, password);
// JasperReport Compile (JRXML থেকে Jasper ফাইল তৈরি)
JasperReport jasperReport = JasperCompileManager.compileReport("example_report.jrxml");
// Parameters for report (e.g., title, filters)
Map<String, Object> parameters = new HashMap<>();
parameters.put("ReportTitle", "Employee Report");
// Query to fetch data from database
String query = "SELECT employee_id, employee_name, employee_salary FROM employees";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(query);
// Data Source (JDBC ResultSet)
JRResultSetDataSource jrResultSetDataSource = new JRResultSetDataSource(resultSet);
// Fill Report with data from database
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, jrResultSetDataSource);
// Export the report to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "employee_report.pdf");
// Optionally, view the report on screen
JasperViewer.viewReport(jasperPrint, false);
System.out.println("Report generated successfully!");
} catch (SQLException | JRException e) {
e.printStackTrace();
}
}
}
কোড ব্যাখ্যা:
- JDBC Connection Setup: ডাটাবেসের সাথে সংযোগ স্থাপন করতে
DriverManager.getConnection()ব্যবহার করা হয়েছে। - Report Compilation: JasperCompileManager.compileReport("example_report.jrxml") কমান্ড দিয়ে JRXML ফাইলটি কম্পাইল করে JasperReport তৈরি করা হয়েছে।
- Query Execution: ডাটাবেস থেকে ডেটা পেতে SQL প্রশ্ন চালানো হয়েছে এবং ResultSet তৈরি করা হয়েছে।
- DataSource: JRResultSetDataSource ব্যবহার করে JDBC ResultSet কে JasperReports DataSource-এ রূপান্তরিত করা হয়েছে।
- Report Filling: JasperFillManager.fillReport() ব্যবহার করে রিপোর্টটি ডেটার সাথে পূর্ণ করা হয়েছে।
- PDF Export: JasperExportManager.exportReportToPdfFile() ব্যবহার করে রিপোর্টটি PDF ফরম্যাটে এক্সপোর্ট করা হয়েছে।
- JasperViewer: রিপোর্টটি স্ক্রীনে দেখতে JasperViewer.viewReport() ব্যবহার করা হয়েছে।
ধাপ 4: রিপোর্ট তৈরি এবং ফলাফল
রিপোর্ট তৈরি হওয়ার পর, এটি employee_report.pdf ফাইল আকারে আপনার প্রোজেক্টের মধ্যে তৈরি হবে। এছাড়া, আপনি রিপোর্টটিকে স্ক্রীনে দেখতেও পারবেন।
Summary of Steps for JasperReports with JDBC DataSource
- Maven Dependency:
jasperreportsএবং JDBC ড্রাইভার আপনার pom.xml ফাইলে যোগ করুন। - JRXML File: JasperReports টেমপ্লেট (JRXML) তৈরি করুন যা রিপোর্টের কাঠামো নির্ধারণ করবে।
- JDBC Connection: ডাটাবেস থেকে ডেটা নিয়ে রিপোর্ট তৈরি করতে JDBC সংযোগ স্থাপন করুন।
- Fill Report: JDBC ResultSet থেকে ডেটা সংগ্রহ করে রিপোর্টে ফিল করুন।
- Export to PDF/Other Formats: JasperReports ব্যবহার করে রিপোর্টটি PDF বা অন্য ফরম্যাটে এক্সপোর্ট করুন।
- JDBC Data Source ব্যবহার করে JasperReports সহজেই ডাটাবেস থেকে ডেটা নিয়ে রিপোর্ট তৈরি করা সম্ভব।
- JasperCompileManager, JasperFillManager, এবং JasperExportManager এর সাহায্যে আপনি রিপোর্ট তৈরি, ফিল এবং এক্সপোর্ট করতে পারেন।
- JasperReports-এর সাথে JDBC সংযোগ করা একটি শক্তিশালী পদ্ধতি, যার মাধ্যমে আপনি ডাটাবেস থেকে তথ্য সংগ্রহ করে সুন্দরভাবে ফরম্যাটেড রিপোর্ট তৈরি করতে পারেন।
JasperReports এ Bean Collection Data Source ব্যবহারের মাধ্যমে আপনি Java Beans এর একটি কালেকশনকে রিপোর্ট ডেটা সোর্স হিসেবে ব্যবহার করতে পারেন। এই পদ্ধতিতে, আপনি Java Bean-এ ডেটা মডেল তৈরি করে সেই ডেটা ব্যবহার করে JasperReports তৈরি করতে পারবেন। এটি List বা ArrayList বা অন্যান্য Java Collection এর মাধ্যমে করা যায়।
Bean Collection Data Source ব্যবহারের সুবিধা হলো, আপনি Java Beans থেকে সরাসরি ডেটা বের করে JasperReports এ ব্যবহার করতে পারবেন এবং এর ফলে কোনো ডাটাবেস বা অন্য কনফিগারেশন প্রয়োজন নেই।
Bean Collection Data Source এর প্রক্রিয়া
Step 1: Java Bean তৈরি করুন
প্রথমে, আপনাকে একটি Java Bean ক্লাস তৈরি করতে হবে, যা রিপোর্টে প্রদর্শিত হবে।
public class Employee {
private int id;
private String name;
private String department;
// Constructor
public Employee(int id, String name, String department) {
this.id = id;
this.name = name;
this.department = department;
}
// Getters and Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
}
এখানে, Employee একটি সাধারণ Java Bean ক্লাস যা id, name, এবং department ফিল্ড ধারণ করছে।
Step 2: Collection তৈরি করুন
আপনার Java Bean ক্লাসের একটি কালেকশন তৈরি করতে হবে। সাধারণত এটি একটি List (যেমন ArrayList) হতে পারে, যা Bean এর ইনস্ট্যান্স ধারণ করবে।
import java.util.ArrayList;
import java.util.List;
public class EmployeeReport {
public static void main(String[] args) {
List<Employee> employees = new ArrayList<>();
// Add employee data
employees.add(new Employee(1, "John Doe", "HR"));
employees.add(new Employee(2, "Jane Smith", "Finance"));
employees.add(new Employee(3, "Michael Johnson", "IT"));
// Pass the list to the report
try {
generateReport(employees);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void generateReport(List<Employee> employees) throws Exception {
// Create the JasperReport data source (Bean Collection)
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(employees);
// Compile the JasperReport .jrxml file to a JasperReport object
JasperReport jasperReport = JasperCompileManager.compileReport("employee_report.jrxml");
// Fill the report with the data source and empty parameters
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, dataSource);
// Display the report using JasperViewer
JasperViewer.viewReport(jasperPrint);
}
}
এখানে, employees একটি ArrayList যা Employee Bean এর ইনস্ট্যান্স ধারণ করছে। পরে, এটি JRBeanCollectionDataSource দিয়ে রিপোর্ট ডেটা সোর্স হিসেবে ব্যবহার করা হবে।
Step 3: .jrxml (JasperReports Template) তৈরি করুন
এখন, একটি JasperReports Template (যা .jrxml ফরম্যাটে থাকে) তৈরি করতে হবে, যেখানে Employee Bean এর প্রপার্টি (যেমন name, department, id) ব্যবহার করা হবে।
<?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">
<title>Employee Report</title>
<columnHeader>
<staticText>
<reportElement x="0" y="0" width="100" height="20"/>
<textElement/>
<text><![CDATA[ID]]></text>
</staticText>
<staticText>
<reportElement x="100" y="0" width="100" height="20"/>
<textElement/>
<text><![CDATA[Name]]></text>
</staticText>
<staticText>
<reportElement x="200" y="0" width="100" height="20"/>
<textElement/>
<text><![CDATA[Department]]></text>
</staticText>
</columnHeader>
<detail>
<textField>
<reportElement x="0" y="20" width="100" height="20"/>
<textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="20" width="100" height="20"/>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="200" y="20" width="100" height="20"/>
<textFieldExpression><![CDATA[$F{department}]]></textFieldExpression>
</textField>
</detail>
</jasperReport>
এই employee_report.jrxml ফাইলটি একটি সাধারণ রিপোর্ট টেমপ্লেট যা id, name, এবং department ফিল্ডগুলোকে প্রতিটি কলামে প্রদর্শন করবে।
- $F{id}, $F{name}, এবং $F{department} এর মাধ্যমে আপনি Employee Bean এর ফিল্ডগুলিকে রিপোর্টে ব্যবহার করছেন।
Step 4: রিপোর্ট তৈরি এবং প্রদর্শন
আপনি যখন generateReport() মেথডটি কল করবেন, তখন এটি Employee Bean এর কলেকশন ব্যবহার করবে এবং সেই ডেটা থেকে রিপোর্ট তৈরি করবে।
রিপোর্টটি JasperViewer এর মাধ্যমে দেখা যাবে।
Key Concepts in Using Bean Collection Data Source
- JRBeanCollectionDataSource:
- এটি Java Beans বা Java Collection থেকে রিপোর্ট ডেটা তৈরি করার জন্য ব্যবহৃত হয়। এটি List বা ArrayList ব্যবহার করে Bean Data Source তৈরি করে।
- Field Binding:
- JasperReports ডেটা মডেল (Bean) থেকে ফিল্ডগুলো সরাসরি
.jrxmlফাইলে field expressions এর মাধ্যমে আনা হয়। এটি JSON, XML, বা Java Beans ডেটা সোর্সের জন্য কাজ করে।
- JasperReports ডেটা মডেল (Bean) থেকে ফিল্ডগুলো সরাসরি
- Flexibility:
- Bean Collection Data Source ব্যবহারে, আপনি সহজেই custom data structures থেকে রিপোর্ট তৈরি করতে পারেন, এবং আপনি চাইলে ডেটাবেস বা অন্য কোথাও ডেটা না রেখে Java Beans থেকেও ডেটা সোর্স তৈরি করতে পারেন।
Advantages of Using Bean Collection Data Source
- No Database Dependency:
- আপনি ডাটাবেসের ওপর নির্ভর না করে সহজেই Java Beans বা অন্যান্য Collection থেকে রিপোর্ট তৈরি করতে পারেন।
- Simple and Flexible:
- Java Beans ব্যবহার করার মাধ্যমে রিপোর্ট তৈরির প্রক্রিয়া সহজ এবং ফ্লেক্সিবল হয়ে যায়।
- Improved Maintainability:
- কোডে শুধুমাত্র Java Beans এ ডেটা মডেল তৈরি করতে হয়, যা রক্ষণাবেক্ষণ এবং পরিবর্তন সহজ করে।
JasperReports এ Bean Collection Data Source ব্যবহার করা খুবই সহজ এবং কার্যকরী। আপনি যদি Java Beans বা Collections থেকে রিপোর্ট তৈরি করতে চান, তবে JRBeanCollectionDataSource একটি শক্তিশালী এবং কার্যকরী পদ্ধতি। এটি JasperReports এর সাথে কাজ করার সময় ডেটার সহজ এবং সুসংগঠিত প্রক্রিয়াকরণ নিশ্চিত করে, এবং NoSQL বা custom data structures থেকে ডেটা প্রক্রিয়াকরণের জন্য একেবারে আদর্শ।
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