
PDF — один из основных форматов документов в наши дни. Он поддерживает текст, графику, таблицы, аннотации и ряд других элементов. В некоторых случаях может потребоваться извлечь данные из таблиц в документах PDF, таких как счета-фактуры. Чтобы добиться этого программно, в статье рассказывается, как извлекать данные из таблиц в PDF с помощью Java.
- Java API для извлечения данных из таблиц в PDF
- Извлечение данных из таблиц в PDF
- Извлечь таблицу из определенной области страницы
Извлечение данных из таблиц в PDF — Java API
Aspose.PDF for Java — это многофункциональный API для создания PDF-документов и управления ими. Мы будем использовать этот API для извлечения данных из таблиц в документах PDF. Вы можете либо загрузить JAR-файл API, либо установить его в своем Java-приложении, используя следующие конфигурации Maven.
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-pdf</artifactId>
<version>21.9</version>
</dependency>
Извлечение данных из таблиц в PDF на Java
Ниже приведены шаги для извлечения данных из таблиц в PDF с использованием Java.
- Сначала загрузите документ PDF с помощью класса Document.
- Пролистайте страницы в PDF, используя коллекцию Document.getPages().
- В каждой итерации инициализируйте объект TableAbsorber и посещайте выбранную страницу с помощью метода TableAbsorber.visit(Page).
- Во вложенном цикле выполните итерацию по списку таблиц в коллекции TableAbsorber.getTableList().
- Для каждой AbsorbedTable в коллекции выполните итерацию по коллекции строк из AbsorbedTable.getRowList().
- Для каждого AbsorbedRow в коллекции выполните итерацию по коллекции ячеек из AbsorbedRow.getCellList().
- Наконец, прокрутите коллекцию TextFragment каждого AbsorbedCell и напечатайте текст.
В следующем примере кода показано, как извлечь текст из таблиц в формате PDF с помощью Java.
// Загрузить исходный PDF-документ
com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document("sample.pdf");
// Создать блокировщик таблицы
com.aspose.pdf.TableAbsorber absorber = new com.aspose.pdf.TableAbsorber();
// Сканировать страницы
for (com.aspose.pdf.Page page : pdfDocument.getPages()) {
// Посмотреть страницу
absorber.visit(page);
// Итерация по таблицам
for (com.aspose.pdf.AbsorbedTable table : absorber.getTableList()) {
System.out.println("Table");
// Итерация по списку строк
for (com.aspose.pdf.AbsorbedRow row : table.getRowList()) {
// Итерация по списку ячеек
for (com.aspose.pdf.AbsorbedCell cell : row.getCellList()) {
// Перебирать текстовые фрагменты
for (com.aspose.pdf.TextFragment fragment : cell.getTextFragments()) {
StringBuilder sb = new StringBuilder();
for (com.aspose.pdf.TextSegment seg : fragment.getSegments())
sb.append(seg.getText());
System.out.print(sb.toString() + "|");
}
}
System.out.println();
}
}
}
Java: извлечение данных таблицы из определенной области страницы PDF
Ниже приведены шаги для извлечения таблицы из определенной части страницы в PDF-файле с использованием Java.
- Сначала загрузите документ PDF с помощью класса Document.
- Затем выберите нужную Страницу из коллекции Document.getPages().
- Извлеките квадратную аннотацию страницы.
- В каждой итерации инициализируйте объект TableAbsorber и посещайте выбранную страницу с помощью метода TableAbsorber.visit(Page).
- Во вложенном цикле выполните итерацию по списку таблиц в коллекции TableAbsorber.getTableList().
- Проверьте, находится ли поглощенная таблица в нужной области страницы.
- Для каждой AbsorbedTable в коллекции выполните итерацию по коллекции строк, используя AbsorbedTable.getRowList().
- Для каждого AbsorbedRow в коллекции выполните итерацию по коллекции ячеек, используя AbsorbedRow.getCellList().
- Наконец, прокрутите коллекцию TextFragment каждого AbsorbedCell и напечатайте текст.
В следующем примере кода показано, как извлечь таблицы из определенной области страницы PDF.
// Загрузить исходный PDF-документ
com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document("sample.pdf");
// Получить ссылку на нужную страницу
com.aspose.pdf.Page page = pdfDocument.getPages().get_Item(1);
// Создать селектор аннотаций
com.aspose.pdf.AnnotationSelector annotationSelector = new com.aspose.pdf.AnnotationSelector(
new com.aspose.pdf.SquareAnnotation(page, com.aspose.pdf.Rectangle.getTrivial()));
// Получить список аннотаций
java.util.List<com.aspose.pdf.Annotation> list = annotationSelector.getSelected();
if (list.size() == 0) {
System.out.println("Marked tables not found..");
return;
}
// Создание квадратной аннотации
com.aspose.pdf.SquareAnnotation squareAnnotation = (com.aspose.pdf.SquareAnnotation) list.get(0);
// Создайте поглотитель таблиц и посетите страницу
com.aspose.pdf.TableAbsorber absorber = new com.aspose.pdf.TableAbsorber();
absorber.visit(page);
// Итерация по таблицам
for (com.aspose.pdf.AbsorbedTable table : absorber.getTableList()) {
{
// Проверить, существует ли таблица
boolean isInRegion = (squareAnnotation.getRect().getLLX() < table.getRectangle().getLLX())
&& (squareAnnotation.getRect().getLLY() < table.getRectangle().getLLY())
&& (squareAnnotation.getRect().getURX() > table.getRectangle().getURX())
&& (squareAnnotation.getRect().getURY() > table.getRectangle().getURY());
if (isInRegion) {
for (com.aspose.pdf.AbsorbedRow row : table.getRowList()) {
{
for (com.aspose.pdf.AbsorbedCell cell : row.getCellList()) {
for (com.aspose.pdf.TextFragment fragment : cell.getTextFragments()) {
StringBuilder sb = new StringBuilder();
for (com.aspose.pdf.TextSegment seg : fragment.getSegments())
sb.append(seg.getText());
System.out.print(sb.toString() + "|");
}
}
System.out.println();
}
}
}
}
}
Получить бесплатную лицензию
Вы можете использовать Aspose.PDF для Java без оценочных ограничений, используя временную лицензию.
Вывод
В этой статье вы узнали, как извлекать данные из таблиц в PDF с помощью Java. Кроме того, в статье рассказывалось, как извлекать таблицы из определенной области страницы в PDF. Кроме того, вы можете узнать больше об Aspose.PDF для Java, используя документацию. Кроме того, вы можете задать свои вопросы через наш форум.