Извлечь данные из таблицы в PDF Java

PDF — один из основных форматов документов в наши дни. Он поддерживает текст, графику, таблицы, аннотации и ряд других элементов. В некоторых случаях может потребоваться извлечь данные из таблиц в документах PDF, таких как счета-фактуры. Чтобы добиться этого программно, в статье рассказывается, как извлекать данные из таблиц в PDF с помощью Java.

Извлечение данных из таблиц в 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, используя документацию. Кроме того, вы можете задать свои вопросы через наш форум.

Смотрите также