JFreeChart একটি জনপ্রিয় Java লাইব্রেরি যা ডেটা ভিজ্যুয়ালাইজেশন এবং গ্রাফ তৈরি করতে ব্যবহৃত হয়। এই লাইব্রেরি শুধুমাত্র চার্ট তৈরি করার জন্যই নয়, আপনি সেই চার্টগুলিকে Printable Reports আকারে প্রিন্ট করতে পারেন, যা একটি গুরুত্বপূর্ণ ফিচার যদি আপনি আপনার ডেটা বা চার্টগুলি প্রিন্ট বা PDF ফরম্যাটে শেয়ার করতে চান।
এই গাইডে, আমরা দেখব কিভাবে JFreeChart ব্যবহার করে Printable Reports তৈরি করা যায়, যাতে আপনি আপনার চার্টগুলি একটি প্রিন্টেবল ফরম্যাটে রেন্ডার করতে পারেন।
1. Printable Reports কী?
Printable Reports হল এমন রিপোর্ট যা ফিজিক্যালি প্রিন্ট করা যায় অথবা পিডিএফ ফরম্যাটে এক্সপোর্ট করা যায়। JFreeChart দিয়ে আপনি তৈরি করা চার্টকে Java Printing API ব্যবহার করে একটি প্রিন্টেবল ফরম্যাটে রূপান্তর করতে পারেন। আপনি চাইলে এই চার্টগুলি ফিজিক্যাল প্রিন্ট করতে পারেন অথবা পিডিএফ হিসাবে সংরক্ষণ করতে পারেন।
2. JFreeChart এর মাধ্যমে Printable Report তৈরি করার পদ্ধতি
প্রথমে, আপনি একটি চার্ট তৈরি করবেন এবং তারপর সেই চার্টকে Printable ফরম্যাটে কনভার্ট করবেন, যা PrinterJob ব্যবহার করে প্রিন্ট করা যাবে।
2.1 Printable Report তৈরি করার জন্য প্রয়োজনীয় ক্লাস
- PrinterJob: এটি Java Printing API এর একটি ক্লাস যা প্রিন্টিং কাজগুলি পরিচালনা করে।
- PageFormat: এটি পেজের আকার এবং মাপ নির্ধারণ করে।
- Graphics2D: এটি 2D গ্রাফিক্স রেন্ডার করার জন্য ব্যবহৃত হয়, এবং এটি চার্টের কনটেন্ট প্রিন্ট করার জন্য ব্যবহার করা হয়।
2.2 Printable Report তৈরি করার উদাহরণ
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import java.awt.*;
import java.awt.print.*;
public class PrintableReportExample {
public static void main(String[] args) {
// Dataset তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(1.0, "Series1", "Category1");
dataset.addValue(4.0, "Series1", "Category2");
dataset.addValue(3.0, "Series1", "Category3");
dataset.addValue(5.0, "Series1", "Category4");
// Bar Chart তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Bar Chart Example", // Title
"Category", // X-Axis Label
"Value", // Y-Axis Label
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot Orientation
true, // Include Legend
true, // Tooltips
false // URLs
);
// ChartPanel তৈরি এবং JFrame এ যোগ করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// Printing Process
printChart(chart);
}
private static void printChart(JFreeChart chart) {
PrinterJob printerJob = PrinterJob.getPrinterJob();
PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
if (printServices.length > 0) {
printerJob.setPrintService(printServices[0]);
// Set page format (size, orientation)
PageFormat pageFormat = printerJob.defaultPage();
pageFormat.setOrientation(PageFormat.LANDSCAPE); // Set landscape orientation
// Create Printable object
Printable printable = new Printable() {
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
if (pageIndex >= 1) {
return NO_SUCH_PAGE;
}
Graphics2D g2d = (Graphics2D) graphics;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
g2d.scale(0.7, 0.7); // Adjust scale (zoom in/out)
// Render the chart
chart.draw(g2d, pageFormat);
return PAGE_EXISTS;
}
};
// Set Printable and print
printerJob.setPrintable(printable, pageFormat);
try {
if (printerJob.printDialog()) {
printerJob.print();
}
} catch (PrinterException e) {
e.printStackTrace();
}
}
}
}
2.3 ব্যাখ্যা:
- Dataset:
DefaultCategoryDatasetব্যবহার করে আমরা Bar Chart এর জন্য কাস্টম ডেটাসেট তৈরি করেছি। এখানে চারটি ক্যাটেগরি এবং তাদের জন্য মান (value) যোগ করা হয়েছে। - JFreeChart:
ChartFactory.createBarChart()মেথড ব্যবহার করে একটি Bar Chart তৈরি করা হয়েছে। - PrinterJob: এটি একটি জাভা ক্লাস যা প্রিন্টিং কার্য সম্পাদন করে।
PrinterJob.getPrinterJob()মেথড ব্যবহার করে একটি প্রিন্টার জব তৈরি করা হয়েছে। - PageFormat: পেজের আকার এবং ওরিয়েন্টেশন (Landscape বা Portrait) নির্ধারণ করা হয়েছে।
- Printable: একটি Printable অবজেক্ট তৈরি করা হয়েছে, যা প্রিন্টিং জন্য চার্টের গ্রাফিক্স রেন্ডার করবে।
chart.draw(g2d, pageFormat)মেথডের মাধ্যমে চার্টের গ্রাফিক্স প্রিন্ট করা হয়েছে। - Graphics2D: প্রিন্টিংয়ের জন্য Graphics2D ব্যবহার করা হয়েছে যা 2D গ্রাফিক্স রেন্ডার করতে সহায়তা করে।
- printDialog(): এটি একটি ডায়ালগ বক্স প্রদর্শন করে যেখানে ব্যবহারকারী প্রিন্টার নির্বাচন করতে পারেন।
3. Printable Reports এর অন্যান্য কাস্টমাইজেশন
- Scaling: আপনি প্রিন্টের স্কেল পরিবর্তন করতে পারেন (যেমন,
g2d.scale(0.7, 0.7)এর মাধ্যমে)। এটি ডকুমেন্টের সাইজ এবং মাপ নিয়ন্ত্রণ করতে সাহায্য করে। - Orientation: পেজের অরিয়েন্টেশন পরিবর্তন করতে পারেন (যেমন,
pageFormat.setOrientation(PageFormat.LANDSCAPE)দিয়ে ল্যান্ডস্কেপ এবংPageFormat.PORTRAITদিয়ে পোট্রেট অরিয়েন্টেশন)। - Margins: প্রিন্টের জন্য মার্জিন পরিবর্তন করতে পারেন, যেমন
pageFormat.setImageableArea(left, top, width, height)ব্যবহার করে।
4. JFreeChart দিয়ে PDF ফরম্যাটে Reports তৈরি করা
আপনি চাইলে জেফ্রিচার্টের প্রিন্ট আউট PDF ফরম্যাটে রপ্তানি করতে পারেন। এই জন্য আপনি iText বা Apache PDFBox লাইব্রেরি ব্যবহার করতে পারেন, যা JFreeChart এর সাথে ইন্টিগ্রেট করে PDF তৈরি করতে সহায়তা করবে।
5. Conclusion
JFreeChart ব্যবহার করে Printable Reports তৈরি করা সম্ভব এবং এটি আপনার ডেটা ভিজ্যুয়ালাইজেশনকে আরও প্রফেশনাল এবং ব্যবহারকারীর জন্য সুবিধাজনক করে তোলে। PrinterJob এবং Graphics2D এর মাধ্যমে আপনি আপনার তৈরি করা চার্টকে প্রিন্ট বা PDF ফরম্যাটে রপ্তানি করতে পারেন। এই ফিচারটি ব্যবসায়িক প্রতিবেদন বা প্রেজেন্টেশনে খুবই উপকারী।
Read more