Создание миниатюр фигур презентаций в Java
Введение
Aspose.Slides for Java можно использовать для создания файлов презентаций, в которых каждая страница соответствует слайду. Слайды можно просматривать, открывая файлы презентаций в Microsoft PowerPoint. Однако разработчикам иногда требуется просматривать изображения фигур отдельно в просмоторщике изображений. В таких случаях Aspose.Slides for Java помогает генерировать миниатюры фигур слайдов.
В этой статье описано, как создавать миниатюры слайдов различными способами:
- Создание миниатюры фигуры внутри слайда.
- Создание миниатюры фигуры для формы слайда с пользовательскими размерами.
- Создание миниатюры фигуры в границах внешнего вида фигуры.
Создать миниатюру фигуры из слайда
Чтобы создать миниатюру фигуры из любого слайда с помощью Aspose.Slides for Java, выполните следующее:
- Создайте экземпляр класса Presentation.
- Получите ссылку на любой слайд, используя его ID или индекс.
- Получить изображение миниатюры фигуры указанного слайда в масштабе по умолчанию.
- Сохраните изображение миниатюры в предпочтимом формате изображения.
Этот пример кода показывает, как создать миниатюру фигуры из слайда:
// Создайте экземпляр класса 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, выполните следующее:
- Создайте экземпляр класса Presentation.
- Получите ссылку на любой слайд, используя его ID или индекс.
- Получить изображение миниатюры фигуры с пользовательскими размерами указанного слайда.
- Сохраните изображение миниатюры в предпочтимом формате изображения.
Этот пример кода показывает, как создать миниатюру фигуры на основе заданного коэффициента масштабирования:
// Создайте экземпляр класса 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();
}
Создать миниатюру внешнего вида фигуры на основе границ
Этот метод создания миниатюр фигур позволяет разработчикам генерировать миниатюру в границах внешнего вида фигуры. Он учитывает все эффекты фигуры. Сгенерированная миниатюра ограничена границами слайда. Чтобы создать миниатюру фигуры слайда в границах её внешнего вида, выполните следующее:
- Создайте экземпляр класса Presentation.
- Получите ссылку на любой слайд, используя его ID или индекс.
- Получите изображение миниатюры указанного слайда с границами фигуры как внешнее отображение.
- Сохраните изображение миниатюры в предпочтимом формате изображения.
Этот пример кода основан на приведённых выше шагах:
// Создайте экземпляр класса 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.
Влияют ли системно установленные шрифты на качество миниатюр текстовых фигур?
Да. Необходимо предоставить требуемые шрифты (или настроить подстановку шрифтов), чтобы избежать нежелательных замен и искажений текста.