JasperReports একটি শক্তিশালী reporting engine যা ডেটা সুত্র থেকে রিপোর্ট তৈরি করতে সক্ষম। এর একটি বিশেষ বৈশিষ্ট্য হল subreport integration, যা মূল রিপোর্টের মধ্যে ছোট রিপোর্ট অন্তর্ভুক্ত করার সুবিধা দেয়। এছাড়াও Data Source Management JasperReports-এ ডেটা সংগ্রহের প্রক্রিয়াকে সহজ এবং ফ্লেক্সিবল করে তোলে।
এখানে Subreport এবং Data Source Management ব্যবহার করে রিপোর্ট তৈরির প্রক্রিয়া এবং কনফিগারেশন সম্পর্কে বিস্তারিত আলোচনা করা হবে।
1. Subreport Integration in JasperReports
Subreport হল একটি রিপোর্ট যা মূল রিপোর্টের মধ্যে অন্তর্ভুক্ত থাকে। এটি তখন ব্যবহৃত হয় যখন আপনার মূল রিপোর্টের মধ্যে একটি অন্য রিপোর্ট থাকতে পারে, যেমন একটি one-to-many relationship রিপোর্ট, বা nested reports। JasperReports-এ Subreport ব্যবহার করে আপনি ছোট রিপোর্টগুলোর আউটপুট মূল রিপোর্টের মধ্যে অন্তর্ভুক্ত করতে পারেন।
Subreport এর জন্য প্রয়োজনীয় কনফিগারেশন
- Main Report তৈরি করুন, যেখানে Subreport যুক্ত করা হবে।
- Subreport File তৈরি করুন, যা মূল রিপোর্টে অন্তর্ভুক্ত হবে।
- Subreport-এ ডেটা পাঠানোর জন্য parameters এবং data sources কনফিগার করুন।
Subreport Example
ধরা যাক, আমাদের একটি Main Report রয়েছে, যেখানে একটি Subreport থাকবে যা সম্পর্কিত Order Details প্রদর্শন করবে।
Main Report (JRXML):
<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/jasperreports.xsd"
name="MainReport" pageWidth="595" pageHeight="842" columnWidth="515" leftMargin="40" rightMargin="40" topMargin="40" bottomMargin="40">
<!-- Main Report Header -->
<pageHeader>
<band height="40">
<textField>
<reportElement x="0" y="0" width="515" height="40"/>
<textFieldExpression><![CDATA["Main Report Title"]]></textFieldExpression>
</textField>
</band>
</pageHeader>
<!-- Main Report Detail with Subreport -->
<detail>
<band height="200">
<subreport>
<reportElement x="0" y="0" width="515" height="200"/>
<subreportExpression><![CDATA["Subreport.jasper"]]></subreportExpression>
<dataSourceExpression><![CDATA[$P{ReportDataSource}]]></dataSourceExpression>
<!-- Optional: Pass Parameters -->
<subreportParameter name="OrderId" class="java.lang.Integer">
<subreportParameterExpression><![CDATA[$F{orderId}]]></subreportParameterExpression>
</subreportParameter>
</subreport>
</band>
</detail>
</jasperReport>
এখানে, Main Report-এ একটি Subreport অন্তর্ভুক্ত করা হয়েছে। subreportExpression এর মাধ্যমে Subreport.jasper ফাইলটি উল্লেখ করা হয়েছে। subreportParameter এর মাধ্যমে OrderId প্যারামিটার মূল রিপোর্ট থেকে সাবরিপোর্টে পাঠানো হচ্ছে।
Subreport (JRXML):
<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/jasperreports.xsd"
name="Subreport" pageWidth="515" pageHeight="842" columnWidth="515" leftMargin="40" rightMargin="40" topMargin="40" bottomMargin="40">
<parameter name="OrderId" class="java.lang.Integer"/>
<!-- Subreport Detail -->
<detail>
<band height="50">
<textField>
<reportElement x="0" y="0" width="515" height="50"/>
<textFieldExpression><![CDATA["Order ID: " + $P{OrderId}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
এখানে Subreport-এ OrderId প্যারামিটার ব্যবহার করা হয়েছে এবং $P{OrderId} এর মাধ্যমে মূল রিপোর্ট থেকে আসা মানটি সাবরিপোর্টে প্রদর্শিত হচ্ছে।
2. Data Source Management in JasperReports
Data Source হল একটি উৎস যা থেকে JasperReports ডেটা সংগ্রহ করে রিপোর্ট তৈরি করে। JasperReports বিভিন্ন ধরনের ডেটা সোর্স সাপোর্ট করে, যেমন JDBC, JavaBeans, XML, CSV ইত্যাদি।
JasperReports-এর বিভিন্ন ধরনের DataSource
JDBC DataSource:
- JDBC ডেটাবেজ থেকে ডেটা এনে রিপোর্ট তৈরি করা হয়। JDBC ডেটা সোর্স ব্যবহারের জন্য JDBC connection ব্যবহার করা হয়।
String sqlQuery = "SELECT * FROM orders"; Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password"); JRResultSetDataSource jrDataSource = new JRResultSetDataSource(resultSet);JavaBeans DataSource:
- JavaBeans ক্লাসের প্রপার্টি ব্যবহার করে ডেটা সোর্স তৈরি করা হয়। আপনি JavaBeans ক্লাস ব্যবহার করে ডেটা সংগ্রহ করতে পারেন এবং তারপর সেই ডেটা রিপোর্টে ফিল্ড হিসেবে ব্যবহার করতে পারেন।
List<Employee> employees = employeeService.getEmployees(); JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(employees);CSV DataSource:
- CSV ফাইল থেকেও ডেটা সংগ্রহ করা যেতে পারে। এখানে আপনি CSV ফাইলের পাথ বা ডেটার প্রকার নির্ধারণ করে ডেটা সোর্স তৈরি করতে পারেন।
File csvFile = new File("data.csv"); CsvDataSource csvDataSource = new CsvDataSource(csvFile);XML DataSource:
- XML ফাইল থেকেও ডেটা সংগ্রহ করা যায়। এটি সাধারণত XML ফাইলের স্ট্রাকচার অনুযায়ী ডেটা নির্ধারণ করে।
File xmlFile = new File("data.xml"); JRXmlDataSource xmlDataSource = new JRXmlDataSource(xmlFile, "/orders/order");
DataSource Example in JasperReports:
import net.sf.jasperreports.engine.*;
import java.util.*;
public class ReportGenerator {
public static void generateReport() throws JRException {
// DataSource (Here we use a collection of JavaBeans)
List<Employee> employees = getEmployees(); // Assume this method fetches employee data
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(employees);
// JasperReport Compilation
JasperReport jasperReport = JasperCompileManager.compileReport("EmployeeReport.jrxml");
// Report Parameters (optional)
Map<String, Object> parameters = new HashMap<>();
parameters.put("ReportTitle", "Employee Report");
// Fill Report with Data and Parameters
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);
// Export to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "EmployeeReport.pdf");
}
// Example method to fetch employee data
private static List<Employee> getEmployees() {
List<Employee> employees = new ArrayList<>();
employees.add(new Employee(1, "John", "Doe"));
employees.add(new Employee(2, "Jane", "Smith"));
return employees;
}
}
এখানে:
- DataSource: JavaBeans (Employee) ব্যবহার করা হয়েছে।
- JasperCompileManager: JRXML ফাইল কম্পাইল করার জন্য ব্যবহৃত হয়েছে।
- JasperFillManager: রিপোর্টের জন্য ডেটা এবং প্যারামিটার যুক্ত করার জন্য ব্যবহৃত হয়েছে।
- JasperExportManager: রিপোর্টটি PDF ফরম্যাটে রেন্ডার করার জন্য ব্যবহৃত হয়েছে।
3. Subreport এবং Data Source Management এর মধ্যে সম্পর্ক
JasperReports-এ Subreport এবং Data Source একে অপরের সাথে সম্পর্কিত। Subreport সাধারণত মূল রিপোর্টের জন্য অতিরিক্ত ডেটা বা রিপোর্ট দেখানোর জন্য ব্যবহৃত হয় এবং এটি মূল রিপোর্টের ডেটা সোর্স ব্যবহার করতে পারে বা একটি নতুন ডেটা সোর্সের মাধ্যমে আলাদা ডেটা রিপোর্ট তৈরি করতে পারে।
Subreport এর DataSource পাস করা:
Map<String, Object> parameters = new HashMap<>();
parameters.put("ReportDataSource", new JRBeanCollectionDataSource(orderDetails)); // Pass DataSource to Subreport
এখানে, orderDetails এর মাধ্যমে Subreport-এ ডেটা পাঠানো হচ্ছে। Subreport JRBeanCollectionDataSource ব্যবহার করে এই ডেটাকে এক্সেস করবে এবং উপস্থাপন করবে।
- Subreport: JasperReports-এ Subreport ব্যবহার করে আপনি মূল রিপোর্টের অংশ হিসেবে ছোট রিপোর্ট অন্তর্ভুক্ত করতে পারেন। এটি
subreportExpression,subreportParameter, এবংdataSourceExpressionএর মাধ্যমে কনফিগার করা হয়। - Data Source Management: JasperReports বিভিন্ন ধরনের ডেটা সোর্স যেমন JDBC, JavaBeans, CSV, এবং XML সাপোর্ট করে, যা বিভিন্ন ডেটা সোর্স থেকে রিপোর্ট তৈরি করতে সাহায্য করে।
- Subreport এবং Data Source: Subreport-এ ডেটা সোর্স পাস করার জন্য, মূল রিপোর্টের ডেটা সোর্স ব্যবহার করা যেতে পারে বা একটি নতুন ডেটা সোর্স সেট করা যেতে পারে।
এই কনফিগারেশনগুলোর মাধ্যমে JasperReports-এর রিপোর্ট জেনারেশন এবং ডেটা ম্যানেজমেন্ট প্রক্রিয়া আরও কার্যকর এবং নমনীয় হতে পারে।
Read more