পিডিএফবক্স (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() এর মতো ফাংশন ব্যবহার করে সেল, রো এবং কলাম তৈরি করতে পারবেন। এটি বিশেষত ডাটা প্রেজেন্টেশন বা রিপোর্ট তৈরি করার জন্য খুবই কার্যকরী।