1. Produse
  2.   PDF
  3.   Java
  4.   Tabula-Java
 
  

Bibliotecă Java PDF gratuită pentru a extrage tabele din PDF-uri

API Java Open Source care extrage programatic tabele din fișiere PDF. Poate converti cu ușurință tabelele extrase în CSV și transformă tabelele PDF blocate în formate de date structurate.

Ce este Tabula-Java?

Fișierele PDF sunt pretutindeni în lumea afacerilor—rapoarte, facturi, lucrări de cercetare și situații financiare. Dar există o problemă persistentă: extragerea datelor tabulare din aceste documente este notorietic dificilă. Copierea și lipirea adesea rezultă în date distorsionate, iar rescrierea manuală este plictisitoare și predispusă la erori. Aici intervine Tabula-Java. Tabula-Java este o bibliotecă open source puternică care extrage programatic tabele din documente PDF. Construită pe baze solide de procesare PDF, această bibliotecă Java transformă tabelele PDF blocate în formate de date structurate cu care poți lucra cu adevărat. Indiferent dacă construiești conducte de date, automatizezi procesarea rapoartelor sau pur și simplu ești sătul să te lupți cu tabelele PDF, Tabula-Java oferă o soluție elegantă.

Spre deosebire de parsere generice PDF care tratează totul ca text nestructurat, Tabula-Java înțelege structurile de tabel. Recunoaște rânduri, coloane și celule, păstrând relațiile dintre punctele de date. Această diferență este crucială — diferența dintre a obține "John 42 Engineer" ca un bloc de text versus înregistrări structurate cu separare corectă a câmpurilor. Biblioteca funcționează ca o implementare pură Java, făcând-o perfectă pentru aplicații enterprise, servicii backend și orice sistem în care aveți nevoie de extragere automată și fiabilă a tabelelor din PDF fără intervenție manuală. Este motorul din spatele popularului program desktop Tabula, dovedit prin ani de utilizare în condiții reale de către jurnaliști, cercetători și analiști de date din întreaga lume. Algoritmii săi inteligenți de detectare, modurile flexibile de extragere și API-ul simplu îl fac un instrument esențial pentru oricine lucrează cu date tabulare prinse în PDF-uri.

Previous Next

Începerea lucrului cu Tabula-Java

Vă rugăm să utilizați comanda următoare pentru a adăuga dependența Maven în proiectul dumneavoastră.

Dependență Maven OpenPDF

<dependency>
  <groupId>technology.tabula</groupId>
  <artifactId>tabula</artifactId>
  <version>1.0.5.</version>
</dependency>

Instalează Tabula-Java prin Gradle

implementation 'technology.tabula:tabula:1.0.5' 

Extracție de bază a tabelelor prin API Java

Cea mai simplă modalitate de a utiliza biblioteca open source Tabula-Java este să o lași să detecteze automat toate tabelele dintr-un PDF folosind algoritmul său de detectare implicit. Aceasta funcționează bine pentru PDF-uri cu tabele clare, asemănătoare foilor de calcul. Să începem cu un exemplu simplu care extrage toate tabelele dintr-un document PDF. Acest exemplu demonstrează fluxul de lucru fundamental. Încărcăm PDF-ul folosind Apache PDFBox (motorul PDF de bază al Tabula-Java), creăm un algoritm de extragere și iterăm prin pagini.

Cum să extragi tabelul din PDF prin 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();
    }
}


Extrage tabelul din regiuni specifice ale paginii

Adesea, nu vrei să extragi totul. Poate ai nevoie de date dintr-un tabel specific într-o locație specifică pe pagină. Tabula-Java îți permite să definești o „zonă de selecție” folosind coordonate. Clasa Rectangle definește o zonă specifică pe pagină utilizând spațiul de coordonate PDF (unde 72 de puncte egală un inch). Metoda getArea() decupează pagina la această regiune înainte de extragere, îmbunătățind acuratețea și performanța când ai nevoie doar de date dintr-o locație specifică. Iată un exemplu foarte util care demonstrează cum să efectuezi această operație.

Cum să extragi tabelul din regiuni specifice ale paginii utilizând 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();
    }
}

Conversia tabelelor în CSV prin API Java

Un caz de utilizare comun este exportarea tabelelor extrase direct în format CSV pentru utilizare în aplicații de foi de calcul sau baze de date. Clasa CSVWriter gestionează toată complexitatea formatării CSV, inclusiv escaparea corectă a caracterelor speciale și manipularea conținutului celulelor pe mai multe linii. Acest lucru face trivială integrarea Tabula-Java în fluxurile de procesare a datelor care așteaptă intrare CSV. Iată un exemplu de cod Java care arată cum să gestionați tabelele eficient în aplicațiile Java.

Cum să exporți tabelele extrase în format CSV prin 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();
    }
}

Procesarea mai multor pagini prin API Java

Multe PDF-uri din viața reală conțin tabele distribuite pe mai multe pagini. Biblioteca a inclus suport pentru procesarea simultană a mai multor pagini și permite dezvoltatorilor să parcurgă toate paginile din document, extrăgând și raportând tabelele găsite. Numerotarea paginilor începe de la 1 (nu de la 0), ceea ce corespunde modului în care oamenii fac de obicei referire la numerele de pagină.

 Română