JasperReports একটি শক্তিশালী রিপোর্টিং লাইব্রেরি যা বিভিন্ন ধরনের রিপোর্ট তৈরি করতে ব্যবহৃত হয়, যেমন PDF, HTML, Excel, CSV ইত্যাদি ফরম্যাটে। রিপোর্টের layout এবং design কাস্টমাইজ করা খুবই গুরুত্বপূর্ণ, কারণ এটি রিপোর্টের কার্যকারিতা এবং ব্যবহারকারী অভিজ্ঞতা প্রভাবিত করে।
এই নিবন্ধে, আমরা JasperReports-এ রিপোর্টের layout এবং design কাস্টমাইজেশনের কিছু গুরুত্বপূর্ণ দিক এবং best practices আলোচনা করব।
1. JasperReports Layout Structure
JasperReports রিপোর্টের layout সাধারণত তিনটি মূল অংশে বিভক্ত থাকে:
- Title: রিপোর্টের শিরোনাম বা প্রাথমিক তথ্য।
- Detail: রিপোর্টের প্রধান ডেটা যা পুনরাবৃত্তি হয়।
- Summary: রিপোর্টের শেষে সংক্ষিপ্ত বা সারাংশ, যেমন মোট যোগফল বা অন্যান্য উপসংহার।
Layout Sections:
- Title: রিপোর্টের শিরোনাম বা প্রথম অংশ।
- Column Header: কলাম হেডার যা ডেটা সঞ্চয়ের জন্য ব্যবহৃত হয়।
- Detail: মূল ডেটা প্রদর্শন।
- Column Footer: কলামের জন্য ফুটার।
- Page Header: পৃষ্ঠার শিরোনাম।
- Page Footer: পৃষ্ঠার ফুটার।
- Summary: রিপোর্টের সারাংশ বা উপসংহার।
2. JasperReports Design Customization
JasperReports Studio একটি Eclipse-based IDE যা গ্রাফিকাল ইন্টারফেস সরবরাহ করে, যাতে রিপোর্ট ডিজাইন করতে সহজ হয়। এই টুলের মাধ্যমে আপনি layout কাস্টমাইজ করতে, fields, parameters, variables যোগ করতে, এবং styling বা theming পরিবর্তন করতে পারেন।
Best Practices for Customizing Report Layout:
- Grid-based Layout:
- Grid layout ব্যবহার করে রিপোর্টের উপাদানগুলি সুসংগঠিত করুন।
- JasperReports Studio-এ ড্র্যাগ-এন্ড-ড্রপ পদ্ধতি ব্যবহার করে ইলিমেন্টগুলিকে সঠিকভাবে সাজানো সহজ।
- Fonts and Text Styling:
- রিপোর্টের font এবং text styling কাস্টমাইজ করার জন্য text properties এবং styles ব্যবহার করুন। যেমন: bold, italic, underline ইত্যাদি।
- Conditional Styling:
- Conditional styling ব্যবহার করে কিছু ক্ষেত্রের স্টাইল পরিবর্তন করুন। উদাহরণস্বরূপ, যদি একটি value একটি নির্দিষ্ট সীমার চেয়ে বেশি হয়, তবে সেটি bold বা red রঙে প্রদর্শন করুন।
- Subreports and Charts:
- Subreports ব্যবহার করুন যখন আপনার রিপোর্টের মধ্যে nested reports বা charts যোগ করার প্রয়োজন হয়।
3. Customizing the Report Layout:
Adding Fields and Parameters to the Report
- Fields:
- Fields হল রিপোর্টের ডেটা, যা সাধারণত ডেটাবেস বা অন্যান্য সোর্স থেকে আসে।
- আপনি রিপোর্টের ডিজাইনে fields যোগ করতে পারেন যা ডেটা টেবিল বা অন্যান্য সন্নিবেশিত ডেটা প্রকাশ করবে।
Example: Adding Fields to Report Layout
JasperReports Studio-এ, আপনি Fields যোগ করার জন্য:
- Report Inspector-এ Fields অংশে ক্লিক করুন।
- Add Field বাটন ক্লিক করে আপনার field যুক্ত করুন।
Adding Parameters
Parameters এমন ডেটা যা রিপোর্টে কাস্টমাইজড ইনপুট হিসেবে প্রদান করা হয়। ব্যবহারকারী যখন রিপোর্টটি চালান, তখন তারা parameters এর মান প্রদান করতে পারে।
<parameter name="StartDate" class="java.util.Date"/>
<parameter name="EndDate" class="java.util.Date"/>
Java কোডে এই parameters পাঠানোর জন্য:
Map<String, Object> parameters = new HashMap<>();
parameters.put("StartDate", new Date());
parameters.put("EndDate", new Date());
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);
4. Layout Customization: Adding Styling and Formatting
JasperReports-এর styling এবং formatting কাস্টমাইজেশন ডেটা এবং ডিজাইনের জন্য অত্যন্ত গুরুত্বপূর্ণ। আপনি ফন্ট, সীমানা (borders), ব্যাকগ্রাউন্ড কালার ইত্যাদি কাস্টমাইজ করতে পারেন।
1. Font and Text Formatting
রিপোর্টের টেক্সট স্টাইল কাস্টমাইজ করতে TextField ব্যবহার করা হয়। এর মাধ্যমে আপনি font size, color, alignment ইত্যাদি কাস্টমাইজ করতে পারবেন।
<textField>
<reportElement x="0" y="0" width="200" height="30"/>
<textElement fontSize="14" isBold="true" isItalic="true">
<font fontName="Arial"/>
</textElement>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
2. Conditional Formatting
যখন ডেটার ভিত্তিতে রিপোর্টের স্টাইল পরিবর্তন করতে চান, তখন conditional formatting ব্যবহার করুন।
<textField>
<reportElement x="0" y="0" width="200" height="30"/>
<textElement fontSize="14">
<font fontName="Arial"/>
</textElement>
<textFieldExpression><![CDATA[$F{age} > 30 ? "Senior" : "Junior"]]></textFieldExpression>
</textField>
এখানে, যদি age 30 এর বেশি হয়, তবে টেক্সট Senior এবং 30 এর কম হলে Junior হবে।
3. Adding Subreports
Subreport এমন একটি রিপোর্ট যা আপনার মূল রিপোর্টে অন্তর্ভুক্ত থাকে এবং এটি একটি স্বতন্ত্র রিপোর্ট হিসেবে কাজ করে। আপনি যখন একটি জটিল বা বড় রিপোর্ট তৈরি করতে চান এবং কিছু অংশ আলাদা রিপোর্ট হিসেবে করতে চান তখন এটি ব্যবহৃত হয়।
<subreport>
<reportElement x="0" y="100" width="400" height="300"/>
<subreportExpression><![CDATA["subreport.jasper"]]></subreportExpression>
</subreport>
এখানে subreport.jasper একটি আলাদা রিপোর্ট যা মূল রিপোর্টে অন্তর্ভুক্ত হচ্ছে।
5. Page Layout Customization
JasperReports-এ পৃষ্ঠা লেআউট কাস্টমাইজ করা অনেক গুরুত্বপূর্ণ, বিশেষ করে যখন আপনি portrait বা landscape ফরম্যাটে রিপোর্ট তৈরি করতে চান।
Example: Page Orientation and Size
<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"
pageWidth="595" pageHeight="842"
columnWidth="535" columnSpacing="0"
leftMargin="20" rightMargin="20"
topMargin="20" bottomMargin="20">
<property name="net.sf.jasperreports.print.keep_full_text" value="true"/>
<property name="net.sf.jasperreports.print.keep_text" value="true"/>
</jasperReport>
এখানে, পৃষ্ঠার আকার A4 হিসাবে সেট করা হয়েছে, এবং মার্জিন নির্ধারণ করা হয়েছে।
6. Adding Charts and Graphs
JasperReports-এ charts যোগ করতে গেলে আপনি JFreeChart লাইব্রেরি ব্যবহার করতে পারেন, যা বিভিন্ন ধরণের চার্ট (pie chart, bar chart, line chart) তৈরি করতে সহায়তা করে।
<chart>
<reportElement x="0" y="50" width="400" height="300"/>
<chartTitle>
<font fontName="Arial" size="14" isBold="true"/>
<textFieldExpression><![CDATA["Sales Chart"]]></textFieldExpression>
</chartTitle>
<categoryDataset>
<dataset>
<datasetRun subDataset="chartDataset" />
</dataset>
</categoryDataset>
</chart>
JasperReports-এ রিপোর্ট ডিজাইন এবং লেআউট কাস্টমাইজেশন একটি গুরুত্বপূর্ণ প্রক্রিয়া, যা রিপোর্টের অর্গানাইজেশন এবং ইউজার এক্সপেরিয়েন্স উন্নত করে। এই প্রক্রিয়ার মধ্যে fields, parameters, variables, conditional formatting, subreports, charts, এবং page layout কাস্টমাইজেশন অন্তর্ভুক্ত রয়েছে। JasperReports Studio এর মাধ্যমে গ্রাফিক্যালভাবে এই কাস্টমাইজেশনগুলি করা যায়, যা রিপোর্ট তৈরি করার প্রক্রিয়াকে অনেক সহজ করে তোলে।
JasperReports হল একটি শক্তিশালী রিপোর্টিং লাইব্রেরি যা বিভিন্ন ধরনের রিপোর্ট তৈরি করতে সহায়তা করে, যেমন PDF, Excel, HTML, CSV ইত্যাদি। Band রিপোর্ট ডিজাইনে একটি গুরুত্বপূর্ণ উপাদান, কারণ এটি রিপোর্টের বিভিন্ন অংশের জন্য ব্যবহৃত হয়, যেমন header, detail, footer, ইত্যাদি। Bands রিপোর্টের একেকটি লেআউট বা সেগমেন্টের কাজ করে এবং প্রতিটি Band-এর একটি নির্দিষ্ট কাজ থাকে।
Band এর ধরন
JasperReports-এ মূলত কয়েকটি Band থাকে যা রিপোর্টের বিভিন্ন অংশে ব্যবহৃত হয়:
- Title Band
- এটি রিপোর্টের প্রথম অংশ, এবং সাধারণত রিপোর্টের শিরোনাম বা টাইটেল উপস্থাপন করার জন্য ব্যবহৃত হয়।
- এটি একবারই প্রিন্ট হয় এবং রিপোর্টের প্রথম পৃষ্ঠায় থাকে।
- Page Header Band
- Page Header band প্রতিটি পৃষ্ঠার শীর্ষে থাকে। সাধারণত, এটি পৃষ্ঠার শিরোনাম বা রিপোর্টের সাধারণ শিরোনাম দেখানোর জন্য ব্যবহৃত হয়।
- এটি প্রতিটি পৃষ্ঠায় প্রিন্ট হয়।
- Column Header Band
- Column Header band রিপোর্টে প্রতিটি কলামের শিরোনাম বা লেবেল ধারণ করে, এবং সাধারণত এটি টেবিলের প্রথম রো হিসেবে থাকে।
- এটি শুধুমাত্র রিপোর্টের প্রথম পৃষ্ঠায় প্রিন্ট হয়।
- Detail Band
- Detail band রিপোর্টের মূল অংশ যা ডেটা উপস্থাপন করে। সাধারণত এটি পৃষ্ঠার প্রধান ডেটা শো করার জন্য ব্যবহৃত হয়, যেমন: তালিকা, রেকর্ড ইত্যাদি।
- এটি রিপোর্টের প্রতিটি পৃষ্ঠায় প্রিন্ট হয় যতক্ষণ না সব ডেটা প্রিন্ট হয়ে যায়।
- Column Footer Band
- Column Footer band সাধারণত কাস্টম সারাংশ বা কলামের শেষে কিছু পরিসংখ্যান দেখানোর জন্য ব্যবহৃত হয় (যেমন মোট, গড়, ম্যাক্সিমাম ইত্যাদি)।
- এটি শুধুমাত্র রিপোর্টের শেষে প্রিন্ট হয়।
- Page Footer Band
- Page Footer band সাধারণত পৃষ্ঠার তলায় থাকে এবং এখানে পৃষ্ঠা নম্বর, প্রিন্টিং তারিখ, বা অন্যান্য তথ্য দেখানো হয়।
- এটি প্রতিটি পৃষ্ঠার শেষে প্রিন্ট হয়।
- Summary Band
- Summary band রিপোর্টের শেষের দিকে থাকে এবং সাধারণত রিপোর্টের সারাংশ বা চূড়ান্ত পরিসংখ্যান উপস্থাপন করে।
- এটি রিপোর্টের শেষে একবারই প্রিন্ট হয়।
Band Layout Design
JasperReports-এ band layout design রিপোর্টের কাঠামো তৈরি করার জন্য ব্যবহৃত হয়। প্রতিটি band একেকটি সেগমেন্ট বা অংশে ডেটা উপস্থাপন করে এবং আপনাকে রিপোর্টের ডিজাইন কাস্টমাইজ করতে সহায়তা করে।
Band Layout Design এর মূল উপাদানসমূহ:
- Report Title:
- Report Title band সাধারণত রিপোর্টের শিরোনাম বা নাম প্রদর্শন করার জন্য ব্যবহৃত হয়। এটি সাধারণত Title band এর মধ্যে থাকে এবং রিপোর্টের প্রথম পৃষ্ঠায় প্রিন্ট হয়।
- Text Fields:
- Text Field ব্যবহার করে আপনি রিপোর্টের ভিতরে টেক্সট বা ডেটা দেখাতে পারেন। এটি প্রতিটি band-এ ব্যবহার করা যেতে পারে।
- Static Text:
- Static Text সাধারণত স্থির টেক্সট দেখানোর জন্য ব্যবহৃত হয়, যেমন লেবেল বা নির্দেশনা।
- Variables:
- আপনি Variables ব্যবহার করতে পারেন রিপোর্টে পরিসংখ্যান বা ডেটার অঙ্কন প্রদর্শন করার জন্য।
- Images:
- আপনি রিপোর্টে Images (যেমন লোগো বা চার্ট) যুক্ত করতে পারেন।
- Subreport:
- JasperReports-এ আপনি একটি Subreport যোগ করতে পারেন যেখানে অন্য একটি রিপোর্ট এমবেড করা থাকে। এটি
subreportband-এ থাকে।
- JasperReports-এ আপনি একটি Subreport যোগ করতে পারেন যেখানে অন্য একটি রিপোর্ট এমবেড করা থাকে। এটি
- Charts:
- Charts JasperReports-এর একটি শক্তিশালী বৈশিষ্ট্য যা ডেটার গ্রাফিক্যাল উপস্থাপন করতে সহায়তা করে।
উদাহরণ: Report Band Layout Design
এখানে একটি সাধারণ band layout উদাহরণ দেখানো হল যেখানে বিভিন্ন ধরনের Bands কিভাবে কাজ করে তা তুলে ধরা হয়েছে:
<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 -->
<title>
<band height="50">
<staticText>
<reportElement x="0" y="0" width="515" height="50" uuid="d1d5e2a1-9e55-4b8b-89d3-03fa47c54885"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Employee Report]]></text>
</staticText>
</band>
</title>
<!-- Page Header Band -->
<pageHeader>
<band height="30">
<staticText>
<reportElement x="0" y="0" width="515" height="30" uuid="1d4f8769-6b1a-47f7-8e36-404e458f35fe"/>
<textElement textAlignment="Left" verticalAlignment="Middle"/>
<text><![CDATA[Employee Details]]></text>
</staticText>
</band>
</pageHeader>
<!-- Column Header Band -->
<columnHeader>
<band height="30">
<staticText>
<reportElement x="0" y="0" width="170" height="30" uuid="39f647c3-3e0c-4eb0-88fe-6c1c9a2ca39f"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[ID]]></text>
</staticText>
<staticText>
<reportElement x="170" y="0" width="170" height="30" uuid="2b9e6a68-7c5f-47e9-b1c7-9d94a1edb2e2"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Name]]></text>
</staticText>
<staticText>
<reportElement x="340" y="0" width="170" height="30" uuid="1fe941ed-c53b-4b8c-9b24-055348d30a61"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Age]]></text>
</staticText>
</band>
</columnHeader>
<!-- Detail Band -->
<detail>
<band height="20">
<textField>
<reportElement x="0" y="0" width="170" height="20" uuid="1399236e-d8b4-4a18-b07b-3db23a5deae5"/>
<textElement textAlignment="Center"/>
<textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="170" y="0" width="170" height="20" uuid="b840cc69-2ca4-4cae-bc34-4fe3f0b8a235"/>
<textElement textAlignment="Center"/>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="340" y="0" width="170" height="20" uuid="bbdb21ed-42f0-4d62-9315-728fe417e7b0"/>
<textElement textAlignment="Center"/>
<textFieldExpression><![CDATA[$F{age}]]></textFieldExpression>
</textField>
</band>
</detail>
<!-- Page Footer Band -->
<pageFooter>
<band height="30">
<textField>
<reportElement x="0" y="0" width="515" height="30" uuid="f8373f36-99d1-4da1-ae99-5333de9256f4"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA["Page " + $V{PAGE_NUMBER}]]></textFieldExpression>
</textField>
</band>
</pageFooter>
</jasperReport>
Band Layout Design এর সংক্ষিপ্ত ব্যাখ্যা
- Title: রিপোর্টের শিরোনাম দেখানোর জন্য।
- Page Header: প্রতিটি পৃষ্ঠার শীর্ষে সাধারণ শিরোনাম দেখানোর জন্য।
- Column Header: টেবিলের কলামের শিরোনাম দেখানোর জন্য।
- Detail: রিপোর্টের প্রধান ডেটা শো করার জন্য (যেমন তালিকা বা রেকর্ড)।
- Page Footer: পৃষ্ঠার নিচে পৃষ্ঠার নম্বর বা অন্যান্য তথ্য দেখানোর জন্য।
- JasperReports-এ Band এর মাধ্যমে আপনি রিপোর্টের বিভিন্ন অংশ কাস্টমাইজ করতে পারেন।
- Title, Page Header, Detail, Column Header, Page Footer, এবং Summary gibi Bands রিপোর্টের বিভিন্ন অংশের কাজ করে।
- Layouts কাস্টমাইজ করে আপনি রিপোর্টকে আরও পাঠযোগ্য এবং ইন্টারেক্টিভ করতে পারেন, যেমন font styling, conditional formatting, charts, tables, subreports ইত্যাদি যোগ করে।
JasperReports-এ বিভিন্ন band ব্যবহার করে রিপোর্টের কাঠামো তৈরি করা হয়, এবং এই bands এর মাধ্যমে আপনি রিপোর্টে বিভিন্ন অংশ কাস্টমাইজ করতে পারেন, যেমন header, footer, title, summary, এবং detail। এই bands গুলি রিপোর্টের presentation এবং layout কাস্টমাইজ করার জন্য ব্যবহৃত হয়।
JasperReports Bands:
- Title Band:
- এটি রিপোর্টের প্রথম অংশ, যেখানে আপনি রিপোর্টের শিরোনাম বা অন্য প্রাথমিক তথ্য প্রদর্শন করতে পারেন।
- Page Header Band:
- এটি প্রতিটি পেজের শীর্ষে থাকে এবং সাধারণত রিপোর্টের শিরোনাম বা অন্যান্য স্থির তথ্য যেমন পেজ নম্বর, লোগো ইত্যাদি এখানে থাকে।
- Summary Band:
- এই band রিপোর্টের শেষে থাকে এবং সাধারণত রিপোর্টের উপসংহার, মোটামুটি তথ্য বা রিপোর্টের সারাংশ প্রদর্শন করে।
- Detail Band:
- এটি সবচেয়ে গুরুত্বপূর্ণ band, যেখানে আপনার মূল ডেটা প্রদর্শিত হয়। এখানে আপনি ডেটা রেকর্ড গুলি একে একে প্রদর্শন করেন, যেমন database থেকে আসা ডেটা বা JasperReports data source থেকে পাওয়া ডেটা।
- Page Footer Band:
- প্রতিটি পৃষ্ঠার শেষে থাকে এবং সাধারণত পেজ নম্বর, ডেটা বা রিপোর্টের অন্যান্য পরিসংখ্যান এখানে থাকে।
JasperReports-এর Band ব্যবহার করার একটি উদাহরণ:
Step 1: 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="SampleReport" language="java" pageWidth="595" pageHeight="842"
columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<!-- Title Band -->
<title>
<band height="40">
<staticText>
<reportElement x="0" y="0" width="555" height="40"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Employee Report]]></text>
</staticText>
</band>
</title>
<!-- Page Header Band -->
<pageHeader>
<band height="50">
<staticText>
<reportElement x="0" y="0" width="250" height="30"/>
<textElement textAlignment="Left" verticalAlignment="Middle"/>
<text><![CDATA[Company XYZ]]></text>
</staticText>
<textField>
<reportElement x="400" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA["Page " + $V{PAGE_NUMBER}]]></textFieldExpression>
</textField>
</band>
</pageHeader>
<!-- Detail Band -->
<detail>
<band height="30">
<textField>
<reportElement x="0" y="0" width="200" height="30"/>
<textFieldExpression><![CDATA[$F{employee_name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="250" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA[$F{employee_age}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="400" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA[$F{employee_salary}]]></textFieldExpression>
</textField>
</band>
</detail>
<!-- Summary Band -->
<summary>
<band height="50">
<staticText>
<reportElement x="0" y="0" width="555" height="50"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[End of Report]]></text>
</staticText>
</band>
</summary>
<!-- Page Footer Band -->
<pageFooter>
<band height="30">
<textField>
<reportElement x="400" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA["Page " + $V{PAGE_NUMBER}]]></textFieldExpression>
</textField>
</band>
</pageFooter>
</jasperReport>
Bands এর ভূমিকা এবং ব্যবহার
- Title Band:
- Title section সাধারণত রিপোর্টের শিরোনাম এবং মুল উদ্দেশ্য জানিয়ে থাকে। এটি রিপোর্টের প্রথম অংশ হিসেবে প্রদর্শিত হয়।
- এই উদাহরণে, Employee Report শিরোনাম
titleband-এ রয়েছে।
- Page Header Band:
- Page Header-এ আপনি কোম্পানির নাম, লোগো, পেজ নম্বর বা অন্য কোনো স্থির তথ্য প্রদর্শন করতে পারেন।
- উদাহরণে, Company XYZ নামটি pageHeader band-এ রয়েছে, এবং পেজ নম্বরও এখানে প্রদর্শিত হয়েছে।
- Detail Band:
- Detail band হল রিপোর্টের প্রধান অংশ, যেখানে ডেটা প্রদর্শিত হয়। সাধারণত, এই band-এ database থেকে আসা ডেটা থাকে, যেমন Employee Name, Age, এবং Salary।
- এই অংশটি ডেটা সোর্স (JDBC, Collection, etc.) এর প্রতিটি রেকর্ডকে JSON বা টেবিল আকারে প্রদর্শন করে।
- Summary Band:
- Summary band সাধারণত রিপোর্টের শেষে আসে এবং কোনো উপসংহার বা সারাংশ প্রদান করে। এটি ঐ রিপোর্টটির শেষ অংশ হিসেবে ব্যবহার করা হয়।
- এই উদাহরণে, End of Report বার্তা summary band-এ আছে।
- Page Footer Band:
- Page Footer একটি পেজের নিচের অংশে থাকে, এবং সাধারণত পেজ নম্বর বা অন্য তথ্য প্রকাশ করতে ব্যবহৃত হয়।
- এখানে, পেজ নম্বর প্রদর্শিত হচ্ছে pageFooter band-এ।
Step 2: JasperReports Template Compilation and Report Generation
এখন যে JRXML ফাইল তৈরি করা হয়েছে, সেটি Java Code দিয়ে কম্পাইল করা এবং রিপোর্ট তৈরি করা হবে। নিচে এক্সামপল কোড দেওয়া হল:
Java Code for Report Generation:
import net.sf.jasperreports.engine.*;
import java.util.HashMap;
import java.util.Map;
public class ReportGeneration {
public static void main(String[] args) {
try {
// Compile JRXML to Jasper Report
JasperReport jasperReport = JasperCompileManager.compileReport("example_report.jrxml");
// Parameters to be passed to the report
Map<String, Object> parameters = new HashMap<>();
parameters.put("ReportTitle", "Employee Report");
// Fill the report with data (Here we use an empty data source for demonstration)
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());
// Export the report to a PDF file
JasperExportManager.exportReportToPdfFile(jasperPrint, "EmployeeReport.pdf");
// Optionally, view the report in a viewer
JasperViewer.viewReport(jasperPrint, false);
System.out.println("Report generated successfully!");
} catch (JRException e) {
e.printStackTrace();
}
}
}
Report Output:
- এই কোডটি JRXML ফাইল থেকে একটি JasperReport তৈরি করে এবং রিপোর্টটিকে PDF আকারে রপ্তানি করে।
- আপনি JasperViewer ব্যবহার করে রিপোর্টটি দেখতে পারেন।
- JasperReports-এ বিভিন্ন bands (Title, PageHeader, Detail, Summary, PageFooter) ব্যবহার করে রিপোর্টের কাঠামো তৈরি করা যায়।
- প্রতিটি band রিপোর্টের নির্দিষ্ট অংশ পরিচালনা করে, যেমন title ফিল্ডে শিরোনাম, detail band-এ ডেটা প্রদর্শন, summary-এ উপসংহার, এবং footer-এ পেজ নম্বর।
- আপনি আপনার রিপোর্টের জন্য কাস্টম ডিজাইন এবং লেআউট তৈরি করতে এই bands ব্যবহার করতে পারেন।
JasperReports-এ Table, CrossTab, এবং List হল রিপোর্টে ডেটা প্রদর্শনের জন্য ব্যবহৃত তিনটি প্রধান কম্পোনেন্ট। এগুলি বিভিন্ন ধরনের ডেটা প্রেজেন্টেশন করতে সহায়ক এবং আপনার রিপোর্টের ডেটা দেখানোর কাঠামো এবং স্টাইল কাস্টমাইজ করতে সাহায্য করে।
1. Table Component:
Table কম্পোনেন্টের মাধ্যমে আপনি ডেটাকে টেবিল আকারে প্রদর্শন করতে পারেন, যেখানে বিভিন্ন কলাম এবং রো থাকবে। এটি সাধারণত <dataset> ব্যবহার করে ডেটা ফিল্টার এবং প্রদর্শন করতে ব্যবহৃত হয়।
Table Component ব্যবহার করার উদাহরণ:
<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">
<!-- Table Component -->
<detail>
<band height="400">
<table width="555">
<!-- Table header -->
<columnHeader>
<row height="20">
<cell>
<textElement textAlignment="Center">
<font size="12" isBold="true"/>
</textElement>
<text><![CDATA[Employee Name]]></text>
</cell>
<cell>
<textElement textAlignment="Center">
<font size="12" isBold="true"/>
</textElement>
<text><![CDATA[Age]]></text>
</cell>
<cell>
<textElement textAlignment="Center">
<font size="12" isBold="true"/>
</textElement>
<text><![CDATA[Salary]]></text>
</cell>
</row>
</columnHeader>
<!-- Table data -->
<detail>
<row height="20">
<cell>
<textField>
<reportElement x="0" y="0" width="185" height="20"/>
<textFieldExpression><![CDATA[$F{employee_name}]]></textFieldExpression>
</textField>
</cell>
<cell>
<textField>
<reportElement x="185" y="0" width="185" height="20"/>
<textFieldExpression><![CDATA[$F{age}]]></textFieldExpression>
</textField>
</cell>
<cell>
<textField>
<reportElement x="370" y="0" width="185" height="20"/>
<textFieldExpression><![CDATA[$F{salary}]]></textFieldExpression>
</textField>
</cell>
</row>
</detail>
</table>
</band>
</detail>
</jasperReport>
ব্যাখ্যা:
<table>কম্পোনেন্টের মাধ্যমে টেবিল তৈরি করা হয়েছে।<columnHeader>এবং<detail>এর মাধ্যমে টেবিলের হেডার এবং ডেটা রো সুনির্দিষ্ট করা হয়েছে।$F{employee_name},$F{age}, এবং$F{salary}হল ফিল্ড এক্সপ্রেশন যেগুলি ডেটাবেস বা ডেটা সোর্স থেকে আসবে।
2. CrossTab Component:
CrossTab কম্পোনেন্টটি একটি শক্তিশালী টুল যা টেবিলের মতো ডেটা প্রদর্শন করে কিন্তু row এবং column ডেটার ভিত্তিতে সমন্বিত করে একটি কাস্টমাইজড ডেটা রিপোর্ট তৈরি করতে ব্যবহৃত হয়। এটি মূলত pivot tables এবং summary reports তৈরি করার জন্য ব্যবহৃত হয়।
CrossTab Component উদাহরণ:
<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="salesCrossTabReport" language="java" pageWidth="595" pageHeight="842"
columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<!-- CrossTab Component -->
<detail>
<band height="400">
<crossTab width="555" height="300">
<!-- Define Row Grouping -->
<crossTabRowGroup name="Product" />
<!-- Define Column Grouping -->
<crossTabColumnGroup name="Month" />
<!-- Define Measures -->
<crossTabMeasure name="Sales" class="java.lang.Double" />
<!-- Displaying Summary Data -->
<measure>
<reportElement x="0" y="0" width="100" height="20"/>
<textFieldExpression><![CDATA[$V{Sales}.doubleValue()]]></textFieldExpression>
</measure>
</crossTab>
</band>
</detail>
</jasperReport>
ব্যাখ্যা:
<crossTab>কম্পোনেন্ট ডেটার ক্রস-ট্যাবুলার ভিউ তৈরি করে, যেখানে row এবং column গ্রুপিং করা হয়।<crossTabRowGroup>এবং<crossTabColumnGroup>ডেটার গ্রুপিং নির্ধারণ করে।<crossTabMeasure>পরিমাপ হিসাবে ডেটা দেখায়।
3. List Component:
List কম্পোনেন্ট ব্যবহার করা হয় যখন আপনার রিপোর্টে ডায়নামিক তালিকা থাকতে হবে। এটি dynamic ফিল্ড লিস্ট তৈরি করতে ব্যবহৃত হয়, যেখানে ডেটার সংখ্যা পরিবর্তন হতে পারে এবং প্রতিটি রো একে অপর থেকে আলাদা হতে পারে।
List Component উদাহরণ:
<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="employeeListReport" language="java" pageWidth="595" pageHeight="842"
columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<!-- List Component -->
<detail>
<band height="200">
<list width="555">
<!-- List Header -->
<columnHeader>
<row height="20">
<cell>
<text><![CDATA[Employee Name]]></text>
</cell>
<cell>
<text><![CDATA[Employee Position]]></text>
</cell>
</row>
</columnHeader>
<!-- List Data -->
<detail>
<row height="20">
<cell>
<textField>
<reportElement x="0" y="0" width="200" height="20"/>
<textFieldExpression><![CDATA[$F{employee_name}]]></textFieldExpression>
</textField>
</cell>
<cell>
<textField>
<reportElement x="220" y="0" width="200" height="20"/>
<textFieldExpression><![CDATA[$F{employee_position}]]></textFieldExpression>
</textField>
</cell>
</row>
</detail>
</list>
</band>
</detail>
</jasperReport>
ব্যাখ্যা:
<list>কম্পোনেন্ট ব্যবহার করে ডায়নামিক তালিকা তৈরি করা হয়েছে, যেখানে একাধিক রো থাকতে পারে।<columnHeader>এর মাধ্যমে তালিকার হেডার তৈরি করা হয়েছে এবং<detail>এর মাধ্যমে ডেটা তালিকায় প্রদর্শিত হয়েছে।
- Table Component: ডেটা টেবিল আকারে প্রদর্শনের জন্য ব্যবহৃত হয়, যেখানে কলাম এবং রো নির্ধারণ করে ডেটা প্রদর্শিত হয়।
- CrossTab Component: টেবিলের মতো ডেটা প্রেজেন্টেশন করে কিন্তু row এবং column গ্রুপিং করে পিভট টেবিল বা স্যামারি রিপোর্ট তৈরি করতে ব্যবহৃত হয়।
- List Component: ডায়নামিক ডেটা তালিকা তৈরি করার জন্য ব্যবহৃত হয়, যেখানে তালিকার দৈর্ঘ্য পরিবর্তন হতে পারে এবং প্রতিটি রো আলাদা হতে পারে।
এই কম্পোনেন্টগুলো JasperReports-এর মাধ্যমে রিপোর্ট তৈরি করার সময় আপনার ডেটার কাঠামো কাস্টমাইজ করতে সাহায্য করবে এবং আপনি আপনার রিপোর্টকে আরও আরও কার্যকরভাবে উপস্থাপন করতে পারবেন।
JasperReports একটি শক্তিশালী Java রিপোর্টিং লাইব্রেরি, যা রিপোর্ট তৈরি, কাস্টমাইজেশন এবং ডেটার প্রেজেন্টেশন খুবই সহজ করে তোলে। Conditional Formatting এবং Custom Layout ব্যবহার করে আপনি আপনার রিপোর্টে ডাইনামিক স্টাইলিং এবং কাস্টম ডিজাইন যুক্ত করতে পারেন, যা আপনার রিপোর্টকে আরও প্রাসঙ্গিক এবং ইউজার-ফ্রেন্ডলি করে তোলে।
1. Conditional Formatting in JasperReports
Conditional Formatting হল এমন একটি কৌশল যা রিপোর্টের বিভিন্ন অংশের স্টাইল পরিবর্তন করতে ব্যবহৃত হয়, যখন কিছু নির্দিষ্ট শর্ত পূর্ণ হয়। এটি ব্যবহারকারীর জন্য তথ্যকে আরও কার্যকরী এবং দৃশ্যমান করে তোলে। উদাহরণস্বরূপ, আপনি যদি একটি ফিনান্সিয়াল রিপোর্টে negative values রেড রঙে প্রদর্শন করতে চান, তাহলে conditional formatting ব্যবহার করবেন।
Conditional Formatting Example
ধরা যাক, আপনি একটি বিক্রয় রিপোর্ট তৈরি করছেন, যেখানে amount ফিল্ডে যদি মান negative হয় তবে সেই ফিল্ডটি রেড রঙে প্রদর্শিত হবে।
Step 1: JRXML ফাইলে Conditional Formatting
<?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="SalesReport" language="java" pageWidth="595" pageHeight="842"
columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<!-- Fields -->
<field name="salesAmount" class="java.lang.Double"/>
<!-- Detail Section -->
<detail>
<band height="20">
<textField>
<reportElement x="0" y="0" width="200" height="20"/>
<textFieldExpression><![CDATA[$F{salesAmount}]]></textFieldExpression>
<textElement>
<font size="12"/>
<!-- Conditional formatting: Change color based on value -->
<textElement>
<font color="red"/>
<conditionalStyle>
<conditionExpression><![CDATA[$F{salesAmount} < 0]]></conditionExpression>
<style>
<font color="red"/>
</style>
</conditionalStyle>
</textElement>
</textElement>
</textField>
</band>
</detail>
</jasperReport>
বর্ণনা:
- ConditionalStyle এবং conditionExpression ব্যবহার করে আপনি সুনির্দিষ্ট শর্তের উপর ভিত্তি করে স্টাইল পরিবর্তন করতে পারেন। এখানে
$F{salesAmount} < 0শর্তে রেড রঙে পরিবর্তন করা হয়েছে।
Step 2: Result
- যদি salesAmount নেতিবাচক হয়, তবে রিপোর্টে ওই মানটি রেড রঙে প্রদর্শিত হবে।
- যদি মানটি ধনাত্মক হয়, তাহলে সেটা ডিফল্ট স্টাইল অনুসারে প্রদর্শিত হবে।
2. Custom Layout in JasperReports
Custom Layout হল সেই প্রক্রিয়া যার মাধ্যমে আপনি রিপোর্টের লেআউট কাস্টমাইজ করতে পারেন। রিপোর্টের কাঠামো, পেজ লেআউট, টেবিল লেআউট এবং অন্যান্য উপাদান কাস্টমাইজেশন করতে JasperReports-এর bands, staticText, textField, images, এবং charts ইত্যাদি ব্যবহার করা হয়।
Custom Layout Example
ধরা যাক, আপনি একটি sales report তৈরি করতে চান যেখানে রিপোর্টের শিরোনাম, টেবিলের লেআউট এবং তারিখের জন্য কাস্টম ফরম্যাট থাকবে।
Step 1: JRXML ফাইলে Custom Layout তৈরি করা
<?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="CustomLayoutReport" language="java" pageWidth="595" pageHeight="842"
columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<!-- Report Title -->
<title>
<band height="50">
<staticText>
<reportElement x="0" y="0" width="555" height="50"/>
<textElement textAlignment="Center">
<font size="18" isBold="true"/>
</textElement>
<text><![CDATA[Sales Report]]></text>
</staticText>
</band>
</title>
<!-- Column Headers -->
<columnHeader>
<band height="20">
<staticText>
<reportElement x="0" y="0" width="200" height="20"/>
<text><![CDATA[Product Name]]></text>
</staticText>
<staticText>
<reportElement x="220" y="0" width="200" height="20"/>
<text><![CDATA[Amount]]></text>
</staticText>
</band>
</columnHeader>
<!-- Detail Section (Custom Table Layout) -->
<detail>
<band height="20">
<textField>
<reportElement x="0" y="0" width="200" height="20"/>
<textFieldExpression><![CDATA[$F{productName}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="220" y="0" width="200" height="20"/>
<textFieldExpression><![CDATA[$F{salesAmount}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
বর্ণনা:
- Title: রিপোর্টের শিরোনাম
Sales Reportকাস্টম স্টাইল সহ প্রদর্শিত হবে। - ColumnHeader: একটি সাধারণ টেবিলের জন্য কলাম হেডার নির্ধারণ করা হয়েছে, যেখানে
Product NameএবংAmountশিরোনাম দেওয়া হয়েছে। - Detail: Product Name এবং Sales Amount ফিল্ডগুলো টেবিলের প্রতিটি রেকর্ডের জন্য কাস্টম লেআউটে প্রদর্শিত হবে।
Step 2: Result
- রিপোর্টের শিরোনাম এবং ডিটেইল সেকশনে
Product NameএবংAmountটেবিলের সেল হিসেবে কাস্টম স্টাইল সহ প্রদর্শিত হবে।
Conditional Formatting এবং Custom Layout এর অন্যান্য ব্যবহার
- Highlighting Specific Data:
- Conditional formatting ব্যবহার করে আপনি negative values বা important records কে আলাদা করে হাইলাইট করতে পারেন, যেমন রেড বা গ্রিন রঙে প্রদর্শন করা।
- Custom Footers and Headers:
- রিপোর্টের শেষে বা শুরুতে custom text যোগ করা, যেমন page numbers, date and time, অথবা total summary।
- Dynamic Table Layout:
- রিপোর্টে ডাইনামিক টেবিল লেআউট তৈরি করা, যেখানে পৃষ্ঠা লেআউট পরিবর্তন হতে পারে ডেটার ভিত্তিতে (যেমন, আরও রেকর্ড যুক্ত হলে টেবিলের লেআউট পরিবর্তিত হবে)।
- Custom Fonts and Colors:
- রিপোর্টে custom fonts এবং colors ব্যবহার করে আপনি বিভিন্ন সেগমেন্টে ভিন্ন ভিন্ন স্টাইল প্রয়োগ করতে পারেন।
- Conditional Formatting এবং Custom Layout JasperReports-এ ডেটার প্রেজেন্টেশন এবং রিপোর্টের কার্যকারিতা আরও উন্নত করতে ব্যবহৃত হয়।
- Conditional Formatting ব্যবহার করে আপনি রিপোর্টে ডাইনামিক স্টাইলিং (যেমন, রঙ পরিবর্তন) যোগ করতে পারেন, যা রিপোর্টের মান বুঝতে সহায়ক।
- Custom Layout JasperReports রিপোর্টে কাস্টম ডিজাইন ও ফরম্যাটিং যুক্ত করতে ব্যবহৃত হয়, যেমন কাস্টম শিরোনাম, কলাম হেডার, ফুটার, এবং টেবিল লেআউট কাস্টমাইজেশন।
- Dynamic Reports তৈরি করার জন্য এসব কৌশল ব্যবহার করলে রিপোর্টের সঠিক প্রদর্শনী এবং ইউজার ফ্রেন্ডলি পরিবেশ তৈরি করা সম্ভব।
Read more