Преобразование слайдов презентации в изображения в Node.js через .NET
Обзор
Aspose.Slides for Node.js via .NET рендерит слайды из презентаций PowerPoint и OpenDocument в виде изображений, например, чтобы показать миниатюры слайдов на веб‑странице. В этой статье показаны два способа выбора размера изображения: коэффициент масштабирования относительно размера слайда и точный размер в пикселях. Оба примера сохраняют файлы PNG.
Примеры ожидают презентацию с именем sample.pptx в папке проекта, которую вы настроили в Installation. Подойдёт любая презентация PowerPoint. Сохраните каждый пример как файл .js в папке проекта и запустите его из этой папки командой node.
Note
Aspose.Slides for Node.js via .NET не имеет собственной справки по API. Он зеркалирует API Aspose.Slides for .NET с именами в camelCase, поэтому ссылки на API в этой статье ведут к соответствующим классам и членам в Aspose.Slides for .NET API reference.Чтобы преобразовать слайд в изображение, выполните следующие шаги:
- Откройте презентацию с помощью конструктора Presentation.
- Получите слайд из коллекции slides с помощью
get(index). Индексы начинаются с 0. - Отрендерите слайд с помощью
getImageWithScaleилиgetImageWithImageSize. В справке по .NET API оба метода являются перегрузками Slide.GetImage. Они возвращают объект изображения, соответствующий IImage. - Сохраните изображение с помощью его метода save и значения ImageFormat, затем вызовите его метод
dispose.
Преобразовать каждый слайд в PNG‑изображение
getImageWithScale принимает горизонтальный и вертикальный коэффициенты масштабирования. При масштабе 1 один пункт слайда становится одним пикселем изображения. В следующем примере каждый слайд рендерится при масштабе 2:
const { Presentation, ImageFormat } = require("aspose.slides.via.net");
// Масштаб 1 отображает один пиксель на пункт; 2 удваивает ширину и высоту.
const scaleX = 2;
const scaleY = scaleX;
const presentation = new Presentation("sample.pptx");
try {
const slideCount = presentation.slides.count;
for (let index = 0; index < slideCount; index++) {
const slide = presentation.slides.get(index);
const image = slide.getImageWithScale(scaleX, scaleY);
try {
image.save(`slide_${index + 1}.png`, ImageFormat.Png);
} finally {
image.dispose();
}
}
console.log(`Saved ${slideCount} images`);
} finally {
presentation.dispose();
}
Скрипт записывает по одному файлу на каждый слайд: slide_1.png, slide_2.png и так далее, нумеруя их с 1. Для презентации 16:9 со слайдами размером 960 × 540 пунктов каждое изображение будет 1920 × 1080 пикселей. Скрытые слайды тоже рендерятся; чтобы пропустить их, проверьте свойство слайда hidden. Каждое изображение освобождается в собственном блоке finally, что освобождает его перед рендерингом следующего слайда. Без лицензии изображения также содержат водяной знак оценки; см. Licensing.
Преобразовать слайд в изображение заданного размера
getImageWithImageSize принимает объект с полями width и height в пикселях. В следующем примере первый слайд рендерится шириной 1280 пикселей, а высота вычисляется из размера слайда, чтобы изображение сохраняло соотношение сторон слайда:
const { Presentation, ImageFormat } = require("aspose.slides.via.net");
const imageWidth = 1280;
const presentation = new Presentation("sample.pptx");
try {
const slideSize = presentation.slideSize.size;
const imageHeight = Math.round(imageWidth * slideSize.height / slideSize.width);
const slide = presentation.slides.get(0);
const image = slide.getImageWithImageSize({ width: imageWidth, height: imageHeight });
try {
image.save("slide_1_1280px.png", ImageFormat.Png);
} finally {
image.dispose();
}
console.log(`Saved a ${imageWidth} x ${imageHeight} image`);
} finally {
presentation.dispose();
}
Свойство slideSize.size возвращает ширину и высоту слайда в пунктах. Для презентации 16:9 скрипт выводит Saved a 1280 x 720 image и пишет файл slide_1_1280px.png; для презентации 4:3 изображение будет 1280 × 960 пикселей.
FAQ
Почему изображение, полученное из getImage без аргументов, так мало?
Без аргументов getImage рендерит слайд в 20 % от его размера в пунктах, поэтому слайд 960 × 540 пунктов превращается в изображение 192 × 108 пикселей. Используйте getImageWithScale или getImageWithImageSize, чтобы выбрать размер.
Как сохранить JPEG или другие форматы изображений?
Передайте другое значение ImageFormat в метод save изображения, например image.save("slide_1.jpg", ImageFormat.Jpeg). Формат берётся из значения ImageFormat, а не из расширения файла, поэтому держите их согласованными.
Почему текст на изображениях выглядит иначе в Linux?
Aspose.Slides может использовать только шрифты, установленные на машине, которая рендерит слайды. Когда в презентации используется шрифт, которого нет, например Calibri на типичном Linux‑сервере, Aspose.Slides подставляет установленный шрифт, что может изменить вид текста и места переноса строк. Установите шрифты, используемые в ваших презентациях, чтобы получить такие же изображения, как в Windows.
Почему getThumbnailWithImageSize выдаёт TypeError?
В README пакета использован getThumbnailWithImageSize, но в пакете нет методов getThumbnail. Используйте вместо этого getImageWithImageSize; он принимает тот же аргумент { width, height }.