Безплатна Java PDF библиотека за извличане на таблици от PDF файлове
Отворен Java API, който програмено извлича таблици от PDF файлове. Той може лесно да конвертира извлечените таблици в CSV и трансформира заключени PDF таблици в структурирани формати на данни.
Какво е Tabula-Java?
PDF файловете са навсякъде в бизнес света — отчети, фактури, научни статии и финансови отчети. Но съществува постоянен проблем: извличането на таблични данни от тези документи е известено като изключително трудно. Копирането и поставянето често води до изкривени данни, а ръчното преписване е скучно и податливо на грешки. Тук идва Tabula-Java. Tabula-Java е мощна библиотека с отворен код, която програмено извлича таблици от PDF документи. Изградена върху стабилни основи за обработка на PDF, тази Java библиотека преобразува заключени PDF таблици в структурирани формати на данни, с които наистина можете да работите. Независимо дали създавате потоци от данни, автоматизирате обработката на отчети или просто сте уморени от борбата с PDF таблици, Tabula-Java предлага елегантно решение.
За разлика от общите PDF парсъри, които третират всичко като неструктуриран текст, Tabula-Java разбира таблични структури. Той разпознава редове, колони и клетки, запазвайки връзките между данните. Това различие е от съществено значение — разликата между получаването на \"John 42 Engineer\" като масив от текст и структурираните записи с правилно разделяне на полетата. Библиотеката работи като чиста Java имплементация, което я прави идеална за корпоративни приложения, бекенд услуги и всяка система, където се нуждаете от надеждно, автоматизирано извличане на таблици от PDF без ръчна намеса. Тя е двигателят зад популярното настолно приложение Tabula, доказан през години реална употреба от журналисти, изследователи и анализатори на данни по целия свят. Нейните интелигентни алгоритми за откриване, гъвкави режими на извличане и простият API я правят незаменим инструмент за всеки, който работи с таблични данни, заключени в PDF файлове.
Започване с Tabula-Java
Моля, използвайте следната команда, за да добавите Maven зависимостта във вашия проект.
OpenPDF Maven зависимост
<dependency>
<groupId>technology.tabula</groupId>
<artifactId>tabula</artifactId>
<version>1.0.5.</version>
</dependency>
Инсталиране на Tabula-Java чрез Gradle
implementation 'technology.tabula:tabula:1.0.5' Основно извличане на таблици чрез Java API
Най‑простият начин да използвате отворения код на библиотеката Tabula-Java е да я оставите автоматично да открива всички таблици в PDF, използвайки алгоритъма за откриване по подразбиране. Това работи добре за PDF‑файлове с ясни, таблици, подобни на електронни таблици. Нека започнем с прост пример, който извлича всички таблици от PDF документ. Този пример демонстрира основния работен процес. Зареждаме PDF‑а с Apache PDFBox (основният PDF двигател на Tabula-Java), създаваме алгоритъм за извличане и обхождаме страниците.
Как да извлечете таблица от PDF чрез 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();
}
}
Извличане на таблица от конкретни региони на страницата
Често не искате да извличате всичко. Може да ви трябват данни от конкретна таблица на определено място в страницата. Tabula-Java ви позволява да дефинирате "област за избор" чрез координати. Класът Rectangle определя конкретна област в страницата, използвайки PDF координатната система (където 72 точки са равни на един инч). Методът getArea() изрязва страницата до тази област преди извличане, подобрявайки точността и производителността, когато ви трябват данни само от определено място. Ето много полезен пример, който демонстрира как да изпълните тази операция.
Как да извлечете таблица от конкретни региони на страница, използвайки 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();
}
}
Конвертиране на таблици в CSV чрез Java API
Често срещан случай на употреба е експортирането на извлечени таблици директно в CSV формат за използване в електронни таблици или бази данни. Класът CSVWriter се грижи за цялата сложност на CSV форматирането, включително правилното ескейпиране на специални символи и обработката на съдържание с много редове в клетки. Това прави интегрирането на Tabula-Java в процеси за обработка на данни, които очакват CSV вход, тривиално. Ето пример на Java код, който показва как ефективно да се работи с таблици в Java приложения.
Как да експортирате извлечените таблици във формат CSV чрез 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();
}
}
Обработка на множество страници чрез Java API
Много реални PDF файлове съдържат таблици, разпръснати върху няколко страници. Библиотеката включва поддръжка за обработка на множество страници едновременно и позволява на разработчиците да преминават през всички страници в документа, извличайки и докладвайки намерените таблици. Номерацията на страниците започва от 1 (не от 0), което съответства на начина, по който хората обикновено се отнасят към номерата на страниците.