PDF থেকে টেবিল বের করার জন্য ফ্রি জাভা PDF লাইব্রেরি
একটি ওপেন সোর্স জাভা API যা প্রোগ্রাম্যাটিকভাবে PDF ফাইল থেকে টেবিল বের করে। এটি সহজে বের করা টেবিলগুলোকে CSV তে রূপান্তর করতে পারে এবং লকড PDF টেবিলগুলোকে গঠিত ডেটা ফরম্যাটে রূপান্তরিত করে।
Tabula-Java কী?
ব্যবসা জগতে PDF ফাইল সর্বত্রই আছে—রিপোর্ট, ইনভয়েস, গবেষণা পত্র এবং আর্থিক বিবরণী। তবে একটি স্থায়ী সমস্যা রয়েছে: এই নথিগুলো থেকে ট্যাবুলার ডেটা বের করা অত্যন্ত কঠিন। কপি-পেস্ট প্রায়শই বিকৃত ডেটা দেয়, এবং ম্যানুয়াল পুনর্লিখন ক্লান্তিকর এবং ত্রুটিপ্রবণ। এখানেই Tabula-Java কাজের সমাধান দেয়। Tabula-Java একটি শক্তিশালী ওপেন সোর্স লাইব্রেরি যা প্রোগ্রাম্যাটিকভাবে PDF নথি থেকে টেবিল বের করে। দৃঢ় PDF প্রক্রিয়াকরণ ভিত্তির ওপর নির্মিত, এই জাভা লাইব্রেরি লকড PDF টেবিলগুলোকে এমন কাঠামোবদ্ধ ডেটা ফরম্যাটে রূপান্তর করে যা আপনি বাস্তবে ব্যবহার করতে পারেন। আপনি ডেটা পাইপলাইন তৈরি করুন, রিপোর্ট প্রক্রিয়াকরণ স্বয়ংক্রিয় করুন, অথবা শুধু PDF টেবিলের সঙ্গে লড়াই করে ক্লান্ত হন, Tabula-Java একটি চমৎকার সমাধান প্রদান করে।
সাধারণ PDF পার্সারগুলি যা সবকিছুকে অগঠিত টেক্সট হিসেবে বিবেচনা করে, তার বিপরীতে Tabula-Java টেবিলের কাঠামো বুঝতে পারে। এটি সারি, কলাম এবং সেল চিহ্নিত করে, ডেটা পয়েন্টগুলির মধ্যে সম্পর্ক সংরক্ষণ করে। এই পার্থক্যটি গুরুত্বপূর্ণ—\"John 42 Engineer\" কে একটি টেক্সটের গুচ্ছ হিসেবে পাওয়া এবং সঠিক ফিল্ড বিচ্ছিন্নতা সহ গঠিত রেকর্ডের মধ্যে পার্থক্য। লাইব্রেরিটি একটি শুদ্ধ Java বাস্তবায়ন হিসেবে কাজ করে, যা এন্টারপ্রাইজ অ্যাপ্লিকেশন, ব্যাকএন্ড সার্ভিস এবং যেকোনো সিস্টেমের জন্য উপযুক্ত যেখানে আপনাকে নির্ভরযোগ্য, স্বয়ংক্রিয় PDF টেবিল এক্সট্রাকশন দরকার ম্যানুয়াল হস্তক্ষেপ ছাড়া। এটি জনপ্রিয় Tabula ডেস্কটপ অ্যাপ্লিকেশনের ইঞ্জিন, যা সাংবাদিক, গবেষক এবং ডেটা বিশ্লেষকদের দ্বারা বছরের পর বছর বাস্তব ব্যবহারে প্রমাণিত হয়েছে। এর বুদ্ধিমান সনাক্তকরণ অ্যালগরিদম, নমনীয় এক্সট্রাকশন মোড এবং সরল API যেকোনো ব্যক্তি যিনি PDF-তে আটকে থাকা ট্যাবুলার ডেটার সঙ্গে কাজ করেন, তার জন্য অপরিহার্য টুল করে তোলে।
Tabula-Java দিয়ে শুরু করা
অনুগ্রহ করে আপনার প্রকল্পে Maven নির্ভরতা যোগ করার জন্য নিম্নলিখিত কমান্ডটি ব্যবহার করুন।
OpenPDF Maven নির্ভরতা
<dependency>
<groupId>technology.tabula</groupId>
<artifactId>tabula</artifactId>
<version>1.0.5.</version>
</dependency>
Gradle মাধ্যমে Tabula-Java ইনস্টল করুন
implementation 'technology.tabula:tabula:1.0.5' Java API মাধ্যমে মৌলিক টেবিল নিষ্কাশন
ওপেন সোর্স Tabula-Java লাইব্রেরি ব্যবহার করার সবচেয়ে সহজ উপায় হল এর ডিফল্ট ডিটেকশন অ্যালগরিদম ব্যবহার করে PDF-এ স্বয়ংক্রিয়ভাবে সব টেবিল সনাক্ত করা। এটি স্পষ্ট, স্প্রেডশিট-সদৃশ টেবিলযুক্ত PDF-গুলোর জন্য ভাল কাজ করে। চলুন একটি সরল উদাহরণ দিয়ে শুরু করি যা একটি PDF ডকুমেন্ট থেকে সব টেবিল বের করে। এই উদাহরণটি মৌলিক ওয়ার্কফ্লো প্রদর্শন করে। আমরা Apache PDFBox (Tabula-Java-এর ভিত্তিক PDF ইঞ্জিন) ব্যবহার করে PDF লোড করি, একটি এক্সট্র্যাকশন অ্যালগরিদম তৈরি করি, এবং পৃষ্ঠাগুলোর মাধ্যমে ইটারেট করি।
Java API ব্যবহার করে PDF থেকে টেবিল কীভাবে বের করবেন?
import technology.tabula.*;
import technology.tabula.extractors.SpreadsheetExtractionAlgorithm;
import org.apache.pdfbox.pdmodel.PDDocument;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class BasicExtraction {
public static void main(String[] args) throws IOException {
// Load the PDF document
File pdfFile = new File("data_report.pdf");
PDDocument document = PDDocument.load(pdfFile);
// Create an extraction algorithm
SpreadsheetExtractionAlgorithm extractor = new SpreadsheetExtractionAlgorithm();
// Create a page iterator
ObjectExtractor objectExtractor = new ObjectExtractor(document);
PageIterator pages = objectExtractor.extract();
// Process each page
while (pages.hasNext()) {
Page page = pages.next();
// Extract tables from the page
List<Table> tables = extractor.extract(page);
// Print each table
for (Table table : tables) {
System.out.println("Found table with " + table.getRowCount() + " rows");
// Iterate through rows
for (List row : table.getRows()) {
for (RectangularTextContainer cell : row) {
System.out.print(cell.getText() + "\t");
}
System.out.println();
}
}
}
document.close();
}
}
নির্দিষ্ট পৃষ্ঠার অঞ্চল থেকে টেবিল নিষ্কাশন করুন
প্রায়ই, আপনি সবকিছু এক্সট্র্যাক্ট করতে চান না। আপনাকে পৃষ্ঠার নির্দিষ্ট স্থানে থাকা নির্দিষ্ট টেবিল থেকে ডেটা প্রয়োজন হতে পারে। Tabula-Java আপনাকে কোঅর্ডিনেট ব্যবহার করে একটি \"সিলেকশন এরিয়া\" নির্ধারণ করতে দেয়। Rectangle ক্লাস PDF কোঅর্ডিনেট স্পেস (যেখানে ৭২ পয়েন্ট এক ইঞ্চির সমান) ব্যবহার করে পৃষ্ঠার একটি নির্দিষ্ট এলাকা নির্ধারণ করে। getArea() মেথড এক্সট্র্যাকশনের আগে পৃষ্ঠাকে এই অঞ্চলে ক্রপ করে, যা নির্দিষ্ট স্থানে ডেটা প্রয়োজন হলে যথার্থতা এবং পারফরম্যান্স উন্নত করে। এখানে একটি খুবই উপযোগী উদাহরণ রয়েছে যা দেখায় কীভাবে এই অপারেশনটি সম্পন্ন করা যায়।
Java API ব্যবহার করে নির্দিষ্ট পৃষ্ঠার অঞ্চল থেকে টেবিল কীভাবে বের করবেন?
import technology.tabula.Rectangle;
public class RegionExtraction {
public static void extractRegion(String pdfPath) throws IOException {
File pdfFile = new File(pdfPath);
PDDocument document = PDDocument.load(pdfFile);
ObjectExtractor objectExtractor = new ObjectExtractor(document);
Page page = objectExtractor.extract(1);
// Define the region (x, y, width, height)
// Coordinates are in points (72 points = 1 inch)
Rectangle region = new Rectangle(50, 100, 500, 400);
Page subPage = page.getArea(region);
SpreadsheetExtractionAlgorithm extractor = new SpreadsheetExtractionAlgorithm();
List<Table> tables = extractor.extract(subPage);
// Process the extracted table
for (Table table ; tables) {
System.out.println("Extracted " + table.getRowCount() + " rows from region");
}
document.close();
}
}
Java API মাধ্যমে টেবিলকে CSV-তে রূপান্তর করা
একটি সাধারণ ব্যবহার হল বের করা টেবিলগুলোকে সরাসরি CSV ফরম্যাটে রপ্তানি করা, যা স্প্রেডশিট অ্যাপ্লিকেশন বা ডেটাবেসে ব্যবহার করা যায়। CSVWriter ক্লাস CSV ফরম্যাটিংয়ের সমস্ত জটিলতা পরিচালনা করে, বিশেষ অক্ষরের সঠিক এস্কেপিং এবং বহু-লাইন সেল কন্টেন্টের হ্যান্ডলিংসহ। এটি Tabula-Java কে সেই ডেটা প্রসেসিং পাইপলাইনে সংযুক্ত করা সহজ করে দেয় যা CSV ইনপুট প্রত্যাশা করে। এখানে একটি জাভা কোড উদাহরণ রয়েছে যা দেখায় কীভাবে জাভা অ্যাপ্লিকেশনের মধ্যে টেবিলগুলোকে দক্ষতার সাথে হ্যান্ডল করা যায়।
Java API ব্যবহার করে বের করা টেবিলগুলোকে CSV ফরম্যাটে কীভাবে রপ্তানি করবেন?
import technology.tabula.writers.CSVWriter;
import java.io.FileWriter;
public class CSVExtraction {
public static void exportToCSV(String pdfPath, String csvPath) throws IOException {
File pdfFile = new File(pdfPath);
PDDocument document = PDDocument.load(pdfFile);
SpreadsheetExtractionAlgorithm extractor = new SpreadsheetExtractionAlgorithm();
ObjectExtractor objectExtractor = new ObjectExtractor(document);
Page page = objectExtractor.extract(1);
List<Table< tables = extractor.extract(page);
// Write to CSV file
if (!tables.isEmpty()) {
Table table = tables.get(0);
try (FileWriter writer = new FileWriter(csvPath)) {
CSVWriter csvWriter = new CSVWriter();
csvWriter.write(writer, table);
}
}
document.close();
}
}
Java API মাধ্যমে একাধিক পৃষ্ঠা প্রক্রিয়াকরণ
অনেক বাস্তব জগতের PDF-এ টেবিল থাকে যা একাধিক পৃষ্ঠায় ছড়িয়ে থাকে। লাইব্রেরি একসাথে একাধিক পৃষ্ঠা প্রক্রিয়াকরণের সমর্থন অন্তর্ভুক্ত করেছে এবং ডেভেলপারদের ডকুমেন্টের সব পৃষ্ঠার মাধ্যমে ইটারেট করে, পাওয়া টেবিলগুলো বের করে এবং রিপোর্ট করতে দেয়। পৃষ্ঠা নম্বরিং ১ থেকে শুরু হয় (০ নয়), যা মানুষের সাধারণ পৃষ্ঠা নম্বর উল্লেখের সাথে মিলে।