Безкоштовна Java PDF бібліотека для витягування таблиць з PDF
API Java з відкритим кодом, яке програмно витягує таблиці з 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), що відповідає тому, як люди зазвичай посилаються на номери сторінок.