Преобразование слайдов презентации в изображения на Java
Введение
Aspose.Slides for Java может визуализировать отдельные слайды презентаций PowerPoint и OpenDocument в форматах PNG, JPEG, GIF, TIFF и других графических форматах.
Для преобразования слайда в изображение выполните следующие шаги:
- Загрузите презентацию с помощью класса Presentation.
- Выберите слайд, который нужно визуализировать.
- При необходимости настройте визуализацию с помощью класса RenderingOptions или TiffOptions.
- Вызовите метод ISlide.getImage . Он возвращает объект IImage .
- Вызовите метод IImage.save и укажите формат вывода с помощью значения ImageFormat .
Преобразовать слайд в PNG‑изображение
Самое простое преобразование использует настройки визуализации по умолчанию. Полученный объект IImage может быть обработан в памяти или сохранён в файл.
Следующий пример на Java визуализирует первый слайд и сохраняет его как PNG‑изображение:
import com.aspose.slides.IImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.Presentation;
Presentation presentation = new Presentation("Presentation.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IImage image = slide.getImage();
try {
image.save("Slide_0.png", ImageFormat.Png);
} finally {
image.dispose();
}
} finally {
presentation.dispose();
}
Преобразовать слайды в изображения с пользовательскими размерами
Используйте перегрузку ISlide.getImage , принимающую значение Dimension , чтобы визуализировать слайд с точными пиксельными размерами.
Следующий пример создаёт JPEG‑изображение размером 1820 × 1040 пикселей:
import com.aspose.slides.IImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.Presentation;
import java.awt.Dimension;
Dimension imageSize = new Dimension(1820, 1040);
Presentation presentation = new Presentation("Presentation.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IImage image = slide.getImage(imageSize);
try {
image.save("Slide_0.jpg", ImageFormat.Jpeg);
} finally {
image.dispose();
}
} finally {
presentation.dispose();
}
Преобразовать слайды с заметками и комментариями в изображения
По умолчанию изображения слайдов не включают заметки или комментарии. Передайте объект NotesCommentsLayoutingOptions методу RenderingOptions.setSlidesLayoutOptions чтобы управлять расположением заметок и комментариев.
Следующий пример размещает усечённые заметки под слайдом и комментарии справа от него:
import com.aspose.slides.CommentsPositions;
import com.aspose.slides.IImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.NotesCommentsLayoutingOptions;
import com.aspose.slides.NotesPositions;
import com.aspose.slides.Presentation;
import com.aspose.slides.RenderingOptions;
import java.awt.Color;
float scaleX = 2f;
float scaleY = scaleX;
Color commentsAreaColor = new Color(250, 235, 215);
NotesCommentsLayoutingOptions layoutOptions = new NotesCommentsLayoutingOptions();
layoutOptions.setNotesPosition(NotesPositions.BottomTruncated);
layoutOptions.setCommentsPosition(CommentsPositions.Right);
layoutOptions.setCommentsAreaWidth(500);
layoutOptions.setCommentsAreaColor(commentsAreaColor);
RenderingOptions renderingOptions = new RenderingOptions();
renderingOptions.setSlidesLayoutOptions(layoutOptions);
Presentation presentation = new Presentation("Presentation_with_notes_and_comments.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IImage image = slide.getImage(renderingOptions, scaleX, scaleY);
try {
image.save("Image_with_notes_and_comments_0.gif", ImageFormat.Gif);
} finally {
image.dispose();
}
} finally {
presentation.dispose();
}
Warning
Для преобразования слайдов в изображения не передавайте BottomFull методу NotesCommentsLayoutingOptions.setNotesPosition. Заметки могут содержать больше текста, чем позволяет фиксированный размер изображения. Вместо этого используйте BottomTruncated .Преобразовать слайды в изображения с использованием параметров TIFF
Класс TiffOptions позволяет управлять размером, разрешением и другими свойствами визуализируемого TIFF‑изображения.
Следующий пример визуализирует первый слайд как TIFF‑изображение размером 2160 × 2880 пикселей при 300 DPI:
import com.aspose.slides.IImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.Presentation;
import com.aspose.slides.TiffOptions;
import java.awt.Dimension;
Dimension imageSize = new Dimension(2160, 2880);
TiffOptions tiffOptions = new TiffOptions();
tiffOptions.setImageSize(imageSize);
tiffOptions.setDpiX(300);
tiffOptions.setDpiY(300);
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IImage image = slide.getImage(tiffOptions);
try {
image.save("output.tiff", ImageFormat.Tiff);
} finally {
image.dispose();
}
} finally {
presentation.dispose();
}
Warning
Поддержка TIFF не гарантируется в версиях Java старее JDK 9.Преобразовать все слайды в изображения
Пройдитесь по коллекции слайдов, чтобы преобразовать всю презентацию в последовательность изображений. Скрытые слайды включаются, если явно не исключить их из цикла.
Следующий пример визуализирует каждый слайд как JPEG‑изображение с горизонтальными и вертикальными коэффициентами масштабирования, равными 2:
import com.aspose.slides.IImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.Presentation;
float scaleX = 2f;
float scaleY = scaleX;
Presentation presentation = new Presentation("Presentation.pptx");
try {
int slideCount = presentation.getSlides().size();
for (int index = 0; index < slideCount; index++) {
ISlide slide = presentation.getSlides().get_Item(index);
IImage image = slide.getImage(scaleX, scaleY);
try {
image.save("Slide_" + index + ".jpg", ImageFormat.Jpeg);
} finally {
image.dispose();
}
}
} finally {
presentation.dispose();
}
Создать вывод в формате Enhanced Metafile
Enhanced Metafile (EMF) полезен, когда векторная графика должна передаваться в Microsoft Office или другие Windows‑приложения, поддерживающие Windows‑метафайлы. В отличие от растрового изображения, EMF сохраняет векторные операции рисования, которые масштабируются без потери чёткости. Однако EMF в первую очередь является форматом совместимости для приложений с поддержкой Windows‑метафайлов, а не универсальным форматом обмена. Кроме того, сложное содержимое слайда, такое как растровые изображения и некоторые эффекты, может храниться в виде растрированных элементов внутри векторного контейнера метафайла.
Экспортировать слайд в EMF
Метод ISlide.writeAsEmf записывает объект ISlide в целевой поток в формате EMF. Следующий пример загружает презентацию, выбирает первый слайд и записывает его в поток EMF‑файла:
import com.aspose.slides.ISlide;
import com.aspose.slides.Presentation;
import java.io.FileOutputStream;
Presentation presentation = new Presentation("Presentation.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
FileOutputStream emfStream = new FileOutputStream("Slide_0.emf");
try {
slide.writeAsEmf(emfStream);
} finally {
emfStream.close();
}
} finally {
presentation.dispose();
}
Вызывающая сторона владеет потоком, переданным в ISlide.writeAsEmf, и отвечает за его закрытие, как показано выше.
Преобразовать изображение SVG в EMF и добавить его в презентацию
Используйте ISvgImage.writeAsEmf для преобразования SVG‑содержимого в EMF. Полученные байты можно добавить в презентацию через IImageCollection.addImage и разместить на слайде с помощью IShapeCollection.addPictureFrame .
Следующий пример создаёт объект SvgImage из SVG‑разметки, преобразует его во временный EMF, вставляет метафайл на первый слайд и сохраняет презентацию:
import com.aspose.slides.IPPImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ISvgImage;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import com.aspose.slides.ShapeType;
import com.aspose.slides.SvgImage;
import java.io.ByteArrayOutputStream;
String svgContent = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"100\"><rect width=\"200\" height=\"100\" fill=\"#4472C4\"/></svg>";
ISvgImage svgImage = new SvgImage(svgContent);
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
ByteArrayOutputStream emfStream = new ByteArrayOutputStream();
try {
svgImage.writeAsEmf(emfStream);
byte[] emfData = emfStream.toByteArray();
IPPImage image = presentation.getImages().addImage(emfData);
slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 20, 200, 100, image);
} finally {
emfStream.close();
}
presentation.save("Presentation_with_emf.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
ISvgImage.writeAsEmf не получает права собственности на целевой поток. ByteArrayOutputStream сохраняет все сгенерированные данные в памяти, поэтому перед вызовом toByteArray сбрасывать позицию потока не требуется. Возвращённый массив байтов остаётся действительным после закрытия потока.
Генерация EMF доступна на операционных системах, поддерживаемых выбранной конфигурацией Aspose.Slides for Java и JDK, однако визуализация может различаться между платформами, если недоступны шрифты или графические зависимости. Установите шрифты, использованные в исходном содержимом, либо настройте соответствующие подстановки, следуйте требованиям платформы для Aspose.Slides for Java и проверьте результат в целевом приложении, потребляющем EMF. Приложения под Linux и macOS часто имеют ограниченную или непоследовательную поддержку отображения и редактирования Windows‑метафайлов.
Отображение цветных эмодзи
Note
Чтобы цветные эмодзи корректно отображались при преобразовании слайдов презентации в изображения, шрифты эмодзи, использованные в презентации, должны быть установлены и доступны на системе, выполняющей преобразование. Например, если презентация использует Segoe UI Emoji, а этот шрифт отсутствует, эмодзи могут отображаться монохромно в выходных изображениях.FAQ
Поддерживает ли Aspose.Slides визуализацию слайдов с анимацией?
Нет. Метод ISlide.getImage создаёт статическое изображение слайда и не экспортирует анимацию.
Можно ли экспортировать скрытые слайды в виде изображений?
Да. Скрытые слайды могут быть визуализированы так же, как обычные. Включите их в цикл обработки, как показано в примере выше.
Сохраняются ли тени и другие эффекты в изображениях слайдов?
Да. Aspose.Slides визуализирует тени, прозрачность и другие поддерживаемые графические эффекты в изображениях слайдов.