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