PDFBox লাইব্রেরি ব্যবহার করে আপনি পিডিএফ ফাইল থেকে ফন্ট এবং ইমেজ এক্সট্র্যাক্ট করতে পারেন। এটি পিডিএফ ফাইল থেকে বিভিন্ন রিসোর্স যেমন টেক্সট, ইমেজ এবং ফন্ট সংগ্রহ করতে সহায়ক। এখানে আমরা দেখব কিভাবে পিডিএফ ফাইল থেকে ফন্ট এবং ইমেজ এক্সট্র্যাক্ট করা যায়।
প্রয়োজনীয় লাইব্রেরি
PDFBox লাইব্রেরি যদি আপনার প্রজেক্টে আগে থেকে অন্তর্ভুক্ত না থাকে, তবে Maven ব্যবহার করলে আপনার pom.xml ফাইলে নিচের ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.27</version>
</dependency>
PDF থেকে ফন্ট এক্সট্র্যাকশন
PDFBox ব্যবহার করে পিডিএফ ফাইল থেকে টেক্সট এক্সট্র্যাক্ট করা যায়, তবে সরাসরি ফন্ট এক্সট্র্যাক্ট করার জন্য আমাদের পিডিএফে ব্যবহৃত ফন্টের তথ্য সংগ্রহ করতে হবে। সাধারণত, ফন্টের তথ্য পিডিএফ ডকুমেন্টের মেটাডেটাতে পাওয়া যায়, তবে এটি সরাসরি টেক্সট এক্সট্র্যাকশনের অংশ নয়। নিচে একটি কোড উদাহরণ দেওয়া হলো, যা পিডিএফ থেকে ফন্ট এক্সট্র্যাক্ট করার প্রাথমিক পদক্ষেপ দেখাবে।
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.pdmodel.PDPage;
import java.io.IOException;
import java.util.List;
public class FontExtractionExample {
public static void main(String[] args) {
try {
// পিডিএফ ডকুমেন্ট লোড করুন
PDDocument document = PDDocument.load(new File("example.pdf"));
// প্রথম পৃষ্ঠা থেকে ফন্ট তথ্য এক্সট্র্যাক্ট করুন
PDPage page = document.getPage(0);
// টেক্সট স্ট্রিপার তৈরি করুন
PDFTextStripper stripper = new PDFTextStripper();
// পৃষ্ঠার ফন্ট এবং টেক্সট পেতে PDFTextStripper ব্যবহার করুন
stripper.setStartPage(0);
stripper.setEndPage(1);
String text = stripper.getText(document);
// টেক্সট প্রিন্ট করুন (ফন্ট এবং অন্যান্য তথ্যসহ)
System.out.println(text);
// পিডিএফ ডকুমেন্ট বন্ধ করুন
document.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
এখানে, ফন্টের সরাসরি তথ্য বের করা কঠিন, তবে টেক্সট এক্সট্র্যাকশনের মাধ্যমে কিছু অন্তর্নিহিত ফন্টের বিশদ সংগ্রহ করা যেতে পারে।
PDF থেকে ইমেজ এক্সট্র্যাকশন
PDFBox লাইব্রেরি ব্যবহার করে আপনি পিডিএফ থেকে ছবি এক্সট্র্যাক্ট করতে পারেন। এটি পিডিএফ ডকুমেন্টের প্রতিটি পৃষ্ঠা থেকে ছবিগুলি এক্সট্র্যাক্ট করে। নিচে একটি উদাহরণ দেওয়া হয়েছে যা পিডিএফ থেকে ইমেজ এক্সট্র্যাক্ট করবে এবং সেগুলি ফাইল হিসেবে সেভ করবে।
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class ImageExtractionExample {
public static void main(String[] args) {
try {
// পিডিএফ ডকুমেন্ট লোড করুন
PDDocument document = PDDocument.load(new File("example.pdf"));
// PDFRenderer ব্যবহার করে পিডিএফ পৃষ্ঠাগুলির ইমেজ রেন্ডারিং করুন
PDFRenderer pdfRenderer = new PDFRenderer(document);
// প্রতিটি পৃষ্ঠার জন্য ইমেজ এক্সট্র্যাক্ট করুন
for (int pageIndex = 0; pageIndex < document.getNumberOfPages(); pageIndex++) {
BufferedImage image = pdfRenderer.renderImage(pageIndex);
// ইমেজ সেভ করুন
File outputFile = new File("page_" + pageIndex + ".png");
ImageIO.write(image, "PNG", outputFile);
}
// পিডিএফ ডকুমেন্ট বন্ধ করুন
document.close();
System.out.println("ইমেজ এক্সট্র্যাক্ট করা হয়েছে!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
কোড বিশ্লেষণ
- Font Extraction: ফন্টের তথ্য সরাসরি এক্সট্র্যাক্ট করতে PDFTextStripper ব্যবহার করা হয়েছে, তবে ফন্টের তথ্য পিডিএফের ফন্ট ডিক্লারেশন থেকে সরাসরি পাওয়া যায় না। টেক্সট এবং ফন্টের তথ্য একসাথে পাওয়া যায় টেক্সট এক্সট্র্যাকশনের মাধ্যমে।
- Image Extraction: PDFRenderer ব্যবহার করে পিডিএফ পৃষ্ঠাগুলির প্রতিটি পৃষ্ঠা থেকে ছবি রেন্ডার করা হয় এবং তারপর সেই ছবি PNG ফরম্যাটে সেভ করা হয়।
আউটপুট
- ফন্ট এক্সট্র্যাকশন: টেক্সট, ফন্ট এবং অন্যান্য ইনফরমেশন শো করা হবে।
- ইমেজ এক্সট্র্যাকশন: পিডিএফ ফাইলের প্রতিটি পৃষ্ঠার ইমেজ ফাইল হিসেবে সেভ হবে, যেমন
page_0.png,page_1.png, ইত্যাদি।
এই উদাহরণগুলি আপনাকে পিডিএফবক্স ব্যবহার করে পিডিএফ ফাইল থেকে ফন্ট এবং ইমেজ এক্সট্র্যাক্ট করার প্রক্রিয়া বোঝাতে সাহায্য করবে। আপনি আরও কাস্টমাইজড প্রক্রিয়া ব্যবহার করে অন্যান্য ফাইল এক্সট্র্যাকশন কাজও করতে পারেন।
পিডিএফবক্স (PDFBox) ব্যবহার করে আপনি পিডিএফ ডকুমেন্টে এম্বেডেড ফন্ট (Embedded Fonts) রিড করতে পারেন। পিডিএফ ডকুমেন্টে এম্বেডেড ফন্ট থাকা মানে হল যে সেই ফন্টটি পিডিএফ ডকুমেন্টের সঙ্গে সংযুক্ত করা হয়েছে, এবং এটি পিডিএফ ফাইলটির মধ্যে নির্দিষ্ট স্থানেই প্রদর্শিত হবে। এম্বেডেড ফন্ট রিড করার জন্য পিডিএফবক্স ফন্ট রিলেটেড তথ্য সংগ্রহ করার জন্য নির্দিষ্ট API প্রদান করে।
পিডিএফ ফাইল থেকে এম্বেডেড ফন্ট রিড করার প্রক্রিয়া
এম্বেডেড ফন্টের তথ্য রিড করার জন্য পিডিএফবক্সের PDDocument এবং PDFont ক্লাস ব্যবহৃত হয়। পিডিএফ ডকুমেন্টের মধ্যে ফন্ট সম্পর্কিত তথ্য পাওয়া যায় PDResources এবং PDFont ক্লাসের মাধ্যমে, যা ফন্টের ধরন এবং সেটিংস ইত্যাদি সম্পর্কে তথ্য প্রদান করে।
উদাহরণ: পিডিএফ ফাইল থেকে এম্বেডেড ফন্ট রিড করা
নিম্নলিখিত কোডটি পিডিএফ ডকুমেন্ট থেকে এম্বেডেড ফন্ট এক্সট্র্যাক্ট করার জন্য ব্যবহৃত হতে পারে:
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
import org.apache.pdfbox.pdmodel.PDResources;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
public class PDFEmbeddedFontsExample {
public static void main(String[] args) {
try {
// পিডিএফ ডকুমেন্ট লোড করা
PDDocument document = PDDocument.load(new File("example.pdf"));
// পিডিএফ ডকুমেন্টে সকল পৃষ্ঠা (pages) থেকে ফন্ট রিড করা
for (PDPage page : document.getPages()) {
PDResources resources = page.getResources();
// পৃষ্ঠার সমস্ত ফন্ট এক্সট্র্যাক্ট করা
Iterator<PDFont> fontIterator = resources.getFonts();
while (fontIterator.hasNext()) {
PDFont font = fontIterator.next();
System.out.println("Font: " + font.getName());
}
}
// ডকুমেন্ট বন্ধ করা
document.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
কোডের ব্যাখ্যা
PDDocument.load(File file): এটি পিডিএফ ফাইল লোড করার জন্য ব্যবহৃত হয়।PDPage.getResources(): এটি পিডিএফ পৃষ্ঠার সমস্ত রিসোর্স (যেমন, ফন্ট, ইমেজ) ফেরত দেয়।resources.getFonts(): এটি পৃষ্ঠায় ব্যবহৃত সমস্ত ফন্ট ফেরত দেয়। এই ফন্টগুলির মধ্যে এম্বেডেড ফন্ট থাকতে পারে।PDFont.getName(): এটি ফন্টের নাম রিটার্ন করে, যা এম্বেডেড ফন্টের তথ্য দিয়ে থাকে।
এম্বেডেড ফন্টের ধরন
পিডিএফ ফাইলের মধ্যে সাধারণত নিম্নলিখিত ফন্ট ধরনের এম্বেডিং দেখা যায়:
- TrueType Fonts (TTF): এটি একটি জনপ্রিয় ফন্ট ফর্ম্যাট যা সাধারণত পিডিএফ ডকুমেন্টে এম্বেড করা হয়।
- Type1 Fonts: এটি আরেকটি ফন্ট ফর্ম্যাট যা পিডিএফ ডকুমেন্টে এম্বেড করা হতে পারে।
- OpenType Fonts (OTF): এটি আধুনিক ফন্ট ফর্ম্যাট যা পিডিএফ ফাইলের মধ্যে এম্বেড থাকতে পারে।
পিডিএফ থেকে এম্বেডেড ফন্টের অন্যান্য তথ্য
আপনি ফন্টের নাম এবং ধরন ছাড়াও, ফন্টের বৈশিষ্ট্য যেমন ফন্ট সাইজ, বোল্ড/ইটালিক প্রপার্টি ইত্যাদি দেখতে পারেন। তবে এই তথ্য পিডিএফের মাধ্যমে সরাসরি এক্সট্র্যাক্ট করা একটু কঠিন হতে পারে এবং এটি নির্ভর করে ফন্টের এম্বেডিং কিভাবে করা হয়েছে তার উপর।
সারাংশ
পিডিএফবক্স (PDFBox) ব্যবহার করে পিডিএফ ফাইল থেকে এম্বেডেড ফন্ট রিড করা সম্ভব। আপনি PDResources এবং PDFont ক্লাস ব্যবহার করে পিডিএফ ডকুমেন্টে ব্যবহৃত সমস্ত ফন্টের তথ্য এক্সট্র্যাক্ট করতে পারেন। এই ফন্টগুলো পিডিএফ ফাইলের মধ্যে এম্বেডেড থাকে, যা সাধারণত টেক্সট প্রদর্শনের জন্য ব্যবহৃত হয়।
পিডিএফবক্স (PDFBox) Java ব্যবহার করে পিডিএফ ফাইল থেকে ইমেজ এক্সট্র্যাকশন করা সম্ভব। অনেক সময় পিডিএফ ডকুমেন্টে থাকা ইমেজগুলি বের করা দরকার হয়, যেমন লোগো, স্ক্যান করা পৃষ্ঠা ইত্যাদি। পিডিএফবক্স এই কাজটি সহজেই সম্পাদন করতে পারে। এই প্রক্রিয়া বাস্তবায়ন করার জন্য PDFRenderer এবং PDPage ক্লাস ব্যবহার করা হয়।
ইমেজ এক্সট্র্যাকশন প্রক্রিয়া
পিডিএফ থেকে ইমেজ এক্সট্র্যাক্ট করার জন্য নিচের স্টেপগুলো অনুসরণ করতে হবে:
- PDDocument লোড করুন: পিডিএফ ডকুমেন্টটি লোড করতে হবে।
- PDFRenderer তৈরি করুন: এটি পিডিএফ পৃষ্ঠাগুলোর গ্রাফিক্স (যেমন ইমেজ) রেন্ডার করতে ব্যবহৃত হয়।
- ইমেজ এক্সট্র্যাক্ট করুন:
renderImage()মেথড ব্যবহার করে পিডিএফ পৃষ্ঠার ইমেজ বের করা হয়। - ইমেজ সেভ করুন: এক্সট্র্যাক্ট করা ইমেজটি সেভ করুন।
উদাহরণ: PDF থেকে ইমেজ এক্সট্র্যাকশন
নিম্নলিখিত কোডটি একটি পিডিএফ ফাইল থেকে প্রথম পৃষ্ঠার ইমেজ এক্সট্র্যাক্ট করবে এবং PNG ফরম্যাটে সেভ করবে:
import org.apache.pdfbox.pdmodel.*;
import org.apache.pdfbox.rendering.PDFRenderer;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
public class PDFImageExtractionExample {
public static void main(String[] args) {
try {
// পিডিএফ ডকুমেন্ট লোড করুন
PDDocument document = PDDocument.load(new File("example.pdf"));
// PDFRenderer তৈরি করুন
PDFRenderer pdfRenderer = new PDFRenderer(document);
// পিডিএফের প্রথম পৃষ্ঠার ইমেজ রেন্ডার করুন
BufferedImage image = pdfRenderer.renderImage(0); // 0 হচ্ছে প্রথম পৃষ্ঠা
// এক্সট্র্যাক্ট করা ইমেজ সেভ করুন (PNG ফরম্যাটে)
ImageIO.write(image, "PNG", new File("extracted_image.png"));
// ডকুমেন্ট বন্ধ করুন
document.close();
System.out.println("Image Extracted Successfully!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
কোডের ব্যাখ্যা
- PDDocument document = PDDocument.load(new File("example.pdf"));
এটিexample.pdfনামক পিডিএফ ফাইলটি লোড করে। - PDFRenderer pdfRenderer = new PDFRenderer(document);
PDFRendererক্লাসের মাধ্যমে পিডিএফ ডকুমেন্ট থেকে পৃষ্ঠাগুলোর গ্রাফিক্স রেন্ডার করা যায়। - BufferedImage image = pdfRenderer.renderImage(0);
renderImage(0)মেথড প্রথম পৃষ্ঠার ইমেজ রেন্ডার করে। পৃষ্ঠা নম্বর 0 থেকে শুরু হয়, তাই প্রথম পৃষ্ঠা 0 ইনডেক্সে থাকবে। - ImageIO.write(image, "PNG", new File("extracted_image.png"));
এক্সট্র্যাক্ট করা ইমেজটি PNG ফরম্যাটে সেভ করা হয়। - document.close();
ডকুমেন্টটি বন্ধ করা হয় যাতে কোনো রিসোর্স লিক না হয়।
একাধিক পিডিএফ পৃষ্ঠার ইমেজ এক্সট্র্যাকশন
আপনি যদি একাধিক পিডিএফ পৃষ্ঠার ইমেজ এক্সট্র্যাক্ট করতে চান, তবে নিচের কোড ব্যবহার করতে পারেন:
for (int pageIndex = 0; pageIndex < document.getNumberOfPages(); pageIndex++) {
BufferedImage image = pdfRenderer.renderImage(pageIndex);
ImageIO.write(image, "PNG", new File("extracted_image_" + (pageIndex + 1) + ".png"));
}
এটি পিডিএফের প্রতিটি পৃষ্ঠা থেকে আলাদাভাবে ইমেজ এক্সট্র্যাক্ট করবে এবং তাদের নামকরণ করবে, যেমন extracted_image_1.png, extracted_image_2.png ইত্যাদি।
উপসংহার
পিডিএফবক্স (PDFBox) ব্যবহার করে পিডিএফ থেকে ইমেজ এক্সট্র্যাকশন একটি সহজ প্রক্রিয়া। আপনি PDFRenderer ক্লাস ব্যবহার করে পিডিএফ পৃষ্ঠাগুলোর গ্রাফিক্স (ইমেজ) রেন্ডার এবং এক্সট্র্যাক্ট করতে পারবেন এবং পরে সেগুলি ইমেজ ফরম্যাটে সেভ করতে পারবেন। এটি পিডিএফ ডকুমেন্টে থাকা গ্রাফিক্যাল কন্টেন্ট যেমন ছবি, লোগো বা স্ক্যান করা পৃষ্ঠা এক্সট্র্যাক্ট করার জন্য উপকারী।
পিডিএফবক্স (PDFBox) ব্যবহার করে পিডিএফ ডকুমেন্ট থেকে ফন্ট এবং ইমেজ এক্সট্র্যাক্ট করা সম্ভব। এতে বিভিন্ন পিডিএফ উপাদান যেমন টেক্সট, ইমেজ এবং ফন্ট এক্সট্র্যাকশন করা যায়। এই টিউটোরিয়ালে আমরা ফন্ট এবং ইমেজ এক্সট্র্যাকশনের পদ্ধতি এবং সেগুলির কোড উদাহরণ দেখবো।
ফন্ট এক্সট্র্যাকশন
পিডিএফবক্সের মাধ্যমে পিডিএফ ডকুমেন্ট থেকে ফন্ট এক্সট্র্যাক্ট করা সহজ নয়, কারণ পিডিএফ ফাইলের মধ্যে সাধারণত ফন্টগুলো এমবেডেড থাকে এবং এগুলো সরাসরি এক্সট্র্যাক্ট করার জন্য বিশেষ কোড প্রয়োজন হয়। তবে, আপনি পিডিএফ ডকুমেন্ট থেকে ফন্ট নাম এবং ফন্ট স্টাইল বের করতে পারেন।
ফন্ট নাম এক্সট্র্যাকশন উদাহরণ:
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.pdmodel.font.PDFont;
import java.io.File;
import java.io.IOException;
public class FontExtractor {
public static void main(String[] args) {
try {
// পিডিএফ ডকুমেন্ট লোড করা
File file = new File("example.pdf");
PDDocument document = PDDocument.load(file);
// পিডিএফ পৃষ্ঠার ফন্ট এক্সট্র্যাক্ট করা
PDPage page = document.getPage(0); // প্রথম পৃষ্ঠা নির্বাচন করা
PDFTextStripper stripper = new PDFTextStripper();
// ফন্ট স্টাইলের তথ্য প্রদর্শন করা
stripper.setStartPage(1);
stripper.setEndPage(1);
String text = stripper.getText(document);
// ফন্ট নাম এবং ফন্ট স্টাইলের তথ্য প্রিন্ট করা
System.out.println("Extracted Text: ");
System.out.println(text);
document.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
কোড ব্যাখ্যা:
এই কোডে, পিডিএফ ডকুমেন্টের ফন্ট নাম সরাসরি এক্সট্র্যাক্ট করা সম্ভব নয়, কিন্তু আপনি পিডিএফ থেকে টেক্সট এক্সট্র্যাক্ট করে ফন্ট এবং স্টাইলের পরিবর্তনগুলো আলাদাভাবে চিহ্নিত করতে পারেন।
ইমেজ এক্সট্র্যাকশন
পিডিএফবক্স ব্যবহার করে পিডিএফ ডকুমেন্ট থেকে এমবেডেড ইমেজ এক্সট্র্যাক্ট করা যায়। ইমেজ এক্সট্র্যাক্ট করার জন্য PDFImageExtractor অথবা ImageExtraction ক্লাস ব্যবহার করা হয়।
ইমেজ এক্সট্র্যাকশন উদাহরণ:
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.PDImageXObject;
import org.apache.pdfbox.text.PDFTextStripper;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class ImageExtractor {
public static void main(String[] args) {
try {
// পিডিএফ ডকুমেন্ট লোড করা
File file = new File("example.pdf");
PDDocument document = PDDocument.load(file);
// প্রথম পৃষ্ঠা থেকে ইমেজ এক্সট্র্যাক্ট করা
PDPage page = document.getPage(0);
// পিডিএফ পৃষ্ঠার সমস্ত ইমেজ এক্সট্র্যাক্ট করা
List<PDImageXObject> images = page.getResources().getImages();
for (PDImageXObject image : images) {
// ইমেজ সেভ করা
File outputfile = new File("extracted_image.jpg");
ImageIO.write(image.getImage(), "jpg", outputfile);
System.out.println("Image extracted and saved as extracted_image.jpg");
}
document.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
কোড ব্যাখ্যা:
- PDImageXObject: এটি পিডিএফের মধ্যে অবস্থিত ইমেজ এক্সট্র্যাক্ট করার জন্য ব্যবহৃত হয়। এখানে
getImages()মেথড দিয়ে পিডিএফ পৃষ্ঠার সমস্ত ইমেজ এক্সট্র্যাক্ট করা হচ্ছে। - ImageIO.write(): এটি ইমেজকে নির্দিষ্ট ফরম্যাটে ফাইল হিসেবে সেভ করার জন্য ব্যবহৃত হয়। এখানে ইমেজ
jpgফরম্যাটে সেভ করা হচ্ছে।
সারাংশ
পিডিএফবক্স লাইব্রেরি ব্যবহার করে আপনি পিডিএফ ডকুমেন্ট থেকে ফন্ট এবং ইমেজ এক্সট্র্যাক্ট করতে পারেন। ফন্ট এক্সট্র্যাকশনের ক্ষেত্রে কিছু সীমাবদ্ধতা থাকতে পারে, তবে টেক্সট এবং ইমেজ এক্সট্র্যাকশন সম্পূর্ণরূপে কার্যকর। ইমেজ এক্সট্র্যাকশন একটি সহজ প্রক্রিয়া যেখানে পিডিএফ পৃষ্ঠায় উপস্থিত ইমেজগুলো আলাদাভাবে সেভ করা যায়।
Read more