Как извлечь фигуры из документов Word с помощью GroupDocs.Watermark на Java

В этом руководстве вы узнаете как извлекать фигуры из документов Word с помощью библиотеки GroupDocs.Watermark для Java. Независимо от того, нужно ли вам анализировать диаграммы, извлекать встроенные изображения или автоматизировать генерацию отчетов, извлечение метаданных фигур дает возможность создавать более интеллектуальные конвейеры обработки документов. Мы пройдем настройку библиотеки, загрузку документа Word и получение подробной информации о фигурах — всё в понятном пошаговом коде Java.

Быстрые ответы

  • Что означает “extract shapes”? Получение метаданных (тип, размер, позиция, текст, изображения) для каждого графического объекта в файле Word.
  • Какая библиотека это делает? GroupDocs.Watermark for Java.
  • Нужна ли лицензия? Триальная версия подходит для разработки; полная лицензия снимает ограничения использования.
  • Можно ли также получить изображения из фигур? Да — API предоставляет байты изображения для фигур‑картинок.
  • Какая версия Java требуется? JDK 8 или новее.

Что означает “извлечение фигур” в контексте документов Word?

Извлечение фигур означает программный доступ к каждому графическому элементу — изображениям, WordArt, автофигурам, диаграммам и даже фигурам, встроенным в колонтитулы. Эта информация может использоваться для валидации, миграции или аналитики, основанной на содержимом.

Почему использовать GroupDocs.Watermark для Java?

GroupDocs.Watermark предоставляет высокоуровневый, экономичный по памяти API, который абстрагирует сложность формата Office Open XML. Он позволяет вам:

  • Быстро загружать документы (WordProcessingLoadOptions).
  • Перебрать секции и фигуры без работы с низкоуровневым XML.
  • Получать данные изображения, текст, выравнивание и вращение одним вызовом.
  • Бесшовно интегрировать в существующие Java‑сервисы или микросервисы.

Предварительные требования

  • Java Development Kit (JDK) 8 или выше.
  • IDE, например IntelliJ IDEA или Eclipse.
  • Базовые знания Java I/O.
  • Доступ к лицензии GroupDocs.Watermark for Java или к триальной версии.

Настройка GroupDocs.Watermark для Java

Подключите библиотеку через Maven или прямую загрузку.

Использование Maven

Добавьте репозиторий и зависимость в ваш pom.xml:

<repositories>
   <repository>
      <id>repository.groupdocs.com</id>
      <name>GroupDocs Repository</name>
      <url>https://releases.groupdocs.com/watermark/java/</url>
   </repository>
</repositories>

<dependencies>
   <dependency>
      <groupId>com.groupdocs</groupId>
      <artifactId>groupdocs-watermark</artifactId>
      <version>24.11</version>
   </dependency>
</dependencies>

Прямая загрузка

Либо скачайте последнюю JAR‑файл с GroupDocs.Watermark for Java releases.

Приобретение лицензии

Бесплатная пробная версия достаточна для тестирования. Для продакшн‑использования запросите постоянную лицензию, чтобы разблокировать все функции.

Руководство по реализации

Мы разделим реализацию на два четких шага: загрузка документа Word и извлечение информации о фигурах.

Шаг 1: Загрузка документа Word (load word document java)

Сначала настройте параметры загрузки и создайте экземпляр Watermarker. Это подготовит документ к дальнейшему анализу.

import com.groupdocs.watermark.Watermarker;
import com.groupdocs.watermark.options.WordProcessingLoadOptions;

public void loadDocument() {
    // Configure load options for loading a Word document
    WordProcessingLoadOptions loadOptions = new WordProcessingLoadOptions();
    
    // Create an instance of Watermarker with the specified document and load options
    Watermarker watermarker = new Watermarker("YOUR_DOCUMENT_DIRECTORY/document.docx", loadOptions);
    
    // Close the watermarker to release resources
    watermarker.close();
}

Совет: Держите экземпляр Watermarker в максимально ограниченной области видимости; своевременное закрытие освобождает нативные ресурсы и предотвращает утечки памяти.

Шаг 2: Извлечение информации о фигурах (extract images from shapes)

Теперь мы получим детали каждой фигуры, включая встроенные изображения. Код перебирает каждую секцию и каждую фигуру, выводя полезные метаданные.

import com.groupdocs.watermark.contents.WordProcessingContent;

public void extractShapeInformation() {
    // Load the Word document as configured previously
    WordProcessingLoadOptions loadOptions = new WordProcessingLoadOptions();
    Watermarker watermarker = new Watermarker("YOUR_DOCUMENT_DIRECTORY/document.docx", loadOptions);

    // Obtain WordProcessingContent from the watermarker
    WordProcessingContent content = watermarker.getContent(WordProcessingContent.class);

    // Iterate over each section in the document's content
    for (var section : content.getSections()) {
        // Iterate over each shape within the current section
        for (var shape : section.getShapes()) {
            // Check if the shape is part of a header or footer
            if (shape.getHeaderFooter() != null) {
                System.out.println("In header/footer");
            }
            
            // Output details about each shape, such as type and dimensions
            System.out.println(shape.getShapeType());
            System.out.println(shape.getWidth());
            System.out.println(shape.getHeight());
            System.out.println(shape.isWordArt());
            System.out.println(shape.getRotateAngle());
            System.out.println(shape.getAlternativeText());
            System.out.println(shape.getName());
            System.out.println(shape.getX());
            System.out.println(shape.getY());
            System.out.println(shape.getText());

            // If the shape contains an image, output its details
            if (shape.getImage() != null) {
                System.out.println(shape.getImage().getWidth());
                System.out.println(shape.getImage().getHeight());
                System.out.println(shape.getImage().getBytes().length);
            }
            
            // Output alignment information of the shape
            System.out.println(shape.getHorizontalAlignment());
            System.out.println(shape.getVerticalAlignment());
            System.out.println(shape.getRelativeHorizontalPosition());
            System.out.println(shape.getRelativeVerticalPosition());
        }
    }

    // Close the watermarker to release resources
    watermarker.close();
}

Что делает этот код:

  • Получает тип каждой фигуры (например, picture, WordArt).
  • Выводит значения размера, позиции и вращения.
  • Показывает альтернативный текст и имя, полезные для проверки доступности.
  • Если фигура содержит изображение, выводит пиксельные размеры изображения и размер в байтах — идеально для извлечения изображений из фигур.

Распространённые проблемы и способы их решения

ПроблемаПричинаРешение
FileNotFoundExceptionНеправильный путь к файлу или отсутствие правПроверьте абсолютный/относительный путь и убедитесь, что файл доступен для чтения.
Null shape.getImage()Фигура не является изображением (например, автофигура)Проверьте if (shape.getImage() != null) как показано.
High memory usage on large docsЗагрузка всего документа сразуОбрабатывайте секции по одной или увеличьте размер кучи JVM (-Xmx).
Missing header/footer shapesНе проверяется shape.getHeaderFooter()В примере уже выводится, когда фигура принадлежит колонтитулу.

Практические применения

  1. Автоматическая генерация отчетов — извлекать диаграммы и схемы для вставки в последующие PDF.
  2. Аудит соответствия — проверять, что все фигуры содержат соответствующий альтернативный текст для доступности.
  3. Миграция контента — экспортировать встроенные изображения из устаревших файлов Word в систему управления цифровыми активами.

Соображения по производительности

  • Освобождение ресурсов: Всегда вызывайте watermarker.close() в блоке finally или используйте try‑with‑resources, если оборачиваете API.
  • Обработка кусками: Для документов более 50 МБ рассматривайте обработку каждой секции отдельно, чтобы снизить потребление памяти.
  • Потокобезопасность: Экземпляры Watermarker не являются потокобезопасными; создавайте новый экземпляр для каждого потока.

Заключение

Теперь вы знаете как извлекать фигуры из документов Word с помощью GroupDocs.Watermark для Java, от загрузки файла до чтения метаданных каждой фигуры и встроенных данных изображений. Эта возможность открывает двери к продвинутой аналитике документов, автоматизированным конвейерам контента и проверке доступности.

Следующие шаги

  • Поэкспериментируйте с изменением свойств фигур (например, изменение размера или позиции).
  • Скомбинируйте этот подход с GroupDocs.Parser для извлечения окружающего текста.
  • Интегрируйте логику извлечения в REST‑сервис для обработки по запросу.

Раздел FAQ

Q: Что такое GroupDocs.Watermark for Java?
A: Это комплексная библиотека, предназначенная для управления водяными знаками и содержимым документов разных форматов, позволяющая выполнять такие задачи, как извлечение фигур, получение изображений и манипуляцию текстом.

Q: Могу ли я извлекать изображения из фигур без лицензии?
A: Пробная версия позволяет извлекать, но полная лицензия снимает ограничения использования и позволяет коммерческое развертывание.

Q: Работает ли это с файлами .doc (бинарными)?
A: Да, API поддерживает как .docx, так и устаревшие форматы .doc.

Q: Как обрабатывать документы, защищённые паролем?
A: Укажите пароль через WordProcessingLoadOptions.setPassword("yourPassword") перед созданием Watermarker.

Q: Есть ли способ экспортировать извлечённые данные о фигурах в JSON?
A: Вы можете сопоставить выводимые значения с POJO и использовать любую JSON‑библиотеку (например, Jackson) для сериализации коллекции.


Последнее обновление: 2026-02-05
Тестировано с: GroupDocs.Watermark 24.11 for Java
Автор: GroupDocs