JasperReports একটি শক্তিশালী Java রিপোর্টিং টুল যা ব্যবহারকারীদের ডেটা ভিত্তিক রিপোর্ট তৈরি করতে সহায়তা করে। রিপোর্ট তৈরির প্রক্রিয়াটি দুইটি প্রধান ধাপে বিভক্ত:
- Report Compilation: রিপোর্টের ডিজাইন বা টেমপ্লেট ফাইল কম্পাইল করা।
- Runtime Management: কম্পাইল করা রিপোর্টের সাথে ডেটা যুক্ত করা এবং রিপোর্টের আউটপুট তৈরি করা।
এই দুটি ধাপেই বিভিন্ন ধরনের কার্যকারিতা এবং কাস্টমাইজেশন করা যায়, যা রিপোর্টের কার্যকারিতা এবং আউটপুটকে আরও কার্যকর এবং সুসংহত করে তোলে।
1. JasperReports - Report Compilation
Report Compilation হল JasperReports-এর একটি গুরুত্বপূর্ণ পদক্ষেপ, যা JRXML (JasperReports XML) ফাইলকে JASPER ফাইলে রূপান্তরিত করে। JRXML ফাইলটি রিপোর্টের ডিজাইন এবং স্ট্রাকচার ধারণ করে, এবং কম্পাইল করার পরে সেটি একটি JASPER ফাইল আকারে প্রস্তুত হয় যা রিপোর্টের রেন্ডারিংয়ের জন্য ব্যবহার করা হয়।
Report Compilation Process:
- JRXML ফাইল তৈরি করা: রিপোর্টের ডিজাইনটি JRXML ফরম্যাটে তৈরি করা হয়, যেটি একটি XML ফাইল যেখানে ডেটা সোর্স, ফিল্ড, প্যারামিটার, ভ্যারিয়েবল, স্টাইল, এবং রিপোর্টের অন্যান্য বৈশিষ্ট্য থাকে।
- JRXML কম্পাইল করা: JasperCompileManager ব্যবহার করে JRXML ফাইলটি JASPER ফাইলে কম্পাইল করা হয়। এই কম্পাইল করা ফাইলটি পরবর্তীতে ডেটার সাথে fill করতে ব্যবহৃত হয়।
JasperReport Compilation Example:
import net.sf.jasperreports.engine.*;
public class JasperReportCompileExample {
public static void main(String[] args) {
try {
// Compile the JRXML file to generate the Jasper file
String jrxmlFile = "path/to/report.jrxml";
JasperReport jasperReport = JasperCompileManager.compileReport(jrxmlFile);
// Once compiled, the Jasper file can be used to generate the report with data
System.out.println("Report compiled successfully!");
} catch (JRException e) {
e.printStackTrace();
}
}
}
Explanation:
JasperCompileManager.compileReport(): এই মেথডটি JRXML ফাইলটিকে কম্পাইল করে একটি JasperReport অবজেক্ট তৈরি করে, যা পরবর্তীতে ডেটা ইনজেক্ট করা এবং আউটপুট তৈরি করার জন্য ব্যবহার করা হয়।- কম্পাইল করা রিপোর্ট JASPER ফরম্যাটে .jasper ফাইল আকারে সংরক্ষিত হয়, যা পরবর্তী ধাপে ব্যবহৃত হয়।
Output:
কম্পাইল করা রিপোর্ট .jasper ফাইল হিসাবে তৈরি হবে, যা JasperPrint অবজেক্টে ফিল করা যায়।
2. JasperReports - Runtime Management
Runtime Management হল রিপোর্টের data filling এবং exporting প্রক্রিয়া। রিপোর্ট কম্পাইল করার পরে, আপনাকে fill করতে হবে এবং রিপোর্টটি বিভিন্ন আউটপুট ফরম্যাটে (যেমন PDF, Excel, HTML, CSV) এক্সপোর্ট করতে হবে।
Steps for Runtime Management:
- Data Filling: রিপোর্টে ডেটা ইনজেক্ট করার জন্য JasperFillManager ব্যবহার করা হয়। এখানে আপনি parameters, data source, এবং report template প্রদান করবেন।
- Exporting Report: রিপোর্টটি সম্পূর্ণ হলে, আপনি সেটি বিভিন্ন ফরম্যাটে এক্সপোর্ট করতে পারেন যেমন PDF, Excel, CSV, HTML ইত্যাদি। JasperExportManager এই কাজের জন্য ব্যবহৃত হয়।
Filling the Report:
import net.sf.jasperreports.engine.*;
import java.util.*;
public class JasperReportFillExample {
public static void main(String[] args) {
try {
// Compile the JRXML file to generate the Jasper file
String reportPath = "path/to/report.jasper"; // compiled Jasper file
Map<String, Object> parameters = new HashMap<>();
parameters.put("param1", "value1");
// Create the data source (could be a JDBC, collection, etc.)
JRDataSource dataSource = new JREmptyDataSource(); // For example, an empty data source
// Fill the report with data
JasperPrint jasperPrint = JasperFillManager.fillReport(reportPath, parameters, dataSource);
// Export the report to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "output/report.pdf");
System.out.println("Report generated and exported to PDF successfully!");
} catch (JRException e) {
e.printStackTrace();
}
}
}
Explanation:
JasperFillManager.fillReport(): এই মেথডটি JasperReport অবজেক্ট এবং parameters ও data source ব্যবহার করে রিপোর্টটি fill করে এবং একটি JasperPrint অবজেক্ট তৈরি করে।JasperExportManager.exportReportToPdfFile(): রিপোর্টটি PDF ফরম্যাটে এক্সপোর্ট করার জন্য এই মেথডটি ব্যবহার করা হয়।
Output:
একটি report.pdf ফাইল তৈরি হবে যার মধ্যে রিপোর্টের সমস্ত ডেটা থাকবে।
3. Parameters, Variables, and Fields at Runtime
রিপোর্টের parameters, variables, এবং fields এক্সিকিউশন প্রক্রিয়ার সময় ভিন্নভাবে ব্যবহৃত হয়। চলুন দেখি, কিভাবে এগুলো runtime-এ রিপোর্টে ব্যবহৃত হয়।
Parameters:
- Parameters ব্যবহারকারীর ইনপুট ডেটা যা রিপোর্টের রেন্ডারিং সময় প্রয়োগ করা হয়। এগুলি সাধারণত ডেটা ফিল্টার, পরিসীমা বা নির্দিষ্ট পরিসংখ্যানের জন্য ব্যবহৃত হয়।
Variables:
- Variables হল গণনা বা পরিসংখ্যান যা রিপোর্টের সময় ডেটার উপর করা হয় (যেমন মোট, গড়, এবং অন্যান্য অ্যাগ্রিগেটেড মান)।
Fields:
- Fields হল রিপোর্টে প্রদর্শিত ডেটা যা ডেটাবেস বা অন্যান্য সোর্স থেকে আসে। এগুলি রিপোর্টের ফিল্ডগুলো বা কলাম হতে পারে।
Example: Using Parameters in JasperReports:
import net.sf.jasperreports.engine.*;
import java.util.*;
public class JasperReportsWithParametersExample {
public static void main(String[] args) {
try {
// Compile the report
String reportPath = "path/to/report.jasper";
Map<String, Object> parameters = new HashMap<>();
parameters.put("StartDate", new Date());
parameters.put("EndDate", new Date());
// Data source (JDBC or any other source)
JRDataSource dataSource = new JREmptyDataSource();
// Fill the report with data
JasperPrint jasperPrint = JasperFillManager.fillReport(reportPath, parameters, dataSource);
// Export the report to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "output/report_with_parameters.pdf");
System.out.println("Report generated with parameters!");
} catch (JRException e) {
e.printStackTrace();
}
}
}
Explanation:
- এখানে,
StartDateএবংEndDateparameters ব্যবহার করে JasperReports-এ ডেটার পরিসীমা সেট করা হয়েছে। - রিপোর্টের ডেটা এবং ইনপুট প্যারামিটার JasperFillManager.fillReport() মেথডে পাঠানো হয়েছে এবং এক্সপোর্ট করা হয়েছে PDF ফরম্যাটে।
4. Runtime Management for Subreports
একটি রিপোর্টের মধ্যে subreport অন্তর্ভুক্ত করা JasperReports-এর একটি শক্তিশালী ফিচার। Subreport গুলি মূল রিপোর্টের অংশ হতে পারে এবং আলাদা রিপোর্টের মতো কাজ করে।
Subreport Example:
import net.sf.jasperreports.engine.*;
public class SubreportExample {
public static void main(String[] args) {
try {
// Compile the main report
String mainReportPath = "path/to/main_report.jasper";
JasperReport jasperReport = JasperCompileManager.compileReport(mainReportPath);
// Parameters for the main report
Map<String, Object> parameters = new HashMap<>();
// Data source for the main report
JRDataSource dataSource = new JREmptyDataSource();
// Fill the report with data
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);
// Export to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "output/main_report_with_subreports.pdf");
System.out.println("Report with subreports generated successfully!");
} catch (JRException e) {
e.printStackTrace();
}
}
}
Explanation:
- এখানে, মূল রিপোর্টের মধ্যে subreports অন্তর্ভুক্ত করা হয়েছে যা পৃথক রিপোর্ট হিসেবে কাজ করবে।
- subreports মূল রিপোর্টের সাথে ডেটা শেয়ার করে এবং একই ডেটা সোর্সের উপর ভিত্তি করে রিপোর্ট তৈরি হয়।
JasperReports-এর report compilation এবং runtime management দুটি গুরুত্বপূর্ণ অংশ যা রিপোর্ট তৈরির প্রক্রিয়াকে কার্যকরভাবে পরিচালনা করে। Report Compilation এর মাধ্যমে JRXML ফাইলকে JASPER ফাইল ফরম্যাটে রূপান্তরিত করা হয়, এবং Runtime Management এর মাধ্যমে ডেটা ইনজেক্ট করা হয় এবং আউটপুট তৈরি হয়।
এছাড়া, parameters, variables, এবং fields রিপোর্টে ডেটা প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়। Subreports ব্যবহার করে রিপোর্টের ভিতরে অন্যান্য রিপোর্ট অন্তর্ভুক্ত করা সম্ভব, যা রিপোর্টকে আরও কার্যকর এবং নমনীয় করে তোলে।
JasperReports একটি ওপেন সোর্স রিপোর্টিং টুল যা Java অ্যাপ্লিকেশনগুলিতে রিপোর্ট তৈরি করতে ব্যবহৃত হয়। রিপোর্ট তৈরি করার জন্য JRXML ফাইল (JasperReports XML) ব্যবহার করা হয়, যেটি রিপোর্টের layout, data fields, parameters, variables, এবং expressions-এর সমস্ত বিবরণ ধারণ করে। এই JRXML ফাইলটি পরে compiled হয় এবং একটি JasperReport অবজেক্টে রূপান্তরিত হয়, যা রিপোর্টের জন্য ব্যবহৃত হয়।
Report Compilation কী?
Report Compilation হল সেই প্রক্রিয়া, যেখানে JRXML ফাইল থেকে JasperReport অবজেক্ট তৈরি করা হয়। JRXML ফাইলটি XML ফরম্যাটে থাকে এবং JasperReport অবজেক্টে পরিণত হতে এটি compiled করা প্রয়োজন। কম্পাইলেশন প্রক্রিয়াটি রিপোর্টের data source, parameters, variables, fields, expressions ইত্যাদি কাজের জন্য প্রস্তুত করে।
JasperReports রিপোর্ট তৈরির জন্য এই কম্পাইলেশন প্রক্রিয়া খুবই গুরুত্বপূর্ণ কারণ এটি রিপোর্টের কার্যকারিতা এবং পারফরম্যান্স উন্নত করে। কম্পাইলড রিপোর্টগুলি JasperPrint অবজেক্টে রূপান্তরিত হওয়ার জন্য প্রস্তুত থাকে এবং পরবর্তীতে তাদের পিডিএফ, এক্সেল, এইচটিএমএল ইত্যাদির আউটপুট ফরম্যাটে এক্সপোর্ট করা যেতে পারে।
Report Compilation কেন প্রয়োজন?
- Efficient Execution:
- JRXML ফাইলটি XML ফরম্যাটে থাকে, যা কম্পাইলেশন বা প্রক্রিয়াকরণের জন্য খুবই ভারী হতে পারে। রিপোর্ট কম্পাইল করার মাধ্যমে JasperReport অবজেক্টে রূপান্তরিত হলে এটি Java class হিসেবে কাজ করে, যা দ্রুত এবং কার্যকরভাবে প্রসেস করা যায়।
- Performance Optimization:
- JRXML ফাইলের সমস্ত ফরম্যাট এবং ডেটা-সংশ্লিষ্ট লজিক কম্পাইলেশন প্রক্রিয়ায় JasperReport অবজেক্টে রূপান্তরিত হয়, যার ফলে রিপোর্টের সঞ্চালন অনেক দ্রুত হয় এবং এর পারফরম্যান্স উন্নত হয়।
- Reusable Report Design:
- একবার রিপোর্ট কম্পাইল করার পর, এটি JasperReport অবজেক্টে পরিণত হয়, যা পুনরায় ব্যবহারযোগ্য এবং সারা অ্যাপ্লিকেশন জুড়ে রিপোর্টের জন্য সহজে অ্যাক্সেসযোগ্য হতে পারে।
- Error Detection:
- রিপোর্ট কম্পাইল করার সময় syntax বা logical errors শনাক্ত করা সহজ হয়। কম্পাইলেশনের মাধ্যমে invalid expressions, incorrect data source, বা missing parameters এর মতো ত্রুটিগুলি সনাক্ত করা যায় এবং সেগুলি ঠিক করা যায়।
- Dynamic Reports:
- বিভিন্ন ডেটা সোর্স বা parameters ব্যবহার করে dynamic reports তৈরি করতে সাহায্য করে। এই রিপোর্টগুলি ব্যবহারকারীর ইনপুটের ওপর নির্ভরশীল এবং কম্পাইলেশন প্রক্রিয়া তাদের কাস্টমাইজেশন ও ফিল্টারিং করার জন্য প্রস্তুত করে।
JasperReports এ Report Compilation প্রক্রিয়া
- JRXML ফাইল তৈরি করা:
- প্রথমে আপনি JasperReports Studio বা XML এ JRXML ফাইল তৈরি করেন, যেখানে রিপোর্টের সমস্ত কনফিগারেশন ও লেআউট থাকে।
- JRXML ফাইল কম্পাইল করা:
- JasperCompileManager.compileReport() মেথড ব্যবহার করে JRXML ফাইলকে JasperReport অবজেক্টে কম্পাইল করা হয়।
Report Compilation Example:
1. JRXML Example:
<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="50" rightMargin="50" topMargin="50" bottomMargin="50">
<title>
<band height="50">
<staticText>
<reportElement x="0" y="0" width="515" height="50"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Employee Report]]></text>
</staticText>
</band>
</title>
<detail>
<band height="20">
<textField>
<reportElement x="0" y="0" width="170" height="20"/>
<textElement textAlignment="Center"/>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
2. Java Code for Report Compilation:
import net.sf.jasperreports.engine.*;
import java.util.*;
public class ReportCompilationExample {
public static void main(String[] args) {
try {
// Compile the JRXML file into a JasperReport object
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/your_report.jrxml");
// Now JasperReport is ready to be filled with data
System.out.println("Report compiled successfully!");
} catch (JRException e) {
e.printStackTrace();
}
}
}
JasperReports এর রিপোর্ট কম্পাইলেশন প্রক্রিয়ার গুরুত্বপূর্ণ ফিচার
- Compile from JRXML to JasperReport:
- JasperCompileManager.compileReport() মেথডের মাধ্যমে আপনি JRXML ফাইলকে JasperReport ফাইল হিসেবে কম্পাইল করতে পারেন।
- Compile Once, Use Multiple Times:
- একবার কম্পাইল করার পর, আপনি সেই কম্পাইলড রিপোর্টটি বারবার ব্যবহার করতে পারেন এবং বিভিন্ন ডেটা সোর্স বা parameters প্রদান করতে পারেন।
- Report Parameters & Variables:
- Parameters এবং Variables ব্যবহার করে রিপোর্টের কাস্টমাইজেশন করা যায়। কম্পাইল করার সময়, এগুলি রিপোর্টের মধ্যে fill করা যায়।
Report Compilation এর সুবিধা
- ডেটা লজিক এবং কনফিগারেশন সহজে ম্যানেজ করা যায়: একবার কম্পাইল করা রিপোর্টে ডেটা সোর্স এবং কনফিগারেশন সেট করা থাকে, যা পরে সহজেই ব্যবহার করা যায়।
- রিপোর্টের কার্যকারিতা উন্নত করা যায়: কম্পাইলেশন প্রক্রিয়া রিপোর্টের প্রতিটি অংশকে এক্সিকিউটেবল কোডে পরিণত করে, যা রিপোর্টটি দ্রুত প্রসেস করার সুযোগ দেয়।
- ডেভেলপমেন্ট এবং ডিবাগিং সহজ: কম্পাইলেশনের মাধ্যমে যে কোনো ভুল বা ত্রুটি চিহ্নিত করা সহজ হয়ে যায়, এবং রিপোর্টটির লজিকিক্যাল সমস্যাগুলি দ্রুত সমাধান করা যায়।
Report Compilation JasperReports-এ একটি গুরুত্বপূর্ণ ধাপ, যেখানে JRXML ফাইলকে JasperReport অবজেক্টে পরিণত করা হয়। এটি রিপোর্টের performance optimization, error handling, এবং reuse সক্ষম করে। JasperCompileManager মেথডের মাধ্যমে এটি সহজেই সম্পাদিত হয় এবং এর মাধ্যমে আপনি আপনার রিপোর্টের ডেটা সোর্স এবং কাস্টম লজিক এক্সিকিউটেবল রিপোর্টে রূপান্তর করতে পারেন।
JasperReports-এ রিপোর্ট তৈরি করতে হলে, JRXML ফাইলটি প্রথমে একটি JasperReport ফাইলে রূপান্তর করতে হয়। এই প্রক্রিয়াকে JasperReports Compilation Process বলা হয়। JRXML হল XML ফরম্যাটে রিপোর্টের ডিজাইন ফাইল, যেখানে রিপোর্টের কাঠামো, ফিল্ড, প্যারামিটার, ভ্যারিয়েবল, স্টাইল এবং অন্যান্য কনফিগারেশন থাকে। JasperReport হল কম্পাইল করা রিপোর্ট ফাইল যা JRXML থেকে তৈরি হয় এবং তা JasperPrint-এ রূপান্তরিত হয়ে রেন্ডার বা এক্সপোর্ট করা যায়।
JasperReports Compilation Process Overview
- JRXML File Creation:
- প্রথমে আপনি একটি JRXML ফাইল তৈরি করেন যা রিপোর্টের ডিজাইন এবং ডেটার কাঠামো নির্ধারণ করে। এটি XML ফরম্যাটে লেখা হয়।
- Compile JRXML to JasperReport:
- JRXML ফাইলটি কম্পাইল করা হয় JasperReports লাইব্রেরির মাধ্যমে একটি JasperReport ফাইলে, যেটি একটি বাইনারি ফাইল। এই কম্পাইলেশন প্রক্রিয়া JasperCompileManager.compileReport() মেথডের মাধ্যমে সম্পন্ন হয়।
- Fill Report with Data:
- একবার JasperReport তৈরি হলে, ডেটা JasperFillManager.fillReport() মেথডের মাধ্যমে রিপোর্টে যোগ করা হয়, যেখানে data source প্রদান করা হয় (যেমন: JDBC, CSV, JavaBeans, XML)।
- Export Report to Desired Format:
- রিপোর্টটি JasperPrint-এ পূর্ণাঙ্গভাবে তৈরি হলে, সেটি বিভিন্ন আউটপুট ফরম্যাটে এক্সপোর্ট করা যেতে পারে, যেমন PDF, Excel, HTML, CSV ইত্যাদি।
1. JRXML ফাইল তৈরি করা (Report Design)
JRXML ফাইলটি একটি XML ফরম্যাটে থাকে যা রিপোর্টের ডিজাইন এবং কনফিগারেশন ধারণ করে। এটি JasperReports Studio ব্যবহার করে সহজেই তৈরি করা যায়। একটি সাধারণ 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="515"
leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<!-- Parameters -->
<parameter name="StartDate" class="java.util.Date"/>
<parameter name="EndDate" class="java.util.Date"/>
<!-- Fields -->
<field name="employee_name" class="java.lang.String"/>
<field name="employee_age" class="java.lang.Integer"/>
<!-- Title -->
<title>
<band height="50">
<staticText>
<reportElement x="0" y="0" width="515" height="50"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Employee Report]]></text>
</staticText>
</band>
</title>
<!-- Column Header -->
<columnHeader>
<band height="30">
<staticText>
<reportElement x="0" y="0" width="170" height="30"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Name]]></text>
</staticText>
<staticText>
<reportElement x="170" y="0" width="170" height="30"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Age]]></text>
</staticText>
</band>
</columnHeader>
<!-- Detail -->
<detail>
<band height="20">
<textField>
<reportElement x="0" y="0" width="170" height="20"/>
<textFieldExpression><![CDATA[$F{employee_name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="170" y="0" width="170" height="20"/>
<textFieldExpression><![CDATA[$F{employee_age}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
এখানে JRXML ফাইলটি রিপোর্টের টাইটেল, কলাম হেডার এবং ডিটেইলস এর জন্য কনফিগারেশন ধারণ করে। এখানে fields (employee_name, employee_age), parameters (StartDate, EndDate), এবং band sections (Title, Column Header, Detail) রয়েছে।
2. JRXML থেকে JasperReport কম্পাইল করা
JRXML ফাইলটি JasperReport ফাইলে রূপান্তর করতে JasperCompileManager.compileReport() মেথড ব্যবহার করা হয়। এটি একটি JasperReport অবজেক্ট তৈরি করে, যা রিপোর্টের কম্পাইল করা ফাইল।
Compilation Example:
import net.sf.jasperreports.engine.*;
public class JasperReportCompilation {
public static void main(String[] args) {
try {
// Compile the JRXML file into a JasperReport object
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/your_report.jrxml");
System.out.println("Report compiled successfully!");
} catch (JRException e) {
e.printStackTrace();
}
}
}
JasperCompileManager.compileReport() মেথডটি JRXML ফাইলকে JasperReport ফাইলে রূপান্তরিত করে। এখন রিপোর্টটি পূর্ণাঙ্গভাবে JasperPrint-এ রূপান্তরিত করার জন্য প্রস্তুত।
3. JasperReport ফিল করা (Filling the Report with Data)
JasperReport কম্পাইল করা হলে, আপনি JasperFillManager.fillReport() মেথড ব্যবহার করে রিপোর্টে ডেটা ফিল করতে পারেন। এই মেথডটি রিপোর্টে ডেটা সোর্স (যেমন: JDBC, JavaBeans, CSV) থেকে ডেটা নিয়ে রিপোর্টে যুক্ত করে।
Filling the Report Example:
import net.sf.jasperreports.engine.*;
import java.util.*;
public class JasperReportFilling {
public static void main(String[] args) {
try {
// Compile the JRXML file into a JasperReport object
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/your_report.jrxml");
// Parameters to be passed to the report (if any)
Map<String, Object> parameters = new HashMap<>();
parameters.put("StartDate", new Date());
parameters.put("EndDate", new Date());
// Fill the report with data
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());
System.out.println("Report filled with data successfully!");
} catch (JRException e) {
e.printStackTrace();
}
}
}
JasperFillManager.fillReport() মেথডে parameters এবং data source (যেমন JREmptyDataSource, JDBC Connection, JavaBeans, ইত্যাদি) পাঠানো হয়। এটি JasperPrint অবজেক্ট তৈরি করে, যা পরবর্তী ধাপে export বা view করা যেতে পারে।
4. JasperReport Export (Excel, PDF, etc.)
একবার রিপোর্ট পূর্ণাঙ্গভাবে JasperPrint-এ রূপান্তরিত হলে, আপনি সেটি PDF, Excel, HTML, বা CSV ফরম্যাটে এক্সপোর্ট করতে পারেন। JasperReports এক্সপোর্টের জন্য বিভিন্ন exporters সরবরাহ করে।
Export to PDF Example:
import net.sf.jasperreports.engine.*;
public class JasperReportExport {
public static void main(String[] args) {
try {
// Compile the report
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/your_report.jrxml");
// Fill the report with data
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, new JREmptyDataSource());
// Export the report to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "output/report.pdf");
System.out.println("Report exported to PDF successfully!");
} catch (JRException e) {
e.printStackTrace();
}
}
}
Export to Excel Example:
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.export.*;
public class JasperReportExcelExport {
public static void main(String[] args) {
try {
// Compile the report
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/your_report.jrxml");
// Fill the report with data
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, new JREmptyDataSource());
// Export the report to Excel
JRExcelExporter exporter = new JRExcelExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "output/report.xlsx");
exporter.exportReport();
System.out.println("Report exported to Excel successfully!");
} catch (JRException e) {
e.printStackTrace();
}
}
}
- JRXML ফাইলটি প্রথমে JasperReport ফাইলে কম্পাইল করা হয়, তারপর রিপোর্টে ডেটা ফিল করা হয় এবং শেষে রিপোর্টটি বিভিন্ন আউটপুট ফরম্যাটে এক্সপোর্ট করা হয়।
- JasperReports কম্পাইলেশন প্রক্রিয়াটি আপনার রিপোর্টের ডিজাইন ও কনফিগারেশন ফাইলকে কার্যকরী রিপোর্টে রূপান্তরিত করে।
- আপনি JasperCompileManager.compileReport() মেথডের মাধ্যমে JRXML ফাইলকে JasperReport ফাইলে রূপান্তর করতে পারেন, তারপর JasperFillManager.fillReport() দিয়ে ডেটা যোগ করে JasperExportManager ব্যবহার করে রিপোর্ট এক্সপোর্ট করতে পারেন।
JasperReports একটি শক্তিশালী ওপেন সোর্স রিপোর্টিং টুল যা Java অ্যাপ্লিকেশনগুলিতে রিপোর্ট তৈরি করতে ব্যবহৃত হয়। JasperReports-এ runtime data management এবং dynamic data binding গুরুত্বপূর্ণ ভূমিকা পালন করে, কারণ এগুলি রিপোর্টের কার্যকারিতা এবং ডাইনামিক ডেটা প্রক্রিয়াকরণ নিশ্চিত করতে সাহায্য করে।
এই নিবন্ধে আমরা runtime data management এবং dynamic data binding নিয়ে আলোচনা করব এবং দেখাবো কীভাবে JasperReports-এ ডাইনামিক ডেটা ম্যানেজমেন্ট করা যায় এবং ডেটাকে রিয়েল টাইমে রিপোর্টে bind করা যায়।
1. Runtime Data Management in JasperReports
Runtime data management বলতে বোঝায় রিপোর্টের সময় ডেটা প্রক্রিয়াকরণ এবং পরিবর্তন করার প্রক্রিয়া। JasperReports-এ রিপোর্ট fill করার সময় runtime data ব্যবহৃত হয়, এবং এই ডেটা parameters, fields, এবং variables এর মাধ্যমে রিপোর্টে যোগ করা হয়।
Steps for Runtime Data Management:
- JasperReports Parameters:
- Parameters হল runtime data যা রিপোর্টের সময় dynamically পাস করা হয়। এগুলি বিভিন্ন ব্যবহারকারী ইনপুট বা কনফিগারেশন থেকে আসতে পারে এবং রিপোর্টের আউটপুট পরিবর্তন করতে সাহায্য করে।
- Fields:
- Fields হল ডেটা সোর্স থেকে আসা ডেটা যা রিপোর্টে display করা হয়।
- Variables:
- Variables হল ডাইনামিকভাবে গণনা করা মান, যেমন sum, average, count ইত্যাদি।
- Data Source:
- Data Source হল সেই উৎস যেখানে থেকে ডেটা runtime সময়ে আসে, যেমন JDBC, CSV, XML, বা JavaBeans।
2. Dynamic Data Binding in JasperReports
Dynamic Data Binding JasperReports-এ একটি পদ্ধতি যেখানে রিপোর্টের বিভিন্ন অংশে ডেটা ডাইনামিকভাবে বাইন্ড করা হয়। এটি মূলত parameters, fields, এবং variables এর মাধ্যমে রিপোর্টের সময় dynamic ডেটা সংযুক্ত করার প্রক্রিয়া।
Dynamic Data Binding Process:
- Binding Fields to Data Source:
- আপনি ডেটা সোর্স থেকে fields কে bind করতে পারেন, যা পরে রিপোর্টে dynamic data হিসেবে প্রদর্শিত হবে।
- Using Parameters for Dynamic Data Binding:
- Parameters ব্যবহার করে ডাইনামিক ইনপুট পাস করা হয়, যেমন ব্যবহারকারী যখন একটি নির্দিষ্ট date range বা category নির্বাচন করে, তখন সেই মান রিপোর্টে bind হয়ে যায়।
- Filling Reports with Dynamic Data:
- JasperFillManager ব্যবহার করে parameters এবং data source থেকে ডেটা রিপোর্টে ফিল করা হয়।
Dynamic Data Binding Example:
এখানে একটি উদাহরণ দেখানো হয়েছে যেখানে JDBC Data Source থেকে ডেটা dynamic binding করা হয়েছে এবং রিপোর্টে parameters পাস করা হয়েছে:
JRXML ফাইল (Dynamic Data Binding Example):
<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="SalesReport" pageWidth="595" pageHeight="842"
columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<!-- Parameters for dynamic data binding -->
<parameter name="StartDate" class="java.util.Date"/>
<parameter name="EndDate" class="java.util.Date"/>
<!-- Column Header Band -->
<columnHeader>
<band height="30">
<staticText>
<reportElement x="0" y="0" width="180" height="30"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Product Name]]></text>
</staticText>
<staticText>
<reportElement x="180" y="0" width="100" height="30"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Sales]]></text>
</staticText>
<staticText>
<reportElement x="280" y="0" width="100" height="30"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Quantity]]></text>
</staticText>
</band>
</columnHeader>
<!-- Detail Band -->
<detail>
<band height="30">
<textField>
<reportElement x="0" y="0" width="180" height="30"/>
<textFieldExpression><![CDATA[$F{product_name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="180" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA[$F{sales}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="280" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA[$F{quantity}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
Java Code for Dynamic Data Binding:
import net.sf.jasperreports.engine.*;
import java.sql.*;
import java.util.*;
public class DynamicDataBindingExample {
public static void main(String[] args) {
try {
// Compile JRXML file to JasperReport
JasperReport jasperReport = JasperCompileManager.compileReport("SalesReport.jrxml");
// JDBC connection setup
String url = "jdbc:mysql://localhost:3306/salesdb";
String username = "root";
String password = "password";
Connection connection = DriverManager.getConnection(url, username, password);
// Parameters to be passed to the report
Map<String, Object> parameters = new HashMap<>();
parameters.put("StartDate", new Date());
parameters.put("EndDate", new Date());
// Query to fetch data for the report
String query = "SELECT product_name, sales, quantity FROM sales WHERE sale_date BETWEEN ? AND ?";
PreparedStatement stmt = connection.prepareStatement(query);
stmt.setDate(1, new java.sql.Date(System.currentTimeMillis())); // Start Date
stmt.setDate(2, new java.sql.Date(System.currentTimeMillis())); // End Date
ResultSet resultSet = stmt.executeQuery();
// JRResultSetDataSource for dynamic data binding
JRResultSetDataSource jrDataSource = new JRResultSetDataSource(resultSet);
// Fill the report with data
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, jrDataSource);
// Export the report to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "dynamic_sales_report.pdf");
System.out.println("Report generated successfully!");
} catch (SQLException | JRException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- Parameters: StartDate এবং EndDate রিপোর্টে dynamic ইনপুট হিসাবে পাঠানো হয়েছে।
- JDBC DataSource: রিপোর্টের জন্য ডেটা JDBC থেকে PreparedStatement ব্যবহার করে ডাইনামিকভাবে আনা হয়েছে এবং তা JRResultSetDataSource মাধ্যমে রিপোর্টে পাঠানো হয়েছে।
- JRResultSetDataSource ব্যবহার করে ডেটা ResultSet থেকে সরাসরি রিপোর্টে bind করা হয়েছে।
3. Runtime Data Management in JasperReports
JasperReports-এ runtime data management রিপোর্টের dynamic nature এবং interactive features নিশ্চিত করতে ব্যবহৃত হয়। এর মধ্যে parameters, fields, variables এবং subreports এর ব্যবহারে real-time data processing করা সম্ভব।
Key Concepts of Runtime Data Management:
- Parameters:
- Parameters রিপোর্টের সময় dynamic ইনপুট হিসেবে ব্যবহৃত হয়। এগুলি ব্যবহারকারী ইনপুট বা অ্যাপ্লিকেশন থেকে মান গ্রহণ করতে পারে।
- Fields:
- Fields হল ডেটা সোর্স থেকে আসা ডেটা যা রিপোর্টে ডিসপ্লে করা হয়।
- Variables:
- Variables ডাইনামিকভাবে গণনা করা মান, যেমন sum, count, average ইত্যাদি।
- Subreports:
- যখন রিপোর্টের মধ্যে অন্য একটি রিপোর্ট অন্তর্ভুক্ত করতে হয়, তখন subreports ব্যবহার করা হয়।
- JasperReports-এ runtime data management এবং dynamic data binding রিপোর্টের flexibility এবং interactivity বৃদ্ধি করে।
- Parameters, fields, variables, এবং subreports ব্যবহার করে আপনি রিপোর্টে real-time data প্রবাহ এবং dynamic data updates পরিচালনা করতে পারেন।
- JDBC, JavaBeans, CSV বা XML ডেটা সোর্সের মাধ্যমে রিপোর্টে ডাইনামিক ডেটা ইনপুট করা সম্ভব এবং তা JRXML ফাইলের মাধ্যমে কাস্টমাইজ করা যায়।
JasperReports একটি শক্তিশালী Java ভিত্তিক রিপোর্টিং টুল যা বিভিন্ন ধরনের রিপোর্ট তৈরি করতে সক্ষম। তবে, যখন আপনি বড় ডেটাসেট বা জটিল রিপোর্ট নিয়ে কাজ করেন, তখন রিপোর্ট তৈরির পারফরম্যান্স একটি বড় সমস্যা হতে পারে। JasperReports এর পারফরম্যান্স অপটিমাইজেশন করা হলে আপনার অ্যাপ্লিকেশন দ্রুততর এবং আরও কার্যকরী হয়ে ওঠে।
নিম্নলিখিত কয়েকটি পদ্ধতি অনুসরণ করলে JasperReports এর পারফরম্যান্স এবং মেমরি ব্যবস্থাপনা উন্নত করা সম্ভব:
1. ObjectMapper পুনঃব্যবহার (Reuse ObjectMapper)
ObjectMapper JasperReports এ একটি ভারী অবজেক্ট এবং প্রতিবার এটি তৈরি করলে মেমরি এবং পারফরম্যান্সে প্রভাব পড়তে পারে। ObjectMapper একবার তৈরি করে পুনঃব্যবহার করা একটি ভাল অভ্যাস।
প্রধান পদ্ধতি:
public class ObjectMapperProvider {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
public static ObjectMapper getInstance() {
return OBJECT_MAPPER;
}
}
Spring Boot এ Bean হিসেবে ObjectMapper ব্যবহার:
@Configuration
public class JasperConfig {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper();
}
}
2. Streaming API ব্যবহার (Use Streaming API)
JasperReports যখন streaming mode (JSON, XML, বা Database থেকে ডেটা পড়া) ব্যবহার করে তখন মেমরি খরচ কমে এবং পারফরম্যান্স বৃদ্ধি পায়। JasperReports Streaming API শুধুমাত্র একটি টোকেন পড়ার মাধ্যমে কাজ করে, এবং এটি একবারে পুরো ডেটাসেট লোড না করে এক্সপোর্ট করতে সাহায্য করে।
Streaming API Example:
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
public class StreamingExample {
public static void main(String[] args) throws Exception {
JsonFactory factory = new JsonFactory();
JsonParser parser = factory.createParser(new File("large-file.json"));
while (!parser.isClosed()) {
JsonToken token = parser.nextToken();
if (JsonToken.FIELD_NAME.equals(token) && "name".equals(parser.getCurrentName())) {
parser.nextToken();
System.out.println("Name: " + parser.getValueAsString());
}
}
parser.close();
}
}
3. DataSource Optimization
JasperReports ডেটা সোর্সের জন্য JRDataSource ব্যবহার করে। ডেটাবেস থেকে ডেটা ফেচ করার সময় JDBC connection pooling এবং query optimization ব্যবহার করা উচিৎ, যাতে দ্রুত এবং মেমরি-দক্ষভাবে ডেটা ফেচ করা যায়।
- Lazy Loading: ডেটাবেস থেকে lazy loading (প্রয়োজন অনুযায়ী ডেটা লোড) এবং ডেটা ফিল্টারিং ব্যবহার করা উচিত।
Example: Efficient Data Fetching using SQL
String query = "SELECT * FROM employees WHERE hire_date >= ?";
PreparedStatement preparedStatement = connection.prepareStatement(query);
preparedStatement.setDate(1, Date.valueOf("2020-01-01"));
ResultSet resultSet = preparedStatement.executeQuery();
- JDBC Query Optimization: নির্দিষ্ট ডেটা নিয়ে কাজ করলে, অপ্রয়োজনীয় কলাম বা জটিল JOINs পরিহার করুন।
4. Use Subreports Efficiently
JasperReports এ subreports ব্যবহার করলে রিপোর্টের কাঠামো আরও পরিষ্কার এবং মডুলার হয়, তবে সাব-রিপোর্টে অতিরিক্ত complex calculations বা database queries না করার চেষ্টা করুন। Subreport কে data source হিসাবে সরাসরি JDBC বা pre-fetched data ব্যবহার করার মাধ্যমে অপটিমাইজ করুন।
Subreport Example:
<subreport>
<reportElement x="0" y="20" width="555" height="200"/>
<subreportExpression><![CDATA["subreport.jasper"]]></subreportExpression>
<dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
</subreport>
5. Limit Memory Usage
JasperReports বড় ডেটাসেট এবং কমপ্লেক্স রিপোর্টে মেমরি ব্যবহার বাড়িয়ে ফেলতে পারে। এর জন্য কিছু পদ্ধতি রয়েছে:
- Compression: রিপোর্টের output ফাইলের সাইজ কমাতে compression techniques ব্যবহার করুন।
- Exporting Large Reports to Files: বড় রিপোর্টকে মেমরিতে না রেখে সরাসরি ফাইল আউটপুটে পাঠান।
Export to CSV Example (Efficient File Export):
JRCsvExporter exporter = new JRCsvExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.setExporterOutput(new SimpleWriterExporterOutput("output.csv"));
exporter.exportReport();
6. Use Pagination for Large Reports
যখন রিপোর্টে অনেক রেকর্ড থাকে, তখন পুরো রিপোর্ট একসাথে প্রদর্শন করার চেয়ে পৃষ্ঠার ভিত্তিতে pagination ব্যবহার করা ভাল।
Pagination Example:
<pageBreak />
<detail>
<band height="20">
<textField>
<reportElement x="0" y="0" width="200" height="20"/>
<textFieldExpression><![CDATA[$F{employee_name}]]></textFieldExpression>
</textField>
</band>
</detail>
Pagination ব্যবহার করে আপনি রেকর্ডগুলোকে পৃষ্ঠার মধ্যে ভাগ করে ফেলতে পারবেন, যা মেমরি ব্যবহারে দক্ষতা বৃদ্ধি করে।
7. Use JasperReports' Built-in Caching
JasperReports আপনাকে report caching সমর্থন করে, যার মাধ্যমে একাধিকবার রিপোর্টের জন্য একই ডেটা ব্যবহার করার ক্ষেত্রে পুনরায় প্রসেসিংয়ের প্রয়োজন হয় না।
Cache Example:
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);
JasperPrintCache.getInstance().add(jasperPrint);
8. Use Efficient Export Formats
যখন রিপোর্টের আউটপুটে Excel, HTML, বা PDF এক্সপোর্ট করবেন, তখন প্রতি ফরম্যাটের জন্য সঠিক এক্সপোর্ট মেথড এবং ফাইল সাইজ কাস্টমাইজেশন নিশ্চিত করুন।
- Excel Export: XLSX ফরম্যাটের পরিবর্তে XLS ফরম্যাট ব্যবহার করুন, কারণ XLSX ফরম্যাট সাধারণত দ্রুত এবং কম সাইজে হয়।
- PDF Export: রিপোর্টে অতিরিক্ত ইমেজ বা গ্রাফিক্স না রাখলে PDF ফাইল সাইজ কমানো যায়।
JasperExportManager.exportReportToXlsxFile(jasperPrint, "report.xlsx");
- JasperReports Performance Optimization এর জন্য ObjectMapper reuse, Streaming API, এবং efficient data fetching ব্যবহার করা উচিত।
- Subreports এবং pagination ব্যবহার করে বড় ডেটা সেট বা রিপোর্টগুলো মেমরি এবং সময়ের দিক থেকে দক্ষভাবে প্রক্রিয়া করা যায়।
- PDF এবং Excel এক্সপোর্টের জন্য font embedding, compression, এবং optimized queries নিশ্চিত করুন।
- Caching এবং export formats কাস্টমাইজেশন রিপোর্টের পারফরম্যান্স উন্নত করতে সাহায্য করে।
Read more