Открытие презентаций в JavaScript
Введение
Aspose.Slides for Node.js via Java может загружать презентации PowerPoint и OpenDocument из файлов и потоков. После загрузки презентации вы можете просматривать её структуру, редактировать слайды, управлять ресурсами и сохранять её в исходном или другом поддерживаемом формате.
Поведение загрузки можно настроить через класс LoadOptions. Например, можно указать пароль для открытия, удерживать крупные бинарные объекты вне памяти Node.js, контролировать внешние ресурсы или опустить встроенные бинарные данные.
Открытие презентаций
Чтобы открыть существующую презентацию, передайте её путь к файлу конструктору Presentation. После использования освобождайте презентацию, чтобы дескрипторы файлов, временные данные и другие ресурсы были быстро освобождены.
Ниже приведён пример JavaScript, показывающий, как открыть презентацию и получить количество её слайдов:
const slides = require("aspose.slides.via.java");
const presentation = new slides.Presentation("sample.pptx");
try {
console.log("Slide count: " + presentation.getSlides().size());
} finally {
presentation.dispose();
}
Открытие презентаций, защищённых паролем
Пароль при открытии шифрует содержимое презентации. Чтобы загрузить полную презентацию, передайте правильный пароль методу LoadOptions.setPassword и передайте параметры в конструктор Presentation. Загрузка будет неудачной, если пароль отсутствует или неверен.
const slides = require("aspose.slides.via.java");
const loadOptions = new slides.LoadOptions();
loadOptions.setPassword("open_password");
const presentation = new slides.Presentation("encrypted-presentation.pptx", loadOptions);
try {
console.log("Slide count: " + presentation.getSlides().size());
} finally {
presentation.dispose();
}
Для обнаружения пароля, проверки и процессов шифрования см. раздел Password-Protect Presentations. Если зашифрованная презентация была намеренно сохранена с открытыми свойствами документа, эти свойства можно прочитать без пароля; см. раздел Manage Presentation Properties.
Открытие больших презентаций
LoadOptions.getBlobManagementOptions возвращает параметры, которые управляют тем, как Aspose.Slides обрабатывает крупные бинарные объекты, такие как изображения, аудио и видео. Вы можете удерживать исходный файл заблокированным, разрешать использование временных файлов и ограничивать количество BLOB‑данных, сохраняемых в памяти.
Ниже показан JavaScript‑код, демонстрирующий загрузку большой презентации (например, 2 ГБ):
const slides = require("aspose.slides.via.java");
const filePath = "large-presentation.pptx";
const loadOptions = new slides.LoadOptions();
loadOptions.getBlobManagementOptions().setPresentationLockingBehavior(slides.PresentationLockingBehavior.KeepLocked);
loadOptions.getBlobManagementOptions().setTemporaryFilesAllowed(true);
loadOptions.getBlobManagementOptions().setMaxBlobsBytesInMemory(10 * 1024 * 1024);
const presentation = new slides.Presentation(filePath, loadOptions);
try {
presentation.getSlides().get_Item(0).setName("Large presentation");
presentation.save("large-presentation-copy.pptx", slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Примечание
С помощью PresentationLockingBehavior.KeepLocked исходный файл остаётся заблокированным до тех пор, пока экземпляр презентации не будет освобождён. Не перемещайте, не перезаписывайте и не удаляйте исходный файл, пока такой экземпляр существует.
Aspose.Slides может копировать содержимое входного потока во время его загрузки. Для больших презентаций путь к файлу, как правило, более эффективен, чем поток. См. раздел Manage BLOBs для дополнительных вариантов хранения и управления памятью.
Управление внешними ресурсами
LoadOptions.setResourceLoadingCallback принимает реализацию IResourceLoadingCallback. Обратный вызов может предоставить заменяющие данные, перенаправить ресурс, использовать загрузчик по умолчанию или пропустить ресурс. Это полезно, когда презентации содержат внешние изображения, которые необходимо разрешать в соответствии с правилами безопасности или хранения, специфическими для приложения.
const slides = require("aspose.slides.via.java");
const fs = require("fs");
const java = require("java");
const imageLoadingHandler = java.newProxy("com.aspose.slides.IResourceLoadingCallback", {
resourceLoading: function(args) {
const isJpeg = args.getOriginalUri().toLowerCase().endsWith(".jpg");
const approvedImagePath = "approved-image.jpg";
if (!isJpeg || !fs.existsSync(approvedImagePath)) {
return slides.ResourceLoadingAction.Skip;
}
try {
const imageData = fs.readFileSync(approvedImagePath);
args.setData(imageData);
return slides.ResourceLoadingAction.UserProvided;
} catch (error) {
console.error("The approved replacement image could not be read.");
return slides.ResourceLoadingAction.Skip;
}
}
});
const loadOptions = new slides.LoadOptions();
loadOptions.setResourceLoadingCallback(imageLoadingHandler);
const presentation = new slides.Presentation("presentation-with-external-images.pptx", loadOptions);
try {
console.log("Slide count: " + presentation.getSlides().size());
} finally {
presentation.dispose();
}
Загрузка презентаций без встроенных бинарных объектов
Презентация может содержать встроенные бинарные данные, которые приложение не нуждается или не хочет сохранять. Примеры включают:
- проекты VBA, доступные через Presentation.getVbaProject;
- встроенные OLE‑данные, доступные через OleEmbeddedDataInfo.getEmbeddedFileData;
- данные элементов управления ActiveX, доступные через Control.getActiveXControlBinary.
Установите LoadOptions.setDeleteEmbeddedBinaryObjects в true, чтобы удалить эти бинарные данные при загрузке. Сохраните загруженную презентацию, чтобы зафиксировать очищенный результат.
Эта опция уменьшает риск нежелательных встроенных полезных нагрузок, но не является полноценной системой обнаружения вредоносного кода или очистки контента.
const slides = require("aspose.slides.via.java");
const loadOptions = new slides.LoadOptions();
loadOptions.setDeleteEmbeddedBinaryObjects(true);
const presentation = new slides.Presentation("presentation-with-embedded-data.pptx", loadOptions);
try {
presentation.save("presentation-without-embedded-data.pptx", slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
FAQ
Как определить, что файл повреждён и не может быть открыт?
Aspose.Slides генерирует исключение парсинга или формата во время загрузки. Обрабатывайте эту ошибку отдельно от ошибки неверного пароля, чтобы приложение могло точно сообщить о причине.
Что происходит, если отсутствуют требуемые шрифты?
Презентацию всё равно можно загрузить, но при рендеринге и экспорте шрифты могут быть заменены. Вы можете настроить замену шрифтов или предоставить пользовательские шрифты, чтобы сделать вывод более предсказуемым.
Загружается ли вместе с презентацией её встроенное медиа?
Встроенные аудио и видео становятся доступными через объектную модель презентации. Внешние ресурсы разрешаются согласно настроенному поведению загрузки ресурсов и могут быть недоступны, если их местоположения недоступны.