1. מוצרים
  2.   PDF
  3.   Java
  4.   Tabula-Java
 
  

ספריית Java PDF חינמית לחילוץ טבלאות מקבצי PDF

API Java קוד פתוח שמחלץ טבלאות מקבצי PDF באופן תכנותי. הוא יכול בקלות להמיר טבלאות מחולצות ל‑CSV ולשנות טבלאות PDF נעולות לפורמטים של נתונים מובנים.

מהו Tabula-Java?

קבצי PDF נפוצים בכל תחום עסקי—דוחות, חשבוניות, מאמרי מחקר ודוחות כספיים. אך קיימת בעיה מתמשכת: חילוץ נתונים בטבלאות מהמסמכים האלה הוא קשה מאוד. העתקה והדבקה לעיתים גורמת לנתונים משובשים, והקלדה ידנית היא משעממת ועלולה לגרום לטעויות. כאן נכנסת לתמונה Tabula-Java. Tabula-Java היא ספרייה קוד פתוח חזקה שמחלצת טבלאות מקבצי PDF בצורה תכנותית. מבוססת על יסודות איתנים של עיבוד PDF, ספרייה זו ב-Java ממירה טבלאות PDF נעולות לפורמטים של נתונים מובנים שניתן לעבוד איתם בפועל. בין אם אתה בונה צינוריות נתונים, מאוטומט תהליכי דוחות, או פשוט עייף מהמאבק עם טבלאות PDF, Tabula-Java מציעה פתרון אלגנטי.

בהבדל מפרסרי PDF כלליים המתייחסים לכל כטקסט בלתי מובנה, Tabula-Java מבינה מבני טבלאות. היא מזהה שורות, עמודות ותאים, ושומרת על הקשרים בין נקודות הנתונים. הבחנה זו קריטית – ההבדל בין קבלת \"John 42 Engineer\" כחלק טקסטואלי לעומת רשומות מובנות עם הפרדת שדות נכונה. הספרייה פועלת כמימוש Java טהור, מה שהופך אותה למתאימה ליישומי ארגונים, שירותי backend, ולכל מערכת שבה נדרש חילוץ טבלאות PDF אמין ואוטומטי ללא התערבות ידנית. היא המנוע שמאחורי אפליקציית שולחן העבודה הפופולרית Tabula, הוכחה על ידי שנים של שימוש בעולם האמיתי על ידי עיתונאים, חוקרים ואנליסטים נתונים ברחבי העולם. אלגוריתמי הזיהוי החכמים שלה, מצבי החילוץ הגמישים, וה-API הפשוט שלה הופכים אותה לכלי חיוני לכל מי שעובד עם נתונים טבלאיים לכודים ב‑PDFs.

Previous Next

התחלת עבודה עם Tabula-Java

אנא השתמשו בפקודה הבאה כדי להוסיף את תלות Maven בפרויקט שלכם.

תלות 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 של Java

הדרך הפשוטה ביותר להשתמש בספריית הקוד הפתוח Tabula-Java היא לאפשר לה לזהות אוטומטית את כל הטבלאות בקובץ PDF באמצעות אלגוריתם הזיהוי ברירת המחדל שלה. זה עובד היטב עבור קבצי PDF עם טבלאות ברורות הדומות לגיליונות אלקטרוניים. בואו נתחיל בדוגמה פשוטה שמחלצת את כל הטבלאות ממסמך PDF. דוגמה זו מדגימה את זרימת העבודה הבסיסית. אנו טוענים את ה-PDF באמצעות Apache PDFBox (המנוע PDF הבסיסי של Tabula-Java), יוצרים אלגוריתם חילוץ, ומעבדים את העמודים אחד אחרי השני.

איך לחלץ טבלה מ-PDF באמצעות API של Java?

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() חותכת את העמוד לאזור זה לפני החילוץ, משפרת את הדיוק והביצועים כאשר אתה זקוק רק לנתונים ממיקום ספציפי. הנה דוגמה מאוד שימושית שמדגימה כיצד לבצע פעולה זו.

איך לחלץ טבלה מאזורי דף ספציפיים באמצעות API של Java?

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 של Java

מקרה שימוש נפוץ הוא ייצוא טבלאות שהוצאו ישירות לפורמט CSV לשימוש ביישומי גיליונות אלקטרוניים או מסדי נתונים. המחלקה CSVWriter מטפלת בכל המורכבות של עיצוב CSV, כולל בריחה נכונה של תווים מיוחדים וטיפול בתוכן תאים מרובה שורות. זה עושה את האינטגרציה של Tabula-Java לצינורות עיבוד נתונים הצופים קלט CSV לפשוטה. הנה דוגמת קוד Java שמראה כיצד להתמודד עם טבלאות ביעילות בתוך יישומי Java.

איך לייצא טבלאות שחולצו לפורמט CSV באמצעות API של Java?

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 של Java

רבים מהקבצים PDF בעולם האמיתי מכילים טבלאות המתפשטות על פני מספר עמודים. הספרייה כוללת תמיכה בעיבוד מספר עמודים במקביל ומאפשרת למפתחים לעבור על כל העמודים במסמך, לחלץ ולדווח על הטבלאות שנמצאו. המספור של העמודים מתחיל ב‑1 (לא 0), מה שתואם את האופן שבו בני אדם בדרך כלל מתייחסים למספרי העמודים.

 עִברִית