مكتبة Java PDF مجانية لاستخراج الجداول من ملفات PDF
واجهة برمجة تطبيقات Java مفتوحة المصدر تقوم باستخراج الجداول من ملفات PDF برمجيًا. يمكنها بسهولة تحويل الجداول المستخرجة إلى CSV وتحويل جداول PDF المقفلة إلى صيغ بيانات منظمة.
ما هو Tabula-Java؟
ملفات PDF موجودة في كل مكان في عالم الأعمال — التقارير، الفواتير، الأوراق البحثية، والبيانات المالية. لكن هناك مشكلة مستمرة: استخراج البيانات الجدولية من هذه المستندات صعب للغاية. النسخ واللصق غالبًا ما ينتج عنه بيانات مشوهة، وإعادة الكتابة يدويًا مرهقة وعرضة للأخطاء. هنا يأتي دور Tabula-Java. Tabula-Java هي مكتبة مفتوحة المصدر قوية تقوم باستخراج الجداول من مستندات PDF برمجيًا. مبنية على أسس قوية لمعالجة PDF، تحوّل هذه المكتبة الجداول المغلقة في PDF إلى صيغ بيانات منظمة يمكنك العمل معها فعليًا. سواء كنت تبني خطوط بيانات، أو تُ automatisé معالجة التقارير، أو مجرد متعب من النضال مع جداول PDF، فإن Tabula-Java تقدم حلاً أنيقًا.
على عكس محللات PDF العامة التي تتعامل مع كل شيء كنص غير منظم، فإن Tabula-Java يفهم بنية الجداول. فهو يتعرف على الصفوف والأعمدة والخلايا، محافظًا على العلاقات بين نقاط البيانات. هذا التمييز حاسم—الفرق بين الحصول على "John 42 Engineer" كنص متكتل مقابل سجلات منظمة مع فصل الحقول بشكل صحيح. تعمل المكتبة كتنفيذ نقي بلغة Java، مما يجعلها مثالية لتطبيقات المؤسسات، خدمات الخلفية، وأي نظام تحتاج فيه إلى استخراج جداول PDF موثوق وآلي دون تدخل يدوي. إنها المحرك وراء تطبيق Tabula الشهير لسطح المكتب، وقد أثبتت فعاليتها عبر سنوات من الاستخدام الواقعي من قبل الصحفيين والباحثين ومحللي البيانات حول العالم. خوارزميات الكشف الذكي، أوضاع الاستخراج المرنة، وواجهة برمجة التطبيقات البسيطة تجعلها أداة أساسية لأي شخص يعمل مع بيانات جدولة محبوسة في ملفات PDF.
البدء مع Tabula-Java
يرجى استخدام الأمر التالي لإضافة تبعية Maven إلى مشروعك.
اعتماد OpenPDF في Maven
<dependency>
<groupId>technology.tabula</groupId>
<artifactId>tabula</artifactId>
<version>1.0.5.</version>
</dependency>
تثبيت Tabula-Java عبر Gradle
implementation 'technology.tabula:tabula:1.0.5' استخراج الجداول الأساسي عبر واجهة برمجة تطبيقات Java
أسهل طريقة لاستخدام مكتبة 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 (حيث 72 نقطة تساوي بوصة واحدة). تقوم طريقة 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 عبر واجهة برمجة تطبيقات Java
حالة الاستخدام الشائعة هي تصدير الجداول المستخرجة مباشرةً إلى صيغة CSV للاستخدام في تطبيقات الجداول الإلكترونية أو قواعد البيانات. تتعامل فئة CSVWriter مع كل تعقيدات تنسيق CSV، بما في ذلك الهروب الصحيح للأحرف الخاصة ومعالجة محتوى الخلايا متعددة الأسطر. هذا يجعل من السهل دمج Tabula-Java في خطوط معالجة البيانات التي تتوقع إدخال CSV. إليك مثال على كود Java يوضح كيفية التعامل مع الجداول بكفاءة داخل تطبيقات Java.
كيف تصدر الجداول المستخرجة إلى تنسيق 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();
}
}
معالجة صفحات متعددة عبر واجهة برمجة تطبيقات Java
العديد من ملفات PDF الواقعية تحتوي على جداول موزعة عبر صفحات متعددة. تضمّن المكتبة دعمًا لمعالجة عدة صفحات في آن واحد وتسمح للمطورين بالتنقل عبر جميع صفحات المستند، واستخراج الجداول الموجودة والإبلاغ عنها. يبدأ ترقيم الصفحات من 1 (ليس 0)، وهو ما يتطابق مع الطريقة التي يشير بها البشر عادةً إلى أرقام الصفحات.