JFreeChart একটি শক্তিশালী Java লাইব্রেরি যা গ্রাফিক্যাল ডেটা ভিজ্যুয়ালাইজেশনের জন্য ব্যবহৃত হয়। এটি বিভিন্ন ধরনের চার্ট তৈরি করতে সাহায্য করে, যেমন Line Chart, Bar Chart, Pie Chart, ইত্যাদি। জেফ্রিচার্টের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল এর Exporting এবং Printing ক্ষমতা, যা চার্টের ছবির আকারে সংরক্ষণ (export) বা মুদ্রণ (print) করতে সহায়তা করে।
এই গাইডে, আমরা JFreeChart ব্যবহার করে চার্ট এক্সপোর্ট এবং প্রিন্ট করার পদ্ধতি দেখব।
1. Chart Exporting: Chart Image হিসেবে সংরক্ষণ
জেফ্রিচার্ট দিয়ে আপনি আপনার চার্টটিকে বিভিন্ন ইমেজ ফরম্যাটে এক্সপোর্ট করতে পারেন, যেমন PNG, JPEG, SVG, ইত্যাদি। এটি সাধারণত ChartUtilities ক্লাসের মাধ্যমে করা হয়।
Exporting Chart as Image (PNG/JPEG)
এখানে একটি উদাহরণ দেওয়া হল, যেখানে একটি চার্ট PNG ফরম্যাটে এক্সপোর্ট করা হচ্ছে।
উদাহরণ:
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.ChartUtilities;
import javax.swing.*;
import java.io.File;
import java.io.IOException;
public class ChartExportExample {
public static void main(String[] args) {
// Dataset তৈরি করা
DefaultCategoryDataset dataset = createDataset();
// Chart তৈরি করা
JFreeChart chart = createChart(dataset);
// Chart Image (PNG) হিসেবে এক্সপোর্ট করা
try {
File file = new File("chart_image.png");
ChartUtilities.saveChartAsPNG(file, chart, 800, 600);
System.out.println("Chart saved as PNG.");
} catch (IOException e) {
e.printStackTrace();
}
// Chart Panel তৈরি করা এবং JFrame এ যোগ করা
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new ChartPanel(chart));
frame.pack();
frame.setVisible(true);
}
private static DefaultCategoryDataset createDataset() {
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");
return dataset;
}
private static JFreeChart createChart(DefaultCategoryDataset dataset) {
return ChartFactory.createBarChart(
"Chart Export Example", // Chart Title
"Category", // X-Axis Label
"Value", // Y-Axis Label
dataset, // Dataset
org.jfree.chart.plot.PlotOrientation.VERTICAL, // Plot Orientation
true, // Include Legend
true, // Tooltips
false // URLs
);
}
}
ব্যাখ্যা:
- ChartUtilities.saveChartAsPNG() মেথডটি ব্যবহার করে আপনি চার্টটিকে PNG ফরম্যাটে সেভ করতে পারেন।
- এটি
Fileপাথ গ্রহণ করে এবং চার্টটির আকার (উচ্চতা এবং প্রস্থ) সেট করতে পারেন।
অন্যান্য ফরম্যাটে এক্সপোর্ট:
PNG এর পরিবর্তে আপনি JPEG ফরম্যাটেও এক্সপোর্ট করতে পারেন:
ChartUtilities.saveChartAsJPEG(new File("chart_image.jpg"), chart, 800, 600);- আপনি SVG ফরম্যাটেও চার্টটি এক্সপোর্ট করতে পারেন, তবে সেক্ষেত্রে আপনাকে JFreeSVG লাইব্রেরি ব্যবহার করতে হবে।
2. Chart Printing: Chart Print করা
JFreeChart এ চার্ট প্রিন্ট করার জন্য PrinterJob এবং JFreeChart এর print() মেথড ব্যবহার করা হয়। এটি আপনাকে সহজেই চার্ট প্রিন্ট করতে সাহায্য করে।
Chart Print করার উদাহরণ:
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.JFreeChart;
import javax.swing.*;
import java.awt.print.PrinterJob;
public class ChartPrintExample {
public static void main(String[] args) {
// Dataset তৈরি করা
DefaultCategoryDataset dataset = createDataset();
// Chart তৈরি করা
JFreeChart chart = createChart(dataset);
// Chart Panel তৈরি করা এবং JFrame এ যোগ করা
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new ChartPanel(chart));
frame.pack();
frame.setVisible(true);
// Chart Print করার জন্য PrinterJob ব্যবহার করা
PrinterJob printerJob = PrinterJob.getPrinterJob();
printerJob.setPrintable(chart.createPrintable());
// Print Dialog খুলে Print করা
boolean userAccepted = printerJob.printDialog();
if (userAccepted) {
try {
printerJob.print();
} catch (Exception e) {
e.printStackTrace();
}
}
}
private static DefaultCategoryDataset createDataset() {
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");
return dataset;
}
private static JFreeChart createChart(DefaultCategoryDataset dataset) {
return ChartFactory.createBarChart(
"Chart Print Example", // Chart Title
"Category", // X-Axis Label
"Value", // Y-Axis Label
dataset, // Dataset
org.jfree.chart.plot.PlotOrientation.VERTICAL, // Plot Orientation
true, // Include Legend
true, // Tooltips
false // URLs
);
}
}
ব্যাখ্যা:
- PrinterJob ক্লাসটি Java এর printing API এর অংশ। এটি আপনাকে চার্টের প্রিন্টিং প্রস্তুতি নিতে এবং প্রিন্ট ডায়ালগ খুলে প্রিন্ট করতে সহায়তা করে।
- createPrintable() মেথড ব্যবহার করে JFreeChart-কে প্রিন্টেবল বানানো হয়।
3. Chart Print Settings কাস্টমাইজ করা
আপনি Chart Print এর বিভিন্ন সেটিং কাস্টমাইজ করতে পারেন। যেমন, আপনার যদি শুধুমাত্র চার্টের একটি নির্দিষ্ট অংশ প্রিন্ট করতে হয়, আপনি প্রিন্ট রেঞ্জ এবং অন্যান্য সেটিং পরিবর্তন করতে পারেন।
উদাহরণ: Chart Print Range কাস্টমাইজ করা
printerJob.setPrintable(chart.createPrintable(), new PageFormat() {
@Override
public void setPaper(Paper paper) {
paper.setSize(500, 500); // Set paper size if needed
super.setPaper(paper);
}
});
সারাংশ
JFreeChart ব্যবহার করে আপনি সহজেই চার্ট এক্সপোর্ট এবং প্রিন্ট করতে পারেন। ChartUtilities এর মাধ্যমে চার্ট ইমেজ হিসেবে PNG, JPEG, বা অন্য কোনো ফরম্যাটে এক্সপোর্ট করা যায়। PrinterJob ব্যবহার করে আপনি সহজেই চার্ট প্রিন্ট করতে পারেন, এবং সেটির সেটিংস কাস্টমাইজও করতে পারেন। এই ফিচারগুলো জেফ্রিচার্টের কার্যকারিতা বাড়ায় এবং ডেটা ভিজ্যুয়ালাইজেশনের ক্ষেত্রে আরও শক্তিশালী টুল হয়ে ওঠে।
JFreeChart একটি শক্তিশালী Java লাইব্রেরি যা ডাটা ভিজ্যুয়ালাইজেশন এবং চার্ট তৈরির জন্য ব্যবহৃত হয়। JFreeChart ব্যবহার করে আপনি গ্রাফ এবং চার্ট তৈরি করার পর সেই চার্টগুলোকে ইমেজ ফাইল (যেমন PNG, JPEG) হিসেবে এক্সপোর্ট করতে পারেন। এর মাধ্যমে আপনি চার্টগুলোকে ইমেইল, ওয়েব পেজ বা কাস্টম ড্যাশবোর্ডে শেয়ার করতে পারবেন।
এখানে আমরা দেখব কিভাবে JFreeChart থেকে PNG এবং JPEG ইমেজ এক্সপোর্ট করা যায়।
1. JFreeChart থেকে Image Export করা
JFreeChart থেকে ইমেজ এক্সপোর্ট করার জন্য ChartUtilities ক্লাসের saveChartAsPNG() এবং saveChartAsJPEG() মেথড ব্যবহার করা হয়। এই মেথডগুলির মাধ্যমে আপনি সহজেই চার্টকে ইমেজ ফরম্যাটে সংরক্ষণ করতে পারেন।
কোড উদাহরণ:
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.ChartUtilities;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
public class ChartExportExample {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("Chart Export Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createChartPanel(createDataset()));
frame.pack();
frame.setVisible(true);
// Save chart as PNG and JPEG
saveChartAsImage(createDataset());
});
}
private static DefaultCategoryDataset createDataset() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
// Adding data to the dataset
dataset.addValue(10, "Category 1", "Jan");
dataset.addValue(15, "Category 1", "Feb");
dataset.addValue(25, "Category 1", "Mar");
dataset.addValue(35, "Category 1", "Apr");
dataset.addValue(50, "Category 1", "May");
return dataset;
}
private static ChartPanel createChartPanel(DefaultCategoryDataset dataset) {
JFreeChart chart = ChartFactory.createBarChart(
"Bar Chart Example", // Title
"Month", // X-Axis Label
"Value", // Y-Axis Label
dataset, // Dataset
org.jfree.chart.plot.PlotOrientation.VERTICAL,
true, // Include legend
true, // Tooltips
false // URLs
);
// Return chart panel
return new ChartPanel(chart);
}
private static void saveChartAsImage(DefaultCategoryDataset dataset) {
try {
JFreeChart chart = ChartFactory.createBarChart(
"Bar Chart Example", "Month", "Value", dataset,
org.jfree.chart.plot.PlotOrientation.VERTICAL, true, true, false);
// Save as PNG
File pngFile = new File("bar_chart.png");
ChartUtilities.saveChartAsPNG(pngFile, chart, 800, 600); // 800x600 is the image size
// Save as JPEG
File jpegFile = new File("bar_chart.jpg");
ChartUtilities.saveChartAsJPEG(jpegFile, chart, 800, 600); // 800x600 is the image size
System.out.println("Chart saved as PNG and JPEG successfully!");
} catch (IOException e) {
System.out.println("Error saving chart as image: " + e.getMessage());
}
}
}
কোড ব্যাখ্যা:
- Dataset তৈরি করা:
DefaultCategoryDatasetব্যবহার করে আমরা ডেটা যোগ করেছি। এখানেJan,Feb,Mar, ইত্যাদি মাসের জন্য একাধিক মান প্রদান করা হয়েছে।
- Chart তৈরি করা:
ChartFactory.createBarChart()মেথড ব্যবহার করে একটি Bar Chart তৈরি করা হয়েছে, যেখানে X-Axis এ মাস এবং Y-Axis এ মান (Value) প্রদর্শিত হচ্ছে।
- ChartPanel:
- এটি একটি প্যানেল যা JFreeChart কে Swing UI তে প্রদর্শন করার জন্য ব্যবহৃত হয়।
- Image Export:
ChartUtilities.saveChartAsPNG()এবংChartUtilities.saveChartAsJPEG()মেথড ব্যবহার করে চার্টটিকে PNG এবং JPEG ফরম্যাটে এক্সপোর্ট করা হয়েছে।- এখানে image width এবং height 800x600 পিক্সেল সেট করা হয়েছে, যা ইমেজের সাইজ নির্ধারণ করে।
- Error Handling:
IOExceptionদ্বারা যদি কোনও সমস্যা ঘটে, তাহলে এটি একটি ত্রুটি মেসেজ প্রদর্শন করবে।
2. JFreeChart থেকে Image Export এর সুবিধা
- ইমেইল বা ওয়েব শেয়ারিং: আপনি যে চার্টটি তৈরি করেছেন তা ইমেইল বা ওয়েব পেজে সহজে শেয়ার করতে পারবেন।
- রিপোর্টিং: ব্যবসায়িক রিপোর্ট বা গবেষণার জন্য চার্টকে গ্রাফিক্যাল ফরম্যাটে রপ্তানি করা যেতে পারে, যা রিপোর্টের অংশ হিসেবে ব্যবহার করা যায়।
- সোশ্যাল মিডিয়া: তৈরি করা চার্ট সোশ্যাল মিডিয়া বা অন্যান্য ডিজিটাল প্ল্যাটফর্মে পোস্ট করার জন্য ইমেজ ফরম্যাটে রপ্তানি করা যেতে পারে।
3. কাস্টমাইজেশন (Chart Size, Image Format, etc.)
Chart Size:
- আপনি
ChartUtilities.saveChartAsPNG()এবংChartUtilities.saveChartAsJPEG()মেথডের মাধ্যমে চার্টের সাইজ কাস্টমাইজ করতে পারেন। এখানে800x600পিক্সেল সাইজ ব্যবহার করা হয়েছে, তবে আপনি এটি আপনার প্রয়োজন অনুযায়ী পরিবর্তন করতে পারেন।
ChartUtilities.saveChartAsPNG(pngFile, chart, 1024, 768); // Resize to 1024x768- আপনি
- Image Format:
ChartUtilities.saveChartAsPNG()বাChartUtilities.saveChartAsJPEG()ব্যবহার করে আপনি যে কোনও ফরম্যাটে ইমেজ এক্সপোর্ট করতে পারেন। এই দুটি ফরম্যাট (PNG, JPEG) সাধারণত বেশিরভাগ অ্যাপ্লিকেশন এবং ওয়েব পেজে ব্যবহৃত হয়।
4. অন্যান্য চার্ট এক্সপোর্ট ফরম্যাট
JFreeChart সাপোর্ট করে আরও কিছু ইমেজ ফরম্যাট, যেমন GIF, SVG (Scalable Vector Graphics)। আপনি এই ফরম্যাটে চার্ট এক্সপোর্ট করতে চাইলে ChartUtilities.saveChartAsGIF() এবং ChartUtilities.saveChartAsSVG() মেথড ব্যবহার করতে পারেন।
সারাংশ
JFreeChart থেকে Image Export করা একটি সহজ এবং কার্যকরী প্রক্রিয়া, যা আপনাকে চার্টগুলিকে বিভিন্ন ফরম্যাটে (যেমন PNG, JPEG, GIF) রপ্তানি করতে সহায়তা করে। এটি বিশেষভাবে রিপোর্টিং, ড্যাশবোর্ড তৈরি, এবং গ্রাফিক্যাল উপস্থাপনাগুলোর জন্য উপকারী। ChartUtilities.saveChartAsPNG() এবং ChartUtilities.saveChartAsJPEG() মেথড ব্যবহার করে আপনি চার্টকে যেকোনো ফরম্যাটে এক্সপোর্ট করতে পারবেন এবং সেগুলোকে আপনার প্রয়োজন অনুসারে সংরক্ষণ বা শেয়ার করতে পারবেন।
JFreeChart একটি শক্তিশালী Java লাইব্রেরি যা ডেটা ভিজ্যুয়ালাইজেশনের জন্য ব্যবহৃত হয়। আপনি যখন আপনার তৈরি করা চার্টটি ব্যবহারকারীদের কাছে পাঠাতে চান, তখন এটি PDF অথবা SVG ফরম্যাটে এক্সপোর্ট করা গুরুত্বপূর্ণ হতে পারে। PDF ফরম্যাট সাধারণত প্রিন্ট এবং শেয়ারিংয়ের জন্য ব্যবহৃত হয়, এবং SVG (Scalable Vector Graphics) ফরম্যাট ওয়েব বা স্কেলেবল গ্রাফিক্সের জন্য উপযুক্ত।
এই গাইডে, আমরা দেখব কিভাবে JFreeChart ব্যবহার করে চার্টকে PDF এবং SVG ফরম্যাটে এক্সপোর্ট করা যায়।
1. JFreeChart থেকে PDF ফরম্যাটে Chart Export করা
PDF ফরম্যাটে চার্ট এক্সপোর্ট করার জন্য, আমরা iText লাইব্রেরি ব্যবহার করতে পারি। iText একটি ওপেন সোর্স লাইব্রেরি যা PDF ফাইল তৈরি এবং ম্যানিপুলেট করার জন্য ব্যবহৃত হয়।
1.1 Maven Dependency for iText
iText লাইব্রেরি ব্যবহার করার জন্য আপনার pom.xml ফাইলে নিচের ডিপেনডেন্সি যোগ করতে হবে:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.1.14</version>
<scope>compile</scope>
</dependency>
এছাড়া, JFreeChart লাইব্রেরি ও আপনার প্রজেক্টে থাকতে হবে, যদি না থাকে তবে সেটিও Maven Dependency দিয়ে যোগ করতে হবে।
1.2 Chart Export to PDF Example
এখন, আমরা একটি Bar Chart তৈরি করে সেটিকে PDF ফরম্যাটে এক্সপোর্ট করবো।
উদাহরণ কোড:
import com.itextpdf.text.Document;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import java.awt.*;
import java.io.FileOutputStream;
public class ChartToPDFExample {
public static JFreeChart createChart() {
// Dataset তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(1.0, "Series1", "Jan");
dataset.addValue(4.0, "Series1", "Feb");
dataset.addValue(3.0, "Series1", "Mar");
// Bar Chart তৈরি করা
return ChartFactory.createBarChart(
"Sales Over Time", // Chart Title
"Month", // X-Axis Label
"Sales", // Y-Axis Label
dataset // Dataset
);
}
public static void exportChartToPDF(JFreeChart chart, String fileName) {
// PDF Document তৈরি করা
Document document = new Document(PageSize.A4);
try {
// PdfWriter দ্বারা PDF ফাইল তৈরি
PdfWriter.getInstance(document, new FileOutputStream(fileName));
document.open();
// ChartPanel তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 300));
// ChartPanel থেকে Image তৈরি করা
chartPanel.getChart().createBufferedImage(500, 300);
// PDF ফাইলে চার্ট ইমেজ যুক্ত করা
document.add(com.itextpdf.text.Image.getInstance(chartPanel.getChart().createBufferedImage(500, 300), null));
} catch (Exception e) {
e.printStackTrace();
} finally {
document.close();
}
}
public static void main(String[] args) {
JFreeChart chart = createChart();
exportChartToPDF(chart, "chart.pdf"); // Export the chart to PDF
}
}
ব্যাখ্যা:
- JFreeChart: একটি সাধারণ Bar Chart তৈরি করা হয়েছে।
- iText: PDF ফাইল তৈরি করার জন্য iText লাইব্রেরি ব্যবহার করা হয়েছে।
PdfWriter.getInstance()মেথড দিয়ে PDF ফাইল তৈরি করা হয়। - ChartPanel: চার্টকে ইমেজে রূপান্তরিত করতে
createBufferedImage()মেথড ব্যবহার করা হয়েছে। - Image.getInstance(): চার্টের ইমেজটি PDF এ অ্যাড করা হয়েছে।
এই কোডটি একটি Bar Chart তৈরি করবে এবং সেটিকে PDF ফরম্যাটে chart.pdf নামে এক্সপোর্ট করবে।
2. JFreeChart থেকে SVG ফরম্যাটে Chart Export করা
SVG (Scalable Vector Graphics) হল একটি XML ভিত্তিক গ্রাফিক্স ফরম্যাট, যা স্কেলেবল এবং ওয়েবের জন্য উপযুক্ত। JFreeChart সরাসরি SVG এক্সপোর্ট করার জন্য সাপোর্ট প্রদান করে না, তবে আপনি SVGGraphics2D ব্যবহার করে চার্টটি SVG ফরম্যাটে রেন্ডার করতে পারেন।
2.1 SVGGraphics2D ব্যবহারের জন্য Maven Dependency
আপনার প্রজেক্টে SVG ফরম্যাটে এক্সপোর্ট করার জন্য batik লাইব্রেরি প্রয়োজন হবে। নিচে Maven Dependency দেওয়া হল:
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-svggen</artifactId>
<version>1.14</version>
</dependency>
2.2 Chart Export to SVG Example
এখন, আমরা Bar Chart তৈরি করে সেটিকে SVG ফরম্যাটে এক্সপোর্ট করবো।
উদাহরণ কোড:
import org.apache.batik.svggen.SVGGraphics2D;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import java.io.FileWriter;
import java.io.IOException;
public class ChartToSVGExample {
public static JFreeChart createChart() {
// Dataset তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(5.0, "Series1", "Jan");
dataset.addValue(7.0, "Series1", "Feb");
dataset.addValue(6.0, "Series1", "Mar");
// Bar Chart তৈরি করা
return ChartFactory.createBarChart(
"Sales Over Time", // Chart Title
"Month", // X-Axis Label
"Sales", // Y-Axis Label
dataset // Dataset
);
}
public static void exportChartToSVG(JFreeChart chart, String fileName) {
// SVGGraphics2D object তৈরি করা
SVGGraphics2D svgGen = new SVGGraphics2D(600, 400);
// Chart rendering to SVG
chart.draw(svgGen, new java.awt.Rectangle(600, 400));
// SVG output file তৈরি করা
try {
FileWriter writer = new FileWriter(fileName);
svgGen.stream(writer, true); // Write SVG to file
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
JFreeChart chart = createChart();
exportChartToSVG(chart, "chart.svg"); // Export the chart to SVG
}
}
ব্যাখ্যা:
- SVGGraphics2D: এই ক্লাসটি SVG ফরম্যাটে গ্রাফিক্স আউটপুট করার জন্য ব্যবহৃত হয়।
- chart.draw(): এই মেথডের মাধ্যমে চার্টটিকে SVGGraphics2D অবজেক্টে রেন্ডার করা হয়েছে।
- stream():
stream()মেথডটি SVG ডেটা একটি ফাইলে লেখার জন্য ব্যবহৃত হয়েছে।
এই কোডটি একটি Bar Chart তৈরি করবে এবং সেটিকে SVG ফরম্যাটে chart.svg নামে এক্সপোর্ট করবে।
সারাংশ
JFreeChart ব্যবহার করে আপনি PDF এবং SVG ফরম্যাটে চার্ট এক্সপোর্ট করতে পারেন। PDF ফরম্যাটে এক্সপোর্ট করার জন্য iText লাইব্রেরি ব্যবহার করা হয়, যা PDF ফাইল তৈরি করতে সহায়তা করে। SVG ফরম্যাটে এক্সপোর্ট করার জন্য SVGGraphics2D ব্যবহৃত হয়, যা চার্টটিকে SVG ফরম্যাটে রেন্ডার করে একটি ফাইলে সেভ করতে সাহায্য করে। এই দুটি ফরম্যাটে চার্ট এক্সপোর্টের মাধ্যমে আপনি আপনার চার্ট সহজেই শেয়ার এবং প্রিন্ট করতে পারবেন।
JFreeChart একটি শক্তিশালী লাইব্রেরি যা ডেটা ভিজ্যুয়ালাইজেশন করতে ব্যবহৃত হয়। কখনও কখনও, চার্টগুলি ব্যবহারকারীদের বা কাস্টমারদের জন্য প্রিন্ট করতে হতে পারে। Chart Printing এর মাধ্যমে আপনি JFreeChart এর চার্টগুলি প্রিন্ট করতে পারেন। জেফ্রিচার্টে প্রিন্টিং ফিচার কনফিগার করার জন্য কিছু কনফিগারেশন এবং প্রিন্টিং টেকনিক রয়েছে।
এই গাইডে, আমরা দেখব কিভাবে JFreeChart দিয়ে Chart Printing কনফিগারেশন করা হয় এবং কোন পদ্ধতিতে প্রিন্ট করা যায়।
1. Chart Printing কনফিগারেশন
জেফ্রিচার্টের মাধ্যমে চার্ট প্রিন্ট করার জন্য আপনি ChartPanel এবং PrinterJob ব্যবহার করতে পারেন। PrinterJob Java API-তে প্রিন্টিং সম্পর্কিত কার্যাবলী পরিচালনা করতে ব্যবহৃত হয়।
1.1. Chart Printing-এর জন্য PrinterJob ব্যবহার করা
PrinterJob ব্যবহার করে JFreeChart এর চার্ট প্রিন্ট করা সম্ভব। এই API দিয়ে আপনি চার্টের প্রিন্ট আউট কাস্টমাইজ করতে পারেন।
উদাহরণ কোড:
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.swing.*;
import java.awt.*;
import java.awt.print.Printable;
import java.awt.print.PrinterJob;
public class ChartPrintingExample {
public static JPanel createChartPanel() {
// Dataset তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(5.0, "Series1", "Jan");
dataset.addValue(3.0, "Series1", "Feb");
dataset.addValue(4.0, "Series1", "Mar");
// Bar Chart তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Monthly Sales", // Chart Title
"Month", // X-Axis Label
"Sales Amount", // Y-Axis Label
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot Orientation
true, // Include Legend
true, // Tooltips
false // URLs
);
// Chart Panel তৈরি এবং রিটার্ন করা
return new ChartPanel(chart);
}
public static void main(String[] args) {
// JFrame তৈরি করা
JFrame frame = new JFrame("JFreeChart Printing Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(createChartPanel());
frame.pack();
frame.setVisible(true);
// PrinterJob এর মাধ্যমে চার্ট প্রিন্ট করা
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(new Printable() {
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) {
if (pageIndex > 0) {
return Printable.NO_SUCH_PAGE;
}
// ChartPanel এ গ্রাফিক্স ব্যবহার করা
Graphics2D g2d = (Graphics2D) graphics;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
createChartPanel().paint(g2d);
return Printable.PAGE_EXISTS;
}
});
// প্রিন্ট ডায়ালগ প্রদর্শন এবং প্রিন্ট করা
boolean userAccepted = job.printDialog();
if (userAccepted) {
try {
job.print();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
ব্যাখ্যা:
- PrinterJob: এই ক্লাসটি ব্যবহার করে আপনি প্রিন্টার নির্বাচন করতে পারেন এবং কিভাবে প্রিন্ট করা হবে তা কাস্টমাইজ করতে পারেন।
- Printable: এটি একটি ইন্টারফেস যা আপনি print() মেথডের মাধ্যমে প্রিন্টিং কনফিগারেশন নিয়ন্ত্রণ করতে পারেন। এখানে, createChartPanel().paint(g2d) ব্যবহার করা হয়েছে যাতে চার্টটি গ্রাফিক্যাল ডেটা হিসেবে প্রিন্ট করা যায়।
- ChartPanel.paint(): এটি চার্টের সমস্ত গ্রাফিক্যাল উপাদান প্রিন্টে আঁকতে সহায়তা করে।
এটি একটি সহজ প্রিন্টিং পদ্ধতি যেখানে ব্যবহারকারীকে প্রিন্ট ডায়ালগ দেখানো হয় এবং তারা অনুমোদন করলে চার্ট প্রিন্ট করা হয়।
2. Chart Printing Options কাস্টমাইজেশন
JFreeChart এ প্রিন্টিং কাস্টমাইজ করার জন্য কিছু অতিরিক্ত কনফিগারেশন করা যায়:
2.1. PageFormat কনফিগারেশন
PageFormat ব্যবহার করে আপনি প্রিন্ট আউটের মাপ কাস্টমাইজ করতে পারেন। যেমন A4 সাইজ, ল্যান্ডস্কেপ, বা পোর্ট্রেট অরিয়েন্টেশন।
PageFormat pageFormat = job.defaultPage();
pageFormat.setOrientation(PageFormat.PORTRAIT); // Set to Landscape or Portrait
2.2. Scaling (Zooming) for Printing
আপনি প্রিন্টের আকার পরিবর্তন করতে পারেন, যাতে প্রিন্ট আউট একটি নির্দিষ্ট মাপে ফিট হয়।
g2d.scale(0.5, 0.5); // Scale the chart by 50% for printing
এটি চার্টের আকার ছোট বা বড় করে প্রিন্ট আউট করার জন্য ব্যবহার করা যায়।
2.3. Multi-Page Printing
আপনি যদি একটি বড় চার্ট প্রিন্ট করতে চান, যা একাধিক পৃষ্ঠায় বিভক্ত হতে পারে, তবে এটি PageFormat এবং Printable কাস্টমাইজ করে করা সম্ভব।
if (pageIndex > 1) {
return Printable.NO_SUCH_PAGE;
}
এটি নিশ্চিত করবে যে পৃষ্ঠাগুলি সঠিকভাবে ভেঙে যাবে।
3. Chart Printing এর জন্য Best Practices
- Chart Size Adjustment:
- আপনার চার্টের সাইজকে প্রিন্ট আউটের জন্য উপযুক্ত করে তৈরি করুন।
ChartPanelএর সাইজ সঠিকভাবে কাস্টমাইজ করুন যাতে প্রিন্ট আউট সঠিকভাবে প্রদর্শিত হয়।
- Resolution Settings:
- নিশ্চিত করুন যে গ্রাফিক্সের রেজুলেশন যথেষ্ট ভালো, যাতে প্রিন্ট আউটের ছবি পরিষ্কার থাকে। Graphics2D.setRenderingHint() ব্যবহার করে রেন্ডারিং কোয়ালিটি বাড়ানো যেতে পারে।
- Page Layout:
- যখন চার্ট প্রিন্ট করছেন, তখন PageFormat সেটিংস এবং orientation সঠিকভাবে কনফিগার করুন, যাতে প্রিন্টিং প্রক্রিয়া সঠিকভাবে পরিচালিত হয়।
- Scaling for Different Paper Sizes:
- যখন বিভিন্ন সাইজের কাগজে প্রিন্ট করার চেষ্টা করেন, তখন scale() মেথড ব্যবহার করে সঠিক সাইজে চার্ট ফিট করতে হবে।
সারাংশ
JFreeChart দিয়ে Chart Printing খুবই সহজ এবং কার্যকরী। আপনি PrinterJob, Printable এবং ChartPanel ব্যবহার করে জেফ্রিচার্টের চার্ট প্রিন্ট করতে পারেন এবং প্রিন্ট আউট কাস্টমাইজ করতে পারেন। এই প্রক্রিয়া আপনাকে চমৎকার গ্রাফিক্যাল রিপ্রেজেন্টেশন এবং চার্টের আউটপুট প্রিন্ট করতে সহায়তা করে, যা টেকনিক্যাল রিপোর্ট, ব্যবসায়িক রিপোর্ট বা গ্রাফিকাল উপস্থাপনার জন্য ব্যবহার করা যেতে পারে।
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