Сохранение презентаций в JavaScript

Обзор

Open Presentations in JavaScript описал, как использовать класс Presentation для открытия презентации. В этой статье объясняется, как создавать и сохранять презентации. Класс Presentation содержит содержимое презентации. Независимо от того, создаёте ли вы презентацию с нуля или изменяете существующую, её нужно сохранить по окончании работы. С помощью Aspose.Slides для Node.js вы можете сохранять в файл или поток. В этой статье рассматриваются различные способы сохранения презентации.

Сохранение презентаций в файлы

Сохраните презентацию в файл, вызвав метод save класса Presentation. Передайте в метод имя файла и формат сохранения. Ниже показан пример сохранения презентации с помощью Aspose.Slides.

// Создаёт экземпляр класса Presentation, представляющего файл презентации.
let presentation = new aspose.slides.Presentation();
try {
    // Выполните здесь некоторую работу...
    
    // Сохраните презентацию в файл.
    presentation.save("Output.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Сохранение презентаций в потоки

Вы можете сохранить презентацию в поток, передав выходной поток методу save класса Presentation. Презентацию можно записать в различные типы потоков. В приведённом примере мы создаём новую презентацию и сохраняем её в файловый поток.

// Создаёт экземпляр класса Presentation, представляющего файл презентации.
let presentation = new aspose.slides.Presentation();
try {
    let fileStream = java.newInstanceSync("java.io.FileOutputStream", "Output.pptx");
    try {
        // Сохранить презентацию в поток.
        presentation.save(fileStream, aspose.slides.SaveFormat.Pptx);
    } finally {
        fileStream.close();
    }
} finally {
    presentation.dispose();
}

Сохранение презентаций с предопределённым типом представления

Aspose.Slides позволяет задать начальный вид, который PowerPoint использует при открытии сгенерированной презентации, через класс ViewProperties. Используйте метод setLastView со значением из перечисления ViewType.

let presentation = new aspose.slides.Presentation();
try {
    presentation.getViewProperties().setLastView(aspose.slides.ViewType.SlideMasterView);
    presentation.save("SlideMasterView.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Сохранение презентаций в строгом формате Office Open XML

Aspose.Slides позволяет сохранять презентацию в строгом формате Office Open XML. Используйте класс PptxOptions и задайте его свойство conformance при сохранении. Если установить Conformance.Iso29500_2008_Strict, выходной файл будет сохранён в строгом формате Office Open XML.

Ниже пример создания презентации и её сохранения в строгом формате Office Open XML.

let options = new aspose.slides.PptxOptions();
options.setConformance(aspose.slides.Conformance.Iso29500_2008_Strict);

// Создаёт экземпляр класса Presentation, представляющего файл презентации.
let presentation = new aspose.slides.Presentation();
try {
    // Сохранить презентацию в строгом формате Office Open XML.
    presentation.save("StrictOfficeOpenXml.pptx", aspose.slides.SaveFormat.Pptx, options);
} finally {
    presentation.dispose();
}

Сохранение презентаций в формате Office Open XML в режиме Zip64

Файл Office Open XML — это ZIP‑архив, который накладывает ограничения в 4 ГБ (2^32 байт) на несжатый размер любого файла, сжатый размер любого файла и общий размер архива, а также ограничивает количество файлов в архиве 65 535 (2^16‑1). Расширения формата ZIP64 увеличивают эти ограничения до 2^64.

Метод PptxOptions.setZip64Mode позволяет выбрать, когда использовать расширения ZIP64 при сохранении файла Office Open XML.

Этот метод может использоваться со следующими режимами:

  • IfNecessary использует расширения ZIP64 только если презентация превышает вышеуказанные ограничения. Это режим по умолчанию.
  • Never никогда не использует расширения ZIP64.
  • Always всегда использует расширения ZIP64.

Ниже показан код, демонстрирующий сохранение презентации в формате PPTX с включёнными расширениями ZIP64:

let pptxOptions = new aspose.slides.PptxOptions();
pptxOptions.setZip64Mode(aspose.slides.Zip64Mode.Always);

let presentation = new aspose.slides.Presentation("Sample.pptx");
try {
    presentation.save("OutputZip64.pptx", aspose.slides.SaveFormat.Pptx, pptxOptions);
} finally {
    presentation.dispose();
}

Сохранение презентаций без обновления миниатюры

Метод PptxOptions.setRefreshThumbnail управляет генерацией миниатюры при сохранении презентации в PPTX:

  • Если установлено true, миниатюра обновляется во время сохранения. Это значение по умолчанию.
  • Если установлено false, текущая миниатюра сохраняется. Если у презентации нет миниатюры, она не будет генерироваться.

В приведённом коде презентация сохраняется в PPTX без обновления её миниатюры.

let pptxOptions = new aspose.slides.PptxOptions();
pptxOptions.setRefreshThumbnail(false);

let presentation = new aspose.slides.Presentation("Sample.pptx");
try {
    presentation.save("Output.pptx", aspose.slides.SaveFormat.Pptx, pptxOptions);
}
finally {
    presentation.dispose();
}

Отчёт о прогрессе сохранения в процентах

Отчёт о прогрессе сохранения настраивается через метод setProgressCallback класса SaveOptions и его подклассов. Передайте Java‑прокси, реализующий интерфейс IProgressCallback; во время экспорта обратный вызов будет получать периодические обновления в процентах.

Ниже приведены фрагменты кода, показывающие, как использовать IProgressCallback.

const ExportProgressHandler = java.newProxy("com.aspose.slides.IProgressCallback", {
    reporting: function(progressValue) {
        // Используйте значение процента прогресса здесь.
        const progress = Math.floor(progressValue);
        console.log(`${progress}% of the file has been converted.`);
    }
});

let saveOptions = new aspose.slides.PdfOptions();
saveOptions.setProgressCallback(ExportProgressHandler);

let presentation = new aspose.slides.Presentation("Sample.pptx");
try {
    presentation.save("Output.pdf", aspose.slides.SaveFormat.Pdf, saveOptions);
} finally {
    presentation.dispose();
}

FAQ

Поддерживается ли «быстрое сохранение» (инкрементальное сохранение), при котором записываются только изменения?

Нет. При сохранении каждый раз создаётся полный целевой файл; инкрементальное «быстрое сохранение» не поддерживается.

Можно ли безопасно сохранять один и тот же объект Presentation из нескольких потоков?

Нет. Экземпляр Presentation не является потокобезопасным; сохраняйте его только из одного потока.

Что происходит с гиперссылками и внешними связанными файлами при сохранении?

Гиперссылки сохраняются. Внешние связанные файлы (например, видео по относительным путям) не копируются автоматически — убедитесь, что указанные пути остаются доступными.

Можно ли задать/сохранить метаданные документа (Автор, Заголовок, Компания, Дата)?

Да. Стандартные свойства документа поддерживаются и будут записаны в файл при сохранении.