পিডিএফবক্স (PDFBox) লাইব্রেরি ব্যবহার করে Java প্রোগ্রামে পিডিএফ ডকুমেন্টে টেবিল তৈরি করা সম্ভব। পিডিএফবক্স সরাসরি টেবিল তৈরির জন্য কোনো বিল্ট-ইন ক্লাস বা ফিচার সরবরাহ না করলেও, আমরা PDPageContentStream ব্যবহার করে কাস্টম টেবিল তৈরি করতে পারি। এটি কিছু লাইন এবং সেল ড্র করার মাধ্যমে টেবিল গঠন করে।
পিডিএফে টেবিল তৈরি করার জন্য প্রয়োজনীয় লাইব্রেরি
প্রথমে নিচের লাইব্রেরিগুলি ইমপোর্ট করতে হবে:
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import java.io.IOException;
পিডিএফে টেবিল তৈরি করার প্রক্রিয়া
এখানে একটি উদাহরণ দেওয়া হলো যেখানে একটি সাধারণ টেবিল তৈরি করা হচ্ছে:
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import java.io.IOException;
public class CreateTableInPDF {
public static void main(String[] args) {
try {
// নতুন পিডিএফ ডকুমেন্ট তৈরি
PDDocument document = new PDDocument();
// নতুন পিডিএফ পেজ তৈরি
PDPage page = new PDPage();
document.addPage(page);
// পিডিএফ পেজে কন্টেন্ট স্ট্রিম তৈরি
PDPageContentStream contentStream = new PDPageContentStream(document, page);
// টেবিলের অবস্থান নির্ধারণ
float margin = 50;
float yStart = 750;
float yPosition = yStart;
float rowHeight = 20;
float cellMargin = 5f;
float tableWidth = 500;
int rows = 5;
int cols = 4;
// কলামের প্রস্থ
float[] columnWidth = {100f, 100f, 100f, 200f};
// ফন্ট সেট করা
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
// টেবিলের হেডার তৈরি
String[][] table = {
{"ID", "Name", "Age", "Address"},
{"1", "Alice", "23", "New York"},
{"2", "Bob", "30", "Los Angeles"},
{"3", "Charlie", "25", "Chicago"},
{"4", "David", "35", "San Francisco"}
};
// টেবিলের সেলগুলি ড্র করা
for (int row = 0; row < rows; row++) {
float xPosition = margin;
for (int col = 0; col < cols; col++) {
// সেল তৈরি
contentStream.beginText();
contentStream.newLineAtOffset(xPosition + cellMargin, yPosition);
contentStream.showText(table[row][col]);
contentStream.endText();
// সেল বোর্ডার ড্র করা
contentStream.moveTo(xPosition, yPosition);
contentStream.lineTo(xPosition + columnWidth[col], yPosition);
contentStream.stroke();
xPosition += columnWidth[col]; // পরবর্তী সেলে যাওয়ার জন্য এক্সপজিশন পরিবর্তন
}
// পরবর্তী রোতে যাওয়ার জন্য y-position আপডেট
yPosition -= rowHeight;
}
// কন্টেন্ট স্ট্রিম ক্লোজ করা
contentStream.close();
// পিডিএফ ডকুমেন্ট সেভ করা
document.save("table_example.pdf");
document.close();
System.out.println("টেবিল সফলভাবে পিডিএফে তৈরি করা হয়েছে!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
কোড ব্যাখ্যা
- PDDocument: পিডিএফ ডকুমেন্ট তৈরি বা লোড করতে ব্যবহৃত ক্লাস।
- PDPage: পিডিএফ ডকুমেন্টে নতুন পেজ তৈরি করার জন্য ব্যবহৃত হয়।
- PDPageContentStream: এটি পিডিএফ পেজে কন্টেন্ট (যেমন টেক্সট, লাইন, ইত্যাদি) যোগ করতে ব্যবহৃত হয়।
- PDType1Font.HELVETICA_BOLD: ফন্ট সিলেক্ট করতে ব্যবহৃত। এখানে হেলভেটিকা বোল্ড ফন্ট ব্যবহার করা হয়েছে।
- table[][]: টেবিলের ডাটা এখানে 2D অ্যারে হিসেবে সংরক্ষিত।
- drawText(): টেবিলের সেলগুলিতে টেক্সট প্রদর্শন করার জন্য ব্যবহার করা হয়।
- moveTo() এবং lineTo(): সেলগুলির চারপাশে বর্ডার ড্র করার জন্য ব্যবহার করা হয়।
টেবিলের কাস্টমাইজেশন
- কলাম প্রস্থ (Column Width):
columnWidth[]অ্যারে দ্বারা কলামের প্রস্থ নিয়ন্ত্রণ করা হয়। - সেল মার্জিন (Cell Margin): সেলের মধ্যে টেক্সট এবং সেলের বর্ডারের মধ্যে জায়গা নির্ধারণ করে।
- রো এবং কলাম সংখ্যা (Rows and Columns):
rowsএবংcolsপরিবর্তন করে টেবিলের আকার নির্ধারণ করা যায়।
এইভাবে পিডিএফবক্স ব্যবহার করে Java দিয়ে পিডিএফ ডকুমেন্টে কাস্টম টেবিল তৈরি করা সম্ভব। টেবিলের ফর্ম্যাটিং এবং কাস্টমাইজেশন পুরোপুরি আপনার প্রয়োজন অনুসারে পরিবর্তনযোগ্য।
পিডিএফবক্স (PDFBox) ব্যবহার করে Java প্রোগ্রামিং ভাষায় পিডিএফ ডকুমেন্টে টেবিল তৈরি করা যায়। পিডিএফবক্স সরাসরি টেবিল তৈরি করার জন্য কোন নির্দিষ্ট API প্রদান না করলেও, আমরা PDPageContentStream ক্লাস ব্যবহার করে টেবিলের সেল, রো, এবং কলামগুলোর রেন্ডারিং করতে পারি।
পিডিএফে টেবিল তৈরি করার পদ্ধতি
টেবিল তৈরি করার জন্য, সাধারণত আমরা নিচের পদক্ষেপগুলি অনুসরণ করি:
- টেবিলের সেল তৈরি করা: টেবিলের প্রতিটি সেল নির্দিষ্ট সাইজের একটি রেক্টেঙ্গেল হিসেবে রেন্ডার করতে হবে।
- টেবিলের হেডার এবং ডেটা পূরণ করা: টেবিলের হেডার (header) এবং ডেটা সেলের মধ্যে টেক্সট প্লেসমেন্ট করতে হবে।
- রো এবং কলাম ডিজাইন করা: টেবিলের বিভিন্ন রো এবং কলাম রেন্ডার করতে হবে।
কোড উদাহরণ
নিচে একটি উদাহরণ দেওয়া হলো যেখানে পিডিএফবক্স ব্যবহার করে একটি সাদামাটা টেবিল তৈরি করা হয়েছে:
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import java.io.IOException;
public class CreatePDFTable {
public static void main(String[] args) throws IOException {
// পিডিএফ ডকুমেন্ট তৈরি করা
PDDocument document = new PDDocument();
// একটি পৃষ্ঠা তৈরি করা
PDPage page = new PDPage();
document.addPage(page);
// কনটেন্ট স্ট্রিম তৈরি করা
PDPageContentStream contentStream = new PDPageContentStream(document, page);
// টেবিলের সেল, রো, কলাম তৈরির জন্য কনস্ট্যান্টস
float margin = 50;
float yStart = 700;
float yPosition = yStart;
float tableWidth = 500;
float cellMargin = 5f;
int rows = 5;
int cols = 4;
float rowHeight = 20f;
float cellHeight = 10f;
// কলামের প্রস্থ
float[] columnWidth = { 100f, 100f, 100f, 100f };
// হেডার রেন্ডার করা
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
drawTable(contentStream, margin, yPosition, tableWidth, rowHeight, columnWidth, rows, cols);
// কনটেন্ট স্ট্রিম বন্ধ করা
contentStream.close();
// পিডিএফ সেভ করা
document.save("table_example.pdf");
document.close();
}
// টেবিল আঁকার ফাংশন
public static void drawTable(PDPageContentStream contentStream, float x, float y, float tableWidth, float rowHeight, float[] columnWidth, int rows, int cols) throws IOException {
float cellMargin = 5f;
// সেল আঁকার জন্য লুপ
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
// সেলের স্থান নির্ধারণ
float xPosition = x + columnWidth[col] * col;
float yPosition = y - row * rowHeight;
// সেল আঁকা
contentStream.beginText();
contentStream.newLineAtOffset(xPosition + cellMargin, yPosition + cellMargin);
contentStream.showText("Row " + (row + 1) + " Col " + (col + 1));
contentStream.endText();
// সেলের বর্ডার আঁকা
contentStream.setLineWidth(1f);
contentStream.rect(xPosition, yPosition, columnWidth[col], rowHeight);
contentStream.stroke();
}
}
}
}
কোডের ব্যাখ্যা
- drawTable() মেথড: এটি টেবিলের সেলগুলির আকার এবং অবস্থান নির্ধারণ করে এবং প্রতিটি সেল রেন্ডার করে। এখানে
rect()মেথড ব্যবহার করে সেলগুলি আঁকা হয়। PDType1Font.HELVETICA_BOLD: টেবিলের হেডারের জন্য ফন্ট সেট করা হয়। অন্য কোন ফন্টও ব্যবহার করা যেতে পারে।contentStream.beginText()এবংcontentStream.showText(): এই মেথডগুলো টেবিলের সেলে টেক্সট যোগ করতে ব্যবহার করা হয়।
পিডিএফে টেবিল কাস্টমাইজেশন
- টেবিলের আকার এবং কলামের প্রস্থ:
columnWidthএর মাধ্যমে প্রতিটি কলামের প্রস্থ কাস্টমাইজ করা যায়। - রো এবং সেলের উচ্চতা:
rowHeightএবংcellHeightদিয়ে রো এবং সেলের উচ্চতা কাস্টমাইজ করা যায়। - টেক্সট ফন্ট এবং সাইজ: টেবিলের সেলে ব্যবহৃত ফন্ট এবং সাইজ কাস্টমাইজ করা যায়।
পিডিএফবক্স ব্যবহার করে পিডিএফ ডকুমেন্টে টেবিল তৈরি করা সহজ এবং বহুমুখী। আপনি PDPageContentStream এবং drawTable() এর মতো ফাংশন ব্যবহার করে সেল, রো এবং কলাম তৈরি করতে পারবেন। এটি বিশেষত ডাটা প্রেজেন্টেশন বা রিপোর্ট তৈরি করার জন্য খুবই কার্যকরী।
পিডিএফবক্স (PDFBox) Java লাইব্রেরি ব্যবহার করে পিডিএফ ডকুমেন্টে টেবিল (Rows এবং Columns) তৈরি করা সম্ভব। যদিও পিডিএফবক্সে সরাসরি টেবিল তৈরির জন্য কোনো বিল্ট-ইন ক্লাস নেই, তবে আপনি নিজেই কাস্টম লেআউট তৈরি করতে পারেন এবং প্রয়োজনীয় রো (Row) এবং কলাম (Column) যোগ করতে পারেন। সাধারণত, পিডিএফবক্সে টেক্সট বা অন্যান্য কনটেন্ট ড্রয়িংয়ের মাধ্যমে টেবিল তৈরি করা হয়।
Rows এবং Columns তৈরি করার প্রক্রিয়া
পিডিএফবক্সে টেবিল তৈরি করতে হলে, প্রথমে টেবিলের জন্য পৃষ্ঠায় নির্দিষ্ট গ্রিড (Rows এবং Columns) তৈরি করতে হয় এবং তারপর প্রতিটি সেলে প্রয়োজনীয় ডেটা রাখতে হয়।
উদাহরণ: Rows এবং Columns যোগ করা
import org.apache.pdfbox.pdmodel.*;
import org.apache.pdfbox.pdmodel.PDRectangle;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import java.io.IOException;
public class PDFWithTable {
public static void main(String[] args) throws IOException {
// পিডিএফ ডকুমেন্ট তৈরি
PDDocument document = new PDDocument();
PDPage page = new PDPage(PDRectangle.A4);
document.addPage(page);
// পিডিএফ পৃষ্ঠায় কন্টেন্ট স্ট্রিম তৈরি
PDPageContentStream contentStream = new PDPageContentStream(document, page);
// ফন্ট সেট করা
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
// টেবিলের সেলগুলোর মাপ এবং অবস্থান
float margin = 50;
float yStart = 750;
float yPosition = yStart;
float rowHeight = 20;
float cellMargin = 5;
float tableWidth = 500;
float colWidth[] = {150, 150, 150}; // কলামের প্রস্থ
// টেবিলের হেডার
String[][] tableData = {
{"ID", "Name", "Age"},
{"1", "John Doe", "28"},
{"2", "Jane Smith", "32"},
{"3", "Sam Brown", "45"}
};
// টেবিলের হেডার রেন্ডারিং
for (int i = 0; i < tableData[0].length; i++) {
contentStream.beginText();
contentStream.newLineAtOffset(margin + colWidth[i] * i, yPosition);
contentStream.showText(tableData[0][i]);
contentStream.endText();
}
yPosition -= rowHeight;
// টেবিলের বডি রেন্ডারিং
for (int i = 1; i < tableData.length; i++) {
for (int j = 0; j < tableData[i].length; j++) {
contentStream.beginText();
contentStream.newLineAtOffset(margin + colWidth[j] * j, yPosition);
contentStream.showText(tableData[i][j]);
contentStream.endText();
}
yPosition -= rowHeight;
}
// কন্টেন্ট স্ট্রিম বন্ধ করা
contentStream.close();
// পিডিএফ ফাইল সেভ করা
document.save("table_output.pdf");
document.close();
}
}
কোড ব্যাখ্যা
- PDDocument: এটি একটি পিডিএফ ডকুমেন্ট তৈরি করে।
- PDPage: নতুন একটি পিডিএফ পৃষ্ঠা তৈরি করে।
- PDPageContentStream: এটি পিডিএফ পৃষ্ঠায় কন্টেন্ট (টেক্সট, টেবিল, ইমেজ ইত্যাদি) রেন্ডার করতে ব্যবহৃত হয়।
- setFont(): এটি টেক্সটের ফন্ট সেট করে।
- beginText() এবং endText(): টেক্সট রেন্ডারিং শুরু ও শেষ করার জন্য ব্যবহৃত হয়।
- newLineAtOffset(): এটি নির্দিষ্ট কোরডিনেটে টেক্সট শুরু করার জন্য ব্যবহৃত হয়।
- showText(): এটি টেক্সট প্রদর্শন করে।
টেবিলের কাস্টমাইজেশন
- কোলাম উইডথ:
colWidth[]অ্যারে ব্যবহার করে কলামের প্রস্থ নির্ধারণ করা হয়েছে। - রো হাইট: টেবিলের প্রতিটি রো এর উচ্চতা
rowHeightদিয়ে কন্ট্রোল করা হয়েছে। - মার্জিন এবং পজিশন: টেবিলের শুরু থেকে মার্জিন এবং সেল পজিশন ঠিক করার জন্য নির্দিষ্ট মান দেওয়া হয়েছে।
গুরুত্বপূর্ণ বিষয়
- টেবিল কন্টেন্ট: টেবিলের ডেটা একটি দ্বিমাত্রিক অ্যারে (2D array) ব্যবহার করে স্টোর করা হয়, যেখানে প্রতিটি রো এবং কলামের ডেটা রাখা হয়।
- টেবিল স্টাইলিং: পিডিএফবক্সে সরাসরি টেবিলের সেল স্টাইলিং (যেমন ব্যাকগ্রাউন্ড কালার, বর্ডার) করার জন্য অতিরিক্ত কোড লিখতে হয়। তবে এখানে আমরা শুধুমাত্র টেক্সট প্রদর্শন করেছি।
পিডিএফবক্সের মাধ্যমে Java-তে রো (Rows) এবং কলাম (Columns) তৈরি করা সম্ভব, যা ডকুমেন্টে টেবিল ভিত্তিক ডেটা প্রদর্শন করার জন্য ব্যবহার করা হয়। এই টেবিল কাস্টমাইজড হয়ে থাকতে পারে, এবং আপনি প্রয়োজনমতো গ্রিড, সেল সাইজ, এবং টেক্সট কনটেন্ট নিয়ন্ত্রণ করতে পারেন।
PDFBox ব্যবহার করে আপনি পিডিএফ ডকুমেন্টে টেবিল তৈরি করতে পারেন এবং প্রতিটি সেলের স্টাইলিং এবং বর্ডার নিয়ন্ত্রণ করতে পারেন। যদিও PDFBox সরাসরি টেবিল ম্যানেজমেন্টের জন্য কোনও বিল্ট-ইন ক্লাস বা ফিচার সরবরাহ করে না, তবে PDPageContentStream এবং অন্যান্য উপাদান ব্যবহার করে সেল স্টাইলিং এবং বর্ডার সেট করা সম্ভব।
এখানে পিডিএফে টেবিল তৈরি করার জন্য সেল স্টাইলিং এবং বর্ডার সেট করার একটি উদাহরণ দেওয়া হয়েছে।
পিডিএফবক্সে সেল স্টাইলিং এবং বর্ডার সেট করার জন্য কোড উদাহরণ
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import java.io.IOException;
public class PDFTableExample {
public static void main(String[] args) throws IOException {
// নতুন পিডিএফ ডকুমেন্ট তৈরি
PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
PDPageContentStream contentStream = new PDPageContentStream(document, page);
// টেবিলের কিছু কনস্ট্যান্টস
float margin = 50;
float yStart = 750;
float yPosition = yStart;
float rowHeight = 20;
float cellMargin = 5f;
float tableWidth = 500;
float colWidth[] = {100f, 150f, 100f, 150f};
// কলাম নাম
String[][] tableData = {
{"ID", "Name", "Age", "City"},
{"1", "John Doe", "25", "New York"},
{"2", "Jane Smith", "30", "Los Angeles"},
{"3", "Alice Johnson", "35", "Chicago"}
};
// সেল স্টাইলিং
contentStream.setLineWidth(1f);
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
// টেবিলের বর্ডার সেট করা
drawTable(contentStream, tableData, margin, yPosition, tableWidth, rowHeight, colWidth, cellMargin);
contentStream.close();
document.save("TableExample.pdf");
document.close();
}
// টেবিল ড্র করবার মেথড
public static void drawTable(PDPageContentStream contentStream, String[][] tableData, float margin, float yPosition, float tableWidth, float rowHeight, float[] colWidth, float cellMargin) throws IOException {
// সারি এবং কলাম গুলোর জন্য বর্ডার এবং স্টাইলিং প্রয়োগ
for (int row = 0; row < tableData.length; row++) {
float xPosition = margin;
for (int col = 0; col < tableData[row].length; col++) {
// সেল বর্ডার
contentStream.setLineWidth(1f);
contentStream.setStrokeColor(0, 0, 0); // কালো বর্ডার
contentStream.setFillColor(1f, 1f, 1f); // সাদা ব্যাকগ্রাউন্ড
// সেল সীমানা তৈরি
contentStream.beginText();
contentStream.newLineAtOffset(xPosition + cellMargin, yPosition - rowHeight + cellMargin);
contentStream.showText(tableData[row][col]);
contentStream.endText();
contentStream.setLineWidth(1f);
contentStream.stroke();
// সেলের বর্ডার
contentStream.moveTo(xPosition, yPosition);
contentStream.lineTo(xPosition + colWidth[col], yPosition);
contentStream.lineTo(xPosition + colWidth[col], yPosition - rowHeight);
contentStream.lineTo(xPosition, yPosition - rowHeight);
contentStream.closePath();
contentStream.stroke();
xPosition += colWidth[col];
}
yPosition -= rowHeight;
}
}
}
কোড ব্যাখ্যা
- টেবিল ডেটা: এখানে একটি 2D অ্যারে
tableDataব্যবহার করা হয়েছে যেখানে টেবিলের ডেটা রাখা হয়েছে। প্রতিটি সারির জন্য আলাদা কলাম রয়েছে। - সেল বর্ডার:
contentStream.moveTo,contentStream.lineTo, এবংcontentStream.stroke()পদ্ধতিগুলি ব্যবহার করে সেল বর্ডার তৈরি করা হয়েছে। আপনি সেলের চারপাশে বর্ডার আঁকতে এই পদ্ধতিগুলি ব্যবহার করতে পারেন। - সেল স্টাইলিং:
contentStream.setFontপদ্ধতির মাধ্যমে ফন্ট স্টাইল এবং সাইজ নির্ধারণ করা হয়েছে এবংcontentStream.setFillColorএবংcontentStream.setStrokeColorএর মাধ্যমে সেলের ব্যাকগ্রাউন্ড এবং বর্ডার কালার নির্ধারণ করা হয়েছে। - সেল মের্জিন:
cellMarginব্যবহার করে সেলের মধ্যে কিছু মার্জিন (স্পেস) যোগ করা হয়েছে যাতে টেক্সট সেলের চারপাশে সঠিকভাবে অবস্থান করে।
টেবিলের সেল স্টাইলিং এবং বর্ডার কাস্টমাইজেশন
- ফন্ট পরিবর্তন:
setFont(PDType1Font.HELVETICA_BOLD, 12)দ্বারা আপনি সেলের লেখার ফন্ট পরিবর্তন করতে পারেন। অন্য কোনো ফন্ট ব্যবহার করতে চাইলে, আপনিPDType1Fontক্লাসের অন্যান্য অপশনও ব্যবহার করতে পারেন। - কলাম প্রস্থ এবং সারি উচ্চতা: কোডে
colWidth[]এবংrowHeightদিয়ে কলাম এবং সারির আকার নিয়ন্ত্রণ করা হয়েছে। আপনি এই মানগুলো পরিবর্তন করে সেলের আকার পরিবর্তন করতে পারেন। - সেল ব্যাকগ্রাউন্ড রঙ:
setFillColor(r, g, b)ব্যবহার করে আপনি সেলের ব্যাকগ্রাউন্ডে রঙ দিতে পারেন।r, g, bমানগুলি 0 থেকে 1 এর মধ্যে হতে হবে। - বর্ডার রঙ পরিবর্তন:
setStrokeColor(r, g, b)ব্যবহার করে আপনি সেলের বর্ডারের রঙ পরিবর্তন করতে পারেন।
PDFBox দিয়ে আপনি পিডিএফ ডকুমেন্টে টেবিল তৈরি করে সেল স্টাইলিং এবং বর্ডার সহজেই নিয়ন্ত্রণ করতে পারেন। উপরের কোডটি আপনাকে এটি করার একটি সহজ উপায় দেখিয়েছে।
PDFBox ব্যবহার করে পিডিএফ ডকুমেন্টে টেবিল তৈরি করা একটি গুরুত্বপূর্ণ কাজ হতে পারে। PDFBox সরাসরি টেবিল তৈরির জন্য কোন ক্লাস সরবরাহ না করলেও, আমরা PDPageContentStream ব্যবহার করে টেবিলের কাস্টম লেআউট তৈরি করতে পারি। এখানে একটি উদাহরণ দেওয়া হচ্ছে যেখানে পিডিএফে টেবিল তৈরি করা হয়েছে।
প্রয়োজনীয় লাইব্রেরি
PDFBox লাইব্রেরি যদি আগে থেকেই আপনার প্রজেক্টে অন্তর্ভুক্ত না থাকে, তবে Maven ব্যবহার করলে আপনার pom.xml ফাইলে নিচের ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.27</version>
</dependency>
কোড উদাহরণ: PDF এ টেবিল তৈরি করা
এখন আমরা একটি টেবিল তৈরি করার উদাহরণ দেখব, যেখানে ৪টি কলাম ও কয়েকটি সারি থাকবে।
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import java.io.IOException;
public class PDFTableExample {
public static void main(String[] args) {
try {
// একটি নতুন পিডিএফ ডকুমেন্ট তৈরি করুন
PDDocument document = new PDDocument();
// একটি নতুন পৃষ্ঠা যোগ করুন
PDPage page = new PDPage();
document.addPage(page);
// পৃষ্ঠায় কনটেন্ট স্ট্রিম তৈরি করুন
PDPageContentStream contentStream = new PDPageContentStream(document, page);
// টেবিলের শিরোনাম লেখার জন্য ফন্ট এবং পজিশন সেট করুন
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
contentStream.beginText();
contentStream.newLineAtOffset(100, 750); // অবস্থান নির্ধারণ
contentStream.showText("ID\tName\tAge\tCity");
contentStream.endText();
// টেবিলের ডাটা যোগ করা
contentStream.setFont(PDType1Font.HELVETICA, 10);
contentStream.beginText();
contentStream.newLineAtOffset(100, 730); // অবস্থান নির্ধারণ
contentStream.showText("1\tJohn Doe\t25\tNew York");
contentStream.newLineAtOffset(0, -15);
contentStream.showText("2\tJane Smith\t30\tLos Angeles");
contentStream.newLineAtOffset(0, -15);
contentStream.showText("3\tEmily Davis\t22\tChicago");
contentStream.newLineAtOffset(0, -15);
contentStream.showText("4\tMichael Brown\t35\tSan Francisco");
contentStream.endText();
// কনটেন্ট স্ট্রিম বন্ধ করুন
contentStream.close();
// পিডিএফ ফাইল সেভ করুন
document.save("PDFTableExample.pdf");
// ডকুমেন্ট বন্ধ করুন
document.close();
System.out.println("টেবিলসহ PDF ফাইল সফলভাবে তৈরি করা হয়েছে!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
কোড বিশ্লেষণ
- PDDocument: পিডিএফ ডকুমেন্ট তৈরি করার জন্য ব্যবহৃত হয়।
- PDPage: একটি নতুন পৃষ্ঠা তৈরি করা হয়েছে যেখানে টেবিলটি যুক্ত হবে।
- PDPageContentStream: এটি পিডিএফ পৃষ্ঠায় কনটেন্ট যোগ করার জন্য ব্যবহৃত হয়।
- setFont: টেক্সট ফন্ট এবং সাইজ সেট করা হয়। শিরোনামের জন্য বোল্ড ফন্ট এবং ডাটার জন্য সাধারণ ফন্ট ব্যবহার করা হয়েছে।
- newLineAtOffset: এটি টেবিলের প্রতিটি সেলের টেক্সটের অবস্থান সেট করতে ব্যবহৃত হয়।
XএবংYকোঅর্ডিনেট দ্বারা নির্ধারিত অবস্থানে টেক্সট লেখা হয়। - showText: টেক্সট প্রদর্শনের জন্য ব্যবহৃত হয়।
- save: পিডিএফ ডকুমেন্ট সেভ করা হয়।
- close: ডকুমেন্ট এবং কনটেন্ট স্ট্রিম বন্ধ করা হয়।
আউটপুট
এই কোডটি চালানোর পর একটি PDFTableExample.pdf নামক ফাইল তৈরি হবে, যেখানে একটি টেবিল থাকবে। টেবিলের শিরোনাম এবং ডাটার ৪টি কলাম থাকবে, যেমন:
ID Name Age City
1 John Doe 25 New York
2 Jane Smith 30 Los Angeles
3 Emily Davis 22 Chicago
4 Michael Brown 35 San Francisco
এটি একটি সহজ উদাহরণ, তবে আপনি আপনার প্রয়োজন অনুযায়ী কলাম এবং সারির সংখ্যা বৃদ্ধি বা পরিবর্তন করতে পারেন। টেবিলের জন্য গ্রিড লাইনের ব্যবহার বা আরও কাস্টম স্টাইল অ্যাড করার জন্য অতিরিক্ত কোড যুক্ত করা সম্ভব।
Read more