Сохранение презентаций в C++
Обзор
Open Presentations in C++ описал, как использовать класс Presentation для открытия презентации. Эта статья объясняет, как создавать и сохранять презентации. Класс Presentation содержит содержимое презентации. Независимо от того, создаёте ли вы презентацию с нуля или изменяете существующую, вам понадобится сохранить её после завершения работы. С Aspose.Slides для C++ вы можете сохранять в файл или поток. Эта статья описывает различные способы сохранения презентации.
Сохранение презентаций в файлы
Сохраните презентацию в файл, вызвав метод Save класса Presentation. Передайте в метод имя файла и формат сохранения. Ниже показан пример, как сохранить презентацию с помощью Aspose.Slides.
// Создать экземпляр класса Presentation, представляющего файл презентации.
auto presentation = MakeObject<Presentation>();
// Выполнить некоторую работу здесь...
// Сохранить презентацию в файл.
presentation->Save(u"Output.pptx", SaveFormat::Pptx);
presentation->Dispose();
Сохранение презентаций в потоки
Вы можете сохранить презентацию в поток, передав поток вывода методу Save класса Presentation. Презентацию можно записать во многие типы потоков. В примере ниже мы создаём новую презентацию и сохраняем её в файловый поток.
// Создать экземпляр класса Presentation, представляющего файл презентации.
auto presentation = MakeObject<Presentation>();
auto fileStream = MakeObject<FileStream>(u"Output.pptx", FileMode::Create);
// Сохранить презентацию в поток.
presentation->Save(fileStream, SaveFormat::Pptx);
presentation->Dispose();
fileStream->Close();
Сохранение презентаций с предопределённым типом представления
Aspose.Slides позволяет задать начальный вид, который PowerPoint использует при открытии сгенерированной презентации, с помощью класса ViewProperties. Используйте метод set_LastView со значением из перечисления ViewType.
auto presentation = MakeObject<Presentation>();
presentation->get_ViewProperties()->set_LastView(ViewType::SlideMasterView);
presentation->Save(u"SlideMasterView.pptx", SaveFormat::Pptx);
presentation->Dispose();
Сохранение презентаций в строгом формате Office Open XML
Aspose.Slides позволяет сохранять презентацию в строгом формате Office Open XML. Используйте класс PptxOptions и задайте его свойство conformance при сохранении. Если установить Conformance.Iso29500_2008_Strict, выходной файл будет сохранён в строгом формате Office Open XML. Пример ниже создаёт презентацию и сохраняет её в строгом формате Office Open XML.
auto options = MakeObject<PptxOptions>();
options->set_Conformance(Conformance::Iso29500_2008_Strict);
// Создать экземпляр класса Presentation, представляющего файл презентации.
auto presentation = MakeObject<Presentation>();
// Сохранить презентацию в строгом формате Office Open XML.
presentation->Save(u"StrictOfficeOpenXml.pptx", SaveFormat::Pptx, options);
presentation->Dispose();
Сохранение презентаций в формате Office Open XML в режиме Zip64
Файл Office Open XML представляет собой ZIP‑архив, накладывающий ограничения в 4 ГБ (2^32 байт) на несжатый размер любого файла, сжатый размер любого файла и общий размер архива, а также ограничивающий количество файлов в архиве до 65 535 (2^16‑1). Расширения формата ZIP64 повышают эти ограничения до 2^64. Метод IPptxOptions::set_Zip64Mode позволяет выбрать, когда использовать расширения формата ZIP64 при сохранении файла Office Open XML. Этот метод может использоваться со следующими режимами:
IfNecessaryиспользует расширения формата ZIP64 только если презентация превышает указанные выше ограничения. Это режим по умолчанию.Neverникогда не использует расширения формата ZIP64.Alwaysвсегда использует расширения формата ZIP64. Следующий код демонстрирует, как сохранить презентацию как PPTX с включенными расширениями формата ZIP64:
auto pptxOptions = MakeObject<PptxOptions>();
pptxOptions->set_Zip64Mode(Zip64Mode::Always);
auto presentation = MakeObject<Presentation>(u"Sample.pptx");
presentation->Save(u"OutputZip64.pptx", SaveFormat::Pptx, pptxOptions);
presentation->Dispose();
NOTE
При сохранении сZip64Mode.Never выбрасывается PptxException, если презентацию невозможно сохранить в формате ZIP32.
Сохранение презентаций без обновления миниатюры
Метод PptxOptions::set_RefreshThumbnail управляет генерацией миниатюры при сохранении презентации в PPTX:
- Если установлено
true, миниатюра обновляется во время сохранения. Это значение по умолчанию. - Если установлено
false, текущая миниатюра сохраняется. Если у презентации нет миниатюры, она не будет создаваться. В приведённом ниже коде презентация сохраняется в PPTX без обновления её миниатюры.
auto pptxOptions = MakeObject<PptxOptions>();
pptxOptions->set_RefreshThumbnail(false);
auto presentation = MakeObject<Presentation>(u"Sample.pptx");
presentation->Save(u"Output.pptx", SaveFormat::Pptx, pptxOptions);
presentation->Dispose();
Info
Эта опция помогает сократить время, необходимое для сохранения презентации в формате PPTX.Обновления прогресса сохранения в процентах
Интерфейс IProgressCallback используется через метод set_ProgressCallback, предоставляемый интерфейсом ISaveOptions и абстрактным классом SaveOptions. Назначьте реализацию IProgressCallback с помощью set_ProgressCallback, чтобы получать обновления прогресса сохранения в процентах. В следующих фрагментах кода показано, как использовать IProgressCallback.
class ExportProgressHandler : public IProgressCallback
{
public:
void Reporting(double progressValue)
{
// Используйте здесь значение процента выполнения.
int progress = static_cast<int>(progressValue);
Console::WriteLine(u"{0}% of the file has been converted.", progress);
}
};
auto saveOptions = MakeObject<PdfOptions>();
saveOptions->set_ProgressCallback(MakeObject<ExportProgressHandler>());
auto presentation = MakeObject<Presentation>(u"Sample.pptx");
presentation->Save(u"Output.pdf", SaveFormat::Pdf, saveOptions);
presentation->Dispose();
Info
Aspose разработала бесплатное приложение PowerPoint Splitter с использованием собственного API. Приложение позволяет разбить презентацию на несколько файлов, сохранив выбранные слайды в новые файлы PPTX или PPT.Часто задаваемые вопросы
Поддерживается ли «быстрое сохранение» (инкрементальное сохранение), при котором записываются только изменения?
Нет. При сохранении каждый раз создаётся полный целевой файл; инкрементальное «быстрое сохранение» не поддерживается.
Безопасно ли сохранять один и тот же объект Presentation из нескольких потоков?
Нет. Экземпляр Presentation не является потокобезопасным; сохраняйте его из одного потока.
Что происходит с гиперссылками и внешними связанными файлами при сохранении?
Гиперссылки сохраняются. Внешние связанные файлы (например, видео по относительным путям) не копируются автоматически — убедитесь, что указанные пути остаются доступными.
Можно ли задать/сохранить метаданные документа (Автор, Заголовок, Компания, Дата)?
Да. Стандартные свойства документа поддерживаются и будут записаны в файл при сохранении.