Bibliothèque PDF Java gratuite pour extraire des tableaux de PDF
API Java open source qui extrait programmatiquement des tableaux de fichiers PDF. Elle peut facilement convertir les tableaux extraits en CSV et transformer les tableaux PDF verrouillés en formats de données structurés.
Qu'est-ce que Tabula-Java ?
Les fichiers PDF sont omniprésents dans le monde des affaires — rapports, factures, articles de recherche et états financiers. Mais il existe un problème persistant : extraire les données tabulaires de ces documents est notoirement difficile. Le copier‑coller donne souvent des données déformées, et la saisie manuelle est fastidieuse et sujette aux erreurs. C’est là que Tabula-Java intervient. Tabula-Java est une puissante bibliothèque open source qui extrait programmatiquement les tableaux des documents PDF. Fondée sur des bases solides de traitement PDF, cette bibliothèque Java transforme les tableaux PDF verrouillés en formats de données structurés que vous pouvez réellement exploiter. Que vous construisiez des pipelines de données, automatisiez le traitement de rapports, ou soyez simplement fatigué de vous battre avec les tableaux PDF, Tabula-Java offre une solution élégante.
Contrairement aux analyseurs PDF génériques qui traitent tout comme du texte non structuré, Tabula-Java comprend les structures de tableau. Il reconnaît les lignes, les colonnes et les cellules, préservant les relations entre les points de données. Cette distinction est cruciale — la différence entre obtenir "John 42 Engineer" comme un bloc de texte versus des enregistrements structurés avec une séparation correcte des champs. La bibliothèque fonctionne comme une implémentation Java pure, ce qui la rend parfaite pour les applications d'entreprise, les services backend et tout système où vous avez besoin d'une extraction fiable et automatisée de tableaux PDF sans intervention manuelle. C'est le moteur derrière l'application de bureau populaire Tabula, prouvé par des années d'utilisation réelle par des journalistes, des chercheurs et des analystes de données du monde entier. Ses algorithmes de détection intelligents, ses modes d'extraction flexibles et son API simple en font un outil essentiel pour quiconque travaille avec des données tabulaires enfermées dans des PDF.
Premiers pas avec Tabula-Java
Veuillez utiliser la commande suivante pour ajouter la dépendance Maven à votre projet.
Dépendance Maven OpenPDF
<dependency>
<groupId>technology.tabula</groupId>
<artifactId>tabula</artifactId>
<version>1.0.5.</version>
</dependency>
Installer Tabula-Java via Gradle
implementation 'technology.tabula:tabula:1.0.5' Extraction de tableau de base via l'API Java
La façon la plus simple d'utiliser la bibliothèque open source Tabula-Java consiste à la laisser détecter automatiquement toutes les tables d'un PDF en utilisant son algorithme de détection par défaut. Cela fonctionne bien pour les PDF contenant des tables claires, semblables à des feuilles de calcul. Commençons par un exemple simple qui extrait toutes les tables d'un document PDF. Cet exemple montre le flux de travail fondamental. Nous chargeons le PDF avec Apache PDFBox (le moteur PDF sous-jacent de Tabula-Java), créons un algorithme d'extraction et parcourons les pages.
Comment extraire un tableau d'un PDF via l'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();
}
}
Extraire un tableau à partir de régions de page spécifiques
Souvent, vous ne souhaitez pas tout extraire. Vous pourriez avoir besoin de données provenant d'une table spécifique à un emplacement précis de la page. Tabula-Java vous permet de définir une "zone de sélection" à l'aide de coordonnées. La classe Rectangle définit une zone spécifique sur la page en utilisant l'espace de coordonnées PDF (où 72 points équivalent à un pouce). La méthode getArea() recadre la page à cette région avant l'extraction, améliorant la précision et les performances lorsque vous ne avez besoin que de données d'un emplacement particulier. Voici un exemple très utile qui montre comment effectuer cette opération.
Comment extraire un tableau d'une région de page spécifique en utilisant l'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();
}
}
Conversion de tableaux en CSV via l'API Java
Un cas d'utilisation courant consiste à exporter les tables extraites directement au format CSV pour les utiliser dans des applications de tableur ou des bases de données. La classe CSVWriter gère toute la complexité du formatage CSV, y compris l'échappement correct des caractères spéciaux et la prise en charge du contenu des cellules sur plusieurs lignes. Cela rend l'intégration de Tabula-Java dans les pipelines de traitement de données qui attendent une entrée CSV triviale. Voici un exemple de code Java qui montre comment gérer les tables efficacement dans les applications Java.
Comment exporter les tableaux extraits au format CSV via l'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();
}
}
Traitement de plusieurs pages via l'API Java
De nombreux PDF du monde réel contiennent des tables réparties sur plusieurs pages. La bibliothèque a intégré la prise en charge du traitement de plusieurs pages simultanément et permet aux développeurs de parcourir toutes les pages du document, d'extraire et de signaler les tables trouvées. La numérotation des pages commence à 1 (et non 0), ce qui correspond à la façon dont les humains font généralement référence aux numéros de page.