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

Bezplatná Java PDF knihovna pro extrahování tabulek z PDF

Open-source Java API, které programově extrahuje tabulky z PDF souborů. Může snadno převést extrahované tabulky do CSV a transformovat uzamčené PDF tabulky do strukturovaných formátů dat.

Co je Tabula-Java?

PDF soubory jsou všude v obchodním světě — zprávy, faktury, výzkumné práce a finanční výkazy. Ale existuje trvalý problém: extrahovat tabulková data z těchto dokumentů je notoricky obtížné. Kopírování a vkládání často vede k poškozeným datům a ruční přepis je únavný a náchylný k chybám. Zde přichází Tabula-Java. Tabula-Java je výkonná open source knihovna, která programově extrahuje tabulky z PDF dokumentů. Postavena na solidních základech zpracování PDF, tato Java knihovna převádí zamčené PDF tabulky do strukturovaných formátů dat, se kterými můžete skutečně pracovat. Ať už budujete datové pipeline, automatizujete zpracování zpráv, nebo jste prostě unavení z boje s PDF tabulkami, Tabula-Java nabízí elegantní řešení.

Na rozdíl od obecných PDF parserů, které vše zacházejí jako nestrukturovaný text, Tabula-Java rozumí tabulkovým strukturám. Rozpoznává řádky, sloupce a buňky a zachovává vztahy mezi datovými body. Tento rozdíl je zásadní – rozdíl mezi získáním \"John 42 Engineer\" jako hromady textu a strukturovanými záznamy s řádným oddělením polí. Knihovna funguje jako čistá implementace v Javě, což ji činí ideální pro podnikovou aplikace, backendové služby a jakýkoli systém, kde potřebujete spolehlivé, automatizované extrahování tabulek z PDF bez ručního zásahu. Je to motor za populární desktopovou aplikací Tabula, osvědčený během let reálného používání novináři, výzkumníky a datovými analytiky po celém světě. Její inteligentní detekční algoritmy, flexibilní režimy extrakce a jednoduché API z ní dělají nezbytný nástroj pro každého, kdo pracuje s tabulkovými daty zachycenými v PDF.

Začínáme s Tabula-Java

Použijte prosím následující příkaz k přidání Maven závislosti do vašeho projektu.

Závislost OpenPDF Maven

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

Instalace Tabula-Java pomocí Gradle

implementation 'technology.tabula:tabula:1.0.5' 

Základní extrakce tabulek pomocí Java API

Nejjednodušší způsob, jak použít open source knihovnu Tabula-Java, je nechat ji automaticky detekovat všechny tabulky v PDF pomocí jejího výchozího detekčního algoritmu. To funguje dobře u PDF s jasnými, tabulkovými tabulkami podobnými tabulkovým kalkulačkám. Začněme jednoduchým příkladem, který extrahuje všechny tabulky z PDF dokumentu. Tento příklad demonstruje základní pracovní postup. Načteme PDF pomocí Apache PDFBox (základního PDF enginu Tabula-Java), vytvoříme extrakční algoritmus a iterujeme přes stránky.

Jak extrahovat tabulku z PDF pomocí 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();
    }
}


Extrahovat tabulku ze specifických oblastí stránky

Často nechcete extrahovat vše. Můžete potřebovat data z konkrétní tabulky na specifickém místě na stránce. Tabula-Java vám umožňuje definovat „výběrovou oblast“ pomocí souřadnic. Třída Rectangle určuje konkrétní oblast na stránce pomocí PDF souřadnicového prostoru (kde 72 bodů odpovídá jednomu palci). Metoda getArea() ořízne stránku na tuto oblast před extrakcí, čímž zvyšuje přesnost a výkon, když potřebujete data jen z určitého místa. Zde je velmi užitečný příklad, který ukazuje, jak tuto operaci provést.

Jak extrahovat tabulku z konkrétních oblastí stránky pomocí 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();
    }
}

Převod tabulek do CSV pomocí Java API

Běžným případem použití je export extrahovaných tabulek přímo do formátu CSV pro použití v tabulkových aplikacích nebo databázích. Třída CSVWriter řeší veškerou složitost formátování CSV, včetně správného escapování speciálních znaků a zpracování víceřádkového obsahu buněk. To usnadňuje integraci Tabula-Java do datových zpracovatelských pipeline, které očekávají vstup ve formátu CSV. Zde je ukázkový kód v Javě, který ukazuje, jak efektivně pracovat s tabulkami v Java aplikacích.

Jak exportovat extrahované tabulky do formátu CSV pomocí 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();
    }
}

Zpracování více stránek pomocí Java API

Mnoho reálných PDF souborů obsahuje tabulky rozprostřené na více stránkách. Knihovna zahrnuje podporu pro zpracování více stránek najednou a umožňuje vývojářům iterovat přes všechny stránky v dokumentu, extrahovat a hlásit nalezené tabulky. Číslování stránek začíná na 1 (nikoli 0), což odpovídá tomu, jak lidé obvykle odkazují na čísla stránek.