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

Nemokama Java PDF biblioteka lentelių ištraukimui iš PDF

Atviro kodo Java API, kuri programiškai ištraukia lenteles iš PDF failų. Ji gali lengvai konvertuoti ištrauktas lenteles į CSV ir paversti užrakintas PDF lenteles į struktūruotus duomenų formatus.

Kas yra Tabula-Java?

PDF failai yra visur verslo pasaulyje – ataskaitos, sąskaitos, moksliniai darbai ir finansinės ataskaitos. Tačiau yra nuolatinė problema: išgauti lentelių duomenis iš šių dokumentų yra žinomai sudėtinga. Kopijavimas ir įklijavimas dažnai sukelia sugadintus duomenis, o rankinis perrašymas yra varginantis ir linkęs į klaidas. Čia įsikiša Tabula-Java. Tabula-Java yra galinga atviro kodo biblioteka, kuri programiškai išgauna lenteles iš PDF dokumentų. Sukurta ant tvirto PDF apdorojimo pagrindo, ši Java biblioteka paverčia užrakintas PDF lenteles į struktūruotus duomenų formatus, su kuriais iš tikrųjų galite dirbti. Nesvarbu, ar kuriate duomenų srautus, automatizuojate ataskaitų apdorojimą, ar tiesiog pavargote kovoje su PDF lentelėmis, Tabula-Java siūlo elegantišką sprendimą.

Skirtingai nuo įprastų PDF analizatorių, kurie viską laiko nesutvarkytu tekstu, Tabula-Java supranta lentelių struktūras. Ji atpažįsta eilutes, stulpelius ir langelius, išsaugodama duomenų taškų tarpusavio ryšius. Šis skirtumas yra lemiamas – tai, ar gausite „John 42 Engineer“ kaip teksto masyvą, ar struktūruotus įrašus su tinkamu laukų atskyrimu. Biblioteka veikia kaip gryna Java įgyvendinimas, todėl ji puikiai tinka įmonės programoms, backend paslaugoms ir bet kuriai sistemai, kurioje reikia patikimo, automatizuoto PDF lentelių išgavimo be rankinio įsikišimo. Tai variklis, stovintis už populiarios Tabula darbalaukio programos, įrodytas daugelį metų realaus pasaulio naudojimo žurnalistų, tyrėjų ir duomenų analitikų visame pasaulyje. Jos protingi aptikimo algoritmai, lankstūs išgavimo režimai ir paprasta API daro ją būtinu įrankiu visiems, dirbantiems su PDF dokumentuose įstrigusia lentelės duomenų.

Previous Next

Pradžia su Tabula-Java

Prašome naudoti šią komandą, kad pridėtumėte Maven priklausomybę į savo projektą.

OpenPDF Maven priklausomybė

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

Įdiekite Tabula-Java naudojant Gradle

implementation 'technology.tabula:tabula:1.0.5' 

Pagrindinis lentelių išgavimas naudojant Java API

Paprastiausias būdas naudoti atviro kodo biblioteką Tabula-Java yra leisti jai automatiškai aptikti visas lenteles PDF faile, naudojant numatytąjį aptikimo algoritmą. Tai gerai veikia PDF dokumentams su aiškiomis, skaičiuoklės tipo lentelėmis. Pradėkime nuo paprasto pavyzdžio, kuris išgauna visas lenteles iš PDF dokumento. Šis pavyzdys demonstruoja pagrindinę darbo eigą. Įkeliame PDF naudodami Apache PDFBox (Tabula-Java pagrindinė PDF variklio biblioteka), sukuriame išgavimą algoritmą ir iteruojame per puslapius.

Kaip išgauti lentelę iš PDF naudojant 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();
    }
}


Išgauti lentelę iš konkrečių puslapio regionų

Dažnai nenorite išgauti visko. Gali prireikti duomenų iš konkrečios lentelės tam tikroje puslapio vietoje. Tabula-Java leidžia apibrėžti "pasirinkimo sritį" naudojant koordinates. Rectangle klasė apibrėžia konkrečią sritį puslapyje, naudodama PDF koordinatų erdvę (kur 72 taškai lygu vienam coliui). Metodas getArea() apkarpo puslapį iki šios srities prieš išgavimą, pagerindamas tikslumą ir našumą, kai reikia duomenų tik iš konkrečios vietos. Štai labai naudingas pavyzdys, kuris parodo, kaip atlikti šią operaciją.

Kaip išgauti lentelę iš konkrečių puslapio regionų naudojant 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();
    }
}

Lentelių konvertavimas į CSV naudojant Java API

Dažnas naudojimo atvejis yra išgautų lentelių eksportavimas tiesiai į CSV formatą, kad būtų galima naudoti skaičiuoklių programose arba duomenų bazėse. CSVWriter klasė tvarko visą CSV formatavimo sudėtingumą, įskaitant specialiųjų simbolių teisingą pabėgimą ir kelių eilučių langelio turinio tvarkymą. Tai daro paprasta integruoti Tabula-Java į duomenų apdorojimo konvejerius, kurie tikisi CSV įvesties. Štai Java kodo pavyzdys, kuris rodo, kaip efektyviai tvarkyti lenteles Java programose.

Kaip eksportuoti išgautas lenteles į CSV formatą naudojant 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();
    }
}

Daugelio puslapių apdorojimas naudojant Java API

Daugelyje realių PDF dokumentų yra lentelės, išsidėsčiusios per kelis puslapius. Biblioteka įtraukė palaikymą kelių puslapių apdorojimui vienu metu ir leidžia kūrėjams pereiti per visus dokumento puslapius, išgaunant ir pranešant apie rastas lenteles. Puslapių numeravimas prasideda nuo 1 (ne nuo 0), kas atitinka tai, kaip žmonės paprastai nurodo puslapių numerius.

 Lietuvių