Darmowa biblioteka Java PDF do wyodrębniania tabel z plików PDF
Otwarta biblioteka Java API, która programowo wyodrębnia tabele z plików PDF. Może łatwo konwertować wyodrębnione tabele do CSV i przekształca zablokowane tabele PDF w ustrukturyzowane formaty danych.
Czym jest Tabula-Java?
Pliki PDF są wszechobecne w świecie biznesu — raporty, faktury, prace naukowe i sprawozdania finansowe. Jednak istnieje stały problem: wyodrębnianie danych tabelarycznych z tych dokumentów jest notorycznie trudne. Kopiowanie i wklejanie często prowadzi do zniekształconych danych, a ręczne przepisywanie jest żmudne i podatne na błędy. Właśnie tutaj pojawia się Tabula-Java. Tabula-Java to potężna biblioteka open source, która programowo wyodrębnia tabele z dokumentów PDF. Zbudowana na solidnych podstawach przetwarzania PDF, ta biblioteka Java przekształca zablokowane tabele PDF w ustrukturyzowane formaty danych, z którymi naprawdę możesz pracować. Niezależnie od tego, czy tworzysz potoki danych, automatyzujesz przetwarzanie raportów, czy po prostu masz dość walki z tabelami w PDF, Tabula-Java oferuje eleganckie rozwiązanie.
W przeciwieństwie do ogólnych parserów PDF, które traktują wszystko jako nieustrukturyzowany tekst, Tabula-Java rozumie struktury tabel. Rozpoznaje wiersze, kolumny i komórki, zachowując zależności między punktami danych. Ta różnica jest kluczowa — różnica między otrzymaniem \"John 42 Engineer\" jako jednego bloku tekstu a rekordami strukturalnymi z odpowiednim rozdzieleniem pól. Biblioteka działa jako czysta implementacja w Javie, co czyni ją idealną dla aplikacji korporacyjnych, usług backendowych i każdego systemu, w którym potrzebne jest niezawodne, zautomatyzowane wyodrębnianie tabel z PDF bez ręcznej interwencji. To silnik stojący za popularną aplikacją desktopową Tabula, sprawdzony przez lata rzeczywistego użycia przez dziennikarzy, badaczy i analityków danych na całym świecie. Jej inteligentne algorytmy wykrywania, elastyczne tryby ekstrakcji i prosty interfejs API czynią ją niezbędnym narzędziem dla każdego, kto pracuje z danymi tabelarycznymi uwięzionymi w PDF.
Rozpoczęcie pracy z Tabula-Java
Użyj poniższego polecenia, aby dodać zależność Maven w swoim projekcie.
Zależność Maven OpenPDF
<dependency>
<groupId>technology.tabula</groupId>
<artifactId>tabula</artifactId>
<version>1.0.5.</version>
</dependency>
Instalacja Tabula-Java za pomocą Gradle
implementation 'technology.tabula:tabula:1.0.5' Podstawowe wyodrębnianie tabel za pomocą API Java
Najprostszym sposobem użycia otwartoźródłowej biblioteki Tabula-Java jest pozwolenie jej na automatyczne wykrywanie wszystkich tabel w pliku PDF przy użyciu domyślnego algorytmu wykrywania. Działa to dobrze dla plików PDF z wyraźnymi, przypominającymi arkusze kalkulacyjne tabelami. Zacznijmy od prostego przykładu, który wyodrębnia wszystkie tabele z dokumentu PDF. Ten przykład demonstruje podstawowy przepływ pracy. Ładujemy PDF przy użyciu Apache PDFBox (podstawowego silnika PDF Tabula-Java), tworzymy algorytm ekstrakcji i iterujemy przez strony.
Jak wyodrębnić tabelę z pliku PDF przy użyciu 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();
}
}
Wyodrębnianie tabeli z określonych regionów strony
Często nie chcesz wyodrębniać wszystkiego. Możesz potrzebować danych z konkretnej tabeli w określonym miejscu na stronie. Tabula-Java umożliwia zdefiniowanie „obszaru wyboru” przy użyciu współrzędnych. Klasa Rectangle definiuje określony obszar na stronie, korzystając z przestrzeni współrzędnych PDF (gdzie 72 punkty równe są jednemu calowi). Metoda getArea() przycina stronę do tego regionu przed ekstrakcją, poprawiając dokładność i wydajność, gdy potrzebujesz danych tylko z konkretnego miejsca. Oto bardzo przydatny przykład, który pokazuje, jak wykonać tę operację.
Jak wyodrębnić tabelę z określonych regionów strony przy użyciu 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();
}
}
Konwertowanie tabel do formatu CSV za pomocą API Java
Typowym przypadkiem użycia jest eksportowanie wyodrębnionych tabel bezpośrednio do formatu CSV w celu użycia w aplikacjach arkuszy kalkulacyjnych lub bazach danych. Klasa CSVWriter obsługuje całą złożoność formatowania CSV, w tym prawidłowe escapowanie znaków specjalnych oraz obsługę wieloliniowej zawartości komórek. Dzięki temu integracja Tabula-Java z potokami przetwarzania danych, które oczekują wejścia CSV, jest trywialna. Oto przykład kodu Java, który pokazuje, jak efektywnie obsługiwać tabele w aplikacjach Java.
Jak wyeksportować wyodrębnione tabele do formatu CSV przy użyciu 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();
}
}
Przetwarzanie wielu stron za pomocą API Java
Wiele rzeczywistych plików PDF zawiera tabele rozłożone na wielu stronach. Biblioteka zawiera wsparcie dla przetwarzania wielu stron jednocześnie i umożliwia programistom iterację przez wszystkie strony dokumentu, wyodrębniając i raportując znalezione tabele. Numeracja stron zaczyna się od 1 (nie od 0), co odpowiada temu, jak ludzie zazwyczaj odwołują się do numerów stron.