Создание миниатюр фигур презентаций в Java

Введение

Aspose.Slides for Java можно использовать для создания файлов презентаций, в которых каждая страница соответствует слайду. Слайды можно просматривать, открывая файлы презентаций в Microsoft PowerPoint. Однако разработчикам иногда требуется просматривать изображения фигур отдельно в просмоторщике изображений. В таких случаях Aspose.Slides for Java помогает генерировать миниатюры фигур слайдов.

В этой статье описано, как создавать миниатюры слайдов различными способами:

  • Создание миниатюры фигуры внутри слайда.
  • Создание миниатюры фигуры для формы слайда с пользовательскими размерами.
  • Создание миниатюры фигуры в границах внешнего вида фигуры.

Создать миниатюру фигуры из слайда

Чтобы создать миниатюру фигуры из любого слайда с помощью Aspose.Slides for Java, выполните следующее:

  1. Создайте экземпляр класса Presentation.
  2. Получите ссылку на любой слайд, используя его ID или индекс.
  3. Получить изображение миниатюры фигуры указанного слайда в масштабе по умолчанию.
  4. Сохраните изображение миниатюры в предпочтимом формате изображения.

Этот пример кода показывает, как создать миниатюру фигуры из слайда:

// Создайте экземпляр класса Presentation, который представляет файл презентации
Presentation pres = new Presentation("Thumbnail.pptx");
try {
    // Создать изображение в полном масштабе
    IImage slideImage = pres.getSlides().get_Item(0).getShapes().get_Item(0).getImage();
    
    // Сохранить изображение на диск в формате PNG
    try {
          slideImage.save("output.png", ImageFormat.Png);
    } finally {
         if (slideImage != null) slideImage.dispose();
    }
} finally {
    if (pres != null) pres.dispose();
}

Создать миниатюру с пользовательским коэффициентом масштабирования

Чтобы создать миниатюру фигуры слайда с пользовательским коэффициентом масштабирования в Aspose.Slides for Java, выполните следующее:

  1. Создайте экземпляр класса Presentation.
  2. Получите ссылку на любой слайд, используя его ID или индекс.
  3. Получить изображение миниатюры фигуры с пользовательскими размерами указанного слайда.
  4. Сохраните изображение миниатюры в предпочтимом формате изображения.

Этот пример кода показывает, как создать миниатюру фигуры на основе заданного коэффициента масштабирования:

// Создайте экземпляр класса Presentation, который представляет файл презентации
Presentation pres = new Presentation("Thumbnail.pptx");
try {
    // Создать изображение в полном масштабе
    IImage slideImage = pres.getSlides().get_Item(0).getShapes().get_Item(0).getImage(ShapeThumbnailBounds.Shape, 1, 1);

    // Сохранить изображение на диск в формате PNG
    try {
          slideImage.save("output.png", ImageFormat.Png);
    } finally {
         if (slideImage != null) slideImage.dispose();
    }
} finally {
    if (pres != null) pres.dispose();
}

Создать миниатюру внешнего вида фигуры на основе границ

Этот метод создания миниатюр фигур позволяет разработчикам генерировать миниатюру в границах внешнего вида фигуры. Он учитывает все эффекты фигуры. Сгенерированная миниатюра ограничена границами слайда. Чтобы создать миниатюру фигуры слайда в границах её внешнего вида, выполните следующее:

  1. Создайте экземпляр класса Presentation.
  2. Получите ссылку на любой слайд, используя его ID или индекс.
  3. Получите изображение миниатюры указанного слайда с границами фигуры как внешнее отображение.
  4. Сохраните изображение миниатюры в предпочтимом формате изображения.

Этот пример кода основан на приведённых выше шагах:

// Создайте экземпляр класса Presentation, который представляет файл презентации
Presentation pres = new Presentation("Thumbnail.pptx");
try {
    // Создать изображение в полном масштабе
    IImage slideImage = pres.getSlides().get_Item(0).getShapes().get_Item(0).getImage(ShapeThumbnailBounds.Appearance, 1, 1);

    // Сохранить изображение на диск в формате PNG
    try {
          slideImage.save("output.png", ImageFormat.Png);
    } finally {
         if (slideImage != null) slideImage.dispose();
    }
} finally {
    if (pres != null) pres.dispose();
}

Получить реальные визуальные границы фигуры

Свойства кадра интерфейса IShape — его методы getX(), getY(), getWidth() и getHeight() — описивают прямоугольник, хранящийся в модели презентации. Фактическое отрисовываемое содержимое может выходить за пределы этого кадра или занимать иной прямоугольник, выровненный по осям. Повороты, обводки, концы стрел, компоновка и переполнение текста, генерируемая геометрия SmartArt и другие эффекты отрисовки могут изменять занимаемую площадь.

Используйте Shape.getVisualBounds для расчёта этой площади без создания изображения. Метод возвращает объект Rectangle2D.Float в координатах слайда. Возвращаемый прямоугольник не обрезается до границ слайда, поэтому его координаты могут быть отрицательными, если содержимое выходит за пределы начала слайда.

Shape.getVisualBounds в текущей версии не объявлен в интерфейсе IShape. Поэтому храните полученную из коллекции фигур слайда фигуру как значение интерфейса и приводите её к типу только при вызове метода.

Ниже приведён пример, получающий и сравнивающий кадр и визуальные границы:

Presentation presentation = new Presentation("example.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IShape shape = slide.getShapes().get_Item(0);

    Rectangle2D.Float visualBounds = ((Shape) shape).getVisualBounds();

    Rectangle2D.Float frameBounds = new Rectangle2D.Float(
        shape.getX(), shape.getY(), shape.getWidth(), shape.getHeight());

    System.out.println("Frame bounds: " + frameBounds);
    System.out.println("Visual bounds: " + visualBounds);
} finally {
    presentation.dispose();
}

Тот же объект Rectangle2D.Float можно использовать для выравнивания соседних фигур по её левой, правой, верхней или нижней стороне; для резервирования достаточного пространства в генерируемой компоновке; либо для обнаружения содержимого за пределами разрешённой области. Визуальные границы особенно полезны для SmartArt, текстовых полей, стрел, изображений, повёрнутых фигур и групповых фигур, где сохранённый кадр может не отражать полного результата отрисовки.

Используйте Shape.getVisualBounds, когда нужны координаты для компоновки или проверки и нет необходимости в bitmap‑изображении. Используйте IShape.getImage когда требуется отрисовать фигуру. С помощью ShapeThumbnailBounds параметр ShapeThumbnailBounds.Shape задаёт размер изображения из границ фигуры, включая настройки обводки, тогда как ShapeThumbnailBounds.Appearance задаёт размер из внешнего вида фигуры и ограничивает результат границами слайда. В отличие от этого, Shape.getVisualBounds возвращает только вычисленный прямоугольник и не обрезает его до границ слайда.

FAQ

Какие форматы изображений можно использовать при сохранении миниатюр фигур?

PNG, JPEG, BMP, GIF, TIFF, а также другие. Фигуры также могут быть экспортированы как векторный SVG путём сохранения содержимого фигуры в виде SVG.

В чем разница между границами Shape и Appearance при рендеринге миниатюры?

Shape использует геометрию фигуры; Appearance учитывает визуальные эффекты (тени, свечения и т.д.).

Что происходит, если фигура помечена как скрытая? Будет ли она всё равно отрисована как миниатюра?

Скрытая фигура остаётся частью модели и может быть отрисована; флаг скрытия влияет лишь на отображение в режиме слайд‑шоу и не препятствует генерации изображения фигуры.

Поддерживаются ли групповые фигуры, диаграммы, SmartArt и другие сложные объекты?

Да. Любой объект, представляемый как Shape (включая GroupShape, Chart и SmartArt), может быть сохранён в виде миниатюры или SVG.

Влияют ли системно установленные шрифты на качество миниатюр текстовых фигур?

Да. Необходимо предоставить требуемые шрифты (или настроить подстановку шрифтов), чтобы избежать нежелательных замен и искажений текста.