Бесплатная 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), что соответствует тому, как люди обычно указывают номера страниц.