Преобразование слайдов презентации в изображения в PHP
Введение
Aspose.Slides for PHP via Java может рендерить отдельные слайды из презентаций PowerPoint и OpenDocument в форматы PNG, JPEG, GIF, TIFF и другие форматы изображений.
Чтобы преобразовать слайд в изображение, выполните следующие шаги:
- Загрузите презентацию с помощью класса Presentation .
- Выберите слайд, который хотите отобразить.
- При необходимости настройте рендеринг с помощью класса RenderingOptions или TiffOptions .
- Вызовите метод Slide::getImage . Он возвращает объект IImage .
- Вызовите метод IImage::save . и укажите формат вывода значением ImageFormat .
Преобразование слайда в PNG‑изображение
Самый простой способ конвертации использует настройки рендеринга по умолчанию. Полученный объект IImage можно обработать в памяти или сохранить в файл.
Следующий пример PHP рендерит первый слайд и сохраняет его как PNG‑изображение:
use aspose\slides\ImageFormat;
use aspose\slides\Presentation;
$presentation = new Presentation("Presentation.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$image = $slide->getImage();
try {
$image->save("Slide_0.png", ImageFormat::Png);
} finally {
$image->dispose();
}
} finally {
$presentation->dispose();
}
Преобразование слайдов в изображения с пользовательскими размерами
Используйте перегрузку Slide::getImage , принимающую значение Dimension , чтобы отобразить слайд с точными пиксельными размерами.
Следующий пример создает JPEG‑изображение размером 1820 × 1040:
use aspose\slides\ImageFormat;
use aspose\slides\Presentation;
$imageSize = new Java("java.awt.Dimension", 1820, 1040);
$presentation = new Presentation("Presentation.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$image = $slide->getImage($imageSize);
try {
$image->save("Slide_0.jpg", ImageFormat::Jpeg);
} finally {
$image->dispose();
}
} finally {
$presentation->dispose();
}
Преобразование слайдов с заметками и комментариями в изображения
По умолчанию изображения слайдов не включают заметки или комментарии. Передайте объект NotesCommentsLayoutingOptions в метод RenderingOptions::setSlidesLayoutOptions , чтобы управлять размещением заметок и комментариев.
Следующий пример размещает обрезанные заметки под слайдом, а комментарии — справа от него:
use aspose\slides\CommentsPositions;
use aspose\slides\ImageFormat;
use aspose\slides\NotesCommentsLayoutingOptions;
use aspose\slides\NotesPositions;
use aspose\slides\Presentation;
use aspose\slides\RenderingOptions;
$scaleX = 2;
$scaleY = $scaleX;
$commentsAreaColor = new Java("java.awt.Color", 250, 235, 215);
$layoutOptions = new NotesCommentsLayoutingOptions();
$layoutOptions->setNotesPosition(NotesPositions::BottomTruncated);
$layoutOptions->setCommentsPosition(CommentsPositions::Right);
$layoutOptions->setCommentsAreaWidth(500);
$layoutOptions->setCommentsAreaColor($commentsAreaColor);
$renderingOptions = new RenderingOptions();
$renderingOptions->setSlidesLayoutOptions($layoutOptions);
$presentation = new Presentation("Presentation_with_notes_and_comments.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$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:
use aspose\slides\ImageFormat;
use aspose\slides\Presentation;
use aspose\slides\TiffOptions;
$imageSize = new Java("java.awt.Dimension", 2160, 2880);
$tiffOptions = new TiffOptions();
$tiffOptions->setImageSize($imageSize);
$tiffOptions->setDpiX(300);
$tiffOptions->setDpiY(300);
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$image = $slide->getImage($tiffOptions);
try {
$image->save("output.tiff", ImageFormat::Tiff);
} finally {
$image->dispose();
}
} finally {
$presentation->dispose();
}
Warning
Поддержка TIFF не гарантируется в версиях Java ранее JDK 9.Преобразование всех слайдов в изображения
Пройдите по коллекции слайдов, чтобы преобразовать всю презентацию в набор изображений. Скрытые слайды включаются, если вы явно не пропустите их.
Следующий пример рендерит каждый слайд как JPEG‑изображение с горизонтальным и вертикальным коэффициентом масштабирования 2:
use aspose\slides\ImageFormat;
use aspose\slides\Presentation;
$scaleX = 2;
$scaleY = $scaleX;
$presentation = new Presentation("Presentation.pptx");
try {
$slideCount = java_values($presentation->getSlides()->size());
for ($index = 0; $index < $slideCount; $index++) {
$slide = $presentation->getSlides()->get_Item($index);
$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
Метод Slide::writeAsEmf записывает слайд в целевой поток в формате EMF. Следующий пример загружает презентацию, выбирает первый слайд и записывает его в поток EMF‑файла:
use aspose\slides\Presentation;
$presentation = new Presentation("Presentation.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$emfStream = new Java("java.io.FileOutputStream", "Slide_0.emf");
try {
$slide->writeAsEmf($emfStream);
} finally {
$emfStream->close();
}
} finally {
$presentation->dispose();
}
Вызывающая сторона владеет потоком, переданным в Slide::writeAsEmf , и отвечает за его закрытие, как показано выше.
Преобразование SVG‑изображения в EMF и добавление его в презентацию
Используйте SvgImage::writeAsEmf , чтобы преобразовать SVG‑контент в EMF. Полученные байты можно добавить в презентацию через ImageCollection::addImage , а разместить их на слайде с помощью ShapeCollection::addPictureFrame .
Следующий пример создает SvgImage из SVG‑разметки, преобразует его в EMF в памяти, вставляет метафайл на первый слайд и сохраняет презентацию:
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
use aspose\slides\SvgImage;
$svgContent = '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="100"><rect width="200" height="100" fill="#4472C4"/></svg>';
$svgImage = new SvgImage($svgContent);
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$emfStream = new Java("java.io.ByteArrayOutputStream");
try {
$svgImage->writeAsEmf($emfStream);
$emfData = $emfStream->toByteArray();
$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();
}
Метод SvgImage::writeAsEmf не получает владения над целевым потоком. ByteArrayOutputStream сохраняет все сгенерированные данные в памяти, поэтому сброс позиции не требуется перед вызовом toByteArray. Возвращаемый массив байтов остаётся действительным после закрытия потока.
Генерация EMF доступна на операционных системах, поддерживаемых выбранной конфигурацией Aspose.Slides for PHP via Java и JDK, однако рендеринг может различаться между платформами при отсутствии шрифтов или графических зависимостей. Установите шрифты, используемые исходным содержимым, или настройте соответствующие замены, следуйте требованиям платформы для Aspose.Slides for PHP via Java и проверьте результат в целевом приложении, потребляющем EMF. Приложения Linux и macOS часто имеют ограниченную или непоследовательную поддержку отображения и редактирования Windows‑метафайлов.
Отображение цветных эмодзи
Note
Чтобы корректно отображать цветные эмодзи при конвертации слайдов презентации в изображения, шрифты эмодзи, использованные в презентации, должны быть установлены и доступны на системе, выполняющей конвертацию. Например, если презентация использует Segoe UI Emoji, а этот шрифт отсутствует, эмодзи могут отображаться монохромными в результирующих изображениях.Часто задаваемые вопросы
Поддерживает ли Aspose.Slides рендеринг слайдов с анимацией?
Нет. Метод Slide::getImage рендерит статическое изображение слайда и не экспортирует анимацию.
Можно ли экспортировать скрытые слайды как изображения?
Да. Скрытые слайды могут быть отрендерены как обычные слайды. Включайте их в цикл обработки, как показано в примере выше.
Сохраняются ли тени и другие эффекты на изображениях слайдов?
Да. Aspose.Slides отображает тени, прозрачность и другие поддерживаемые графические эффекты на изображениях слайдов.