کتابخانه رایگان جاوا 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" بهعنوان یک تکه متن بدون ساختار و رکوردهای ساختاریافته با جداسازی صحیح فیلدها. این کتابخانه بهعنوان یک پیادهسازی خالص جاوا عمل میکند و آن را برای برنامههای سازمانی، سرویسهای بکاند و هر سیستمی که به استخراج خودکار و قابل اعتماد جداول PDF بدون دخالت دستی نیاز دارد، ایدهآل میسازد. این موتور پشت برنامه دسکتاپ محبوب Tabula است که با سالها استفاده واقعی توسط روزنامهنگاران، پژوهشگران و تحلیلگران داده در سرتاسر جهان ثابت شده است. الگوریتمهای هوشمند تشخیص، حالتهای استخراج انعطافپذیر و API ساده آن، این ابزار را برای هر کسی که با دادههای جدولی درون PDFها کار میکند، ضروری میسازد.
شروع کار با Tabula-Java
لطفاً از فرمان زیر برای افزودن وابستگی مِیون در پروژه خود استفاده کنید.
وابستگی Maven برای OpenPDF
<dependency>
<groupId>technology.tabula</groupId>
<artifactId>tabula</artifactId>
<version>1.0.5.</version>
</dependency>
نصب Tabula-Java از طریق Gradle
implementation 'technology.tabula:tabula:1.0.5' استخراج جدول پایه از طریق API جاوا
سادهترین روش برای استفاده از کتابخانه منبع باز Tabula-Java این است که به آن اجازه دهید تمام جداول را در یک PDF بهصورت خودکار با استفاده از الگوریتم تشخیص پیشفرضش شناسایی کند. این روش برای PDFهایی که جداول واضح و شبیه به صفحهگسترده دارند، بهخوبی کار میکند. بیایید با یک مثال ساده که تمام جداول را از یک سند PDF استخراج میکند، شروع کنیم. این مثال جریان کار اساسی را نشان میدهد. ما PDF را با استفاده از Apache PDFBox (موتور PDF زیرساخت Tabula-Java) بارگذاری میکنیم، یک الگوریتم استخراج ایجاد میکنیم و صفحات را مرور میکنیم.
چگونه جدول را از PDF با استفاده از Java API استخراج کنیم؟
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();
}
}
تبدیل جداول به CSV از طریق API جاوا
یک مورد استفاده رایج، استخراج جداول بهدستآمده و مستقیم به فرمت CSV برای استفاده در برنامههای صفحهگسترده یا پایگاههای داده است. کلاس CSVWriter تمام پیچیدگی قالببندی CSV را مدیریت میکند، از جمله فرار صحیح کاراکترهای ویژه و پردازش محتوای چندخطی سلول. این کار ادغام Tabula-Java را در خطوط پردازش داده که انتظار ورودی CSV دارند، بهسادگی میکند. در اینجا یک مثال کد جاوا آورده شده است که نشان میدهد چگونه میتوان جداول را بهصورت کارآمد در برنامههای جاوا مدیریت کرد.
چگونه جداول استخراجشده را به فرمت CSV با استفاده از Java API صادر کنیم؟
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();
}
}
پردازش چندین صفحه از طریق API جاوا
بسیاری از PDFهای دنیای واقعی شامل جداولی هستند که در چندین صفحه پخش شدهاند. این کتابخانه پشتیبانی از پردازش همزمان چندین صفحه را اضافه کرده و به توسعهدهندگان امکان میدهد تا از تمام صفحات سند عبور کنند، جداول یافتشده را استخراج و گزارش کنند. شمارهگذاری صفحات از ۱ شروع میشود (نه ۰)، که با نحوهٔ ارجاع انسانها به شماره صفحات مطابقت دارد.