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

Обзор

Открыть презентации в PHP описал, как использовать класс Presentation для открытия презентации. Эта статья объясняет, как создавать и сохранять презентации. Класс Presentation содержит содержимое презентации. Независимо от того, создаёте ли вы презентацию с нуля или изменяете существующую, вы захотите сохранить её после завершения работы. С помощью Aspose.Slides for PHP вы можете сохранять в файл или поток. Эта статья объясняет различные способы сохранения презентации.

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

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

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

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

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

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

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

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

$presentation = new Presentation();
try {
    $presentation->getViewProperties()->setLastView(ViewType::SlideMasterView);
    $presentation->save("SlideMasterView.pptx", 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.

$options = new PptxOptions();
$options->setConformance(Conformance::Iso29500_2008_Strict);

// Создайте экземпляр класса Presentation, представляющего файл презентации.
$presentation = new Presentation();
try {
    // Сохраните презентацию в строгом формате Office Open XML.
    $presentation->save("StrictOfficeOpenXml.pptx", 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:

$pptxOptions = new PptxOptions();
$pptxOptions->setZip64Mode(Zip64Mode::Always);

$presentation = new Presentation("Sample.pptx");
try {
    $presentation->save("OutputZip64.pptx", SaveFormat::Pptx, $pptxOptions);
} finally {
    $presentation->dispose();
}

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

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

Aspose.Slides предоставляет метод PptxOptions.setCompressionLevel, который позволяет задать уровень сжатия, используемый при сохранении презентации в формате Office Open XML.

Доступны следующие уровни сжатия:

  • None: Сжатие не применяется. Файлы сохраняются как есть.
  • Level1: Самое быстрое сжатие с наименьшим коэффициентом сжатия.
  • Level2: Быстрое сжатие с несколько лучшим коэффициентом сжатия, чем Level1.
  • Level3: Обеспечивает лучшее сжатие, чем Level2, с умеренным влиянием на время обработки.
  • Level4: Обеспечивает лучшее сжатие, чем Level3.
  • Level5: Обеспечивает улучшенное сжатие по сравнению с Level4 с дополнительным временем обработки.
  • Level6: Стандартное сжатие, которое обеспечивает хороший баланс между скоростью обработки и размером файла. Это уровень сжатия по умолчанию.
  • Level7: Обеспечивает лучшее сжатие, чем Level6, но с более медленной обработкой.
  • Level8: Обеспечивает лучшее сжатие, чем Level7.
  • Level9: Максимальное сжатие. Достигает наименьшего размера файла, но требует самого длительного времени обработки.

Следующий пример демонстрирует, как сохранить презентацию в файл PPTX без сжатия:

$pptxOptions = new PptxOptions();
$pptxOptions->setCompressionLevel(CompressionLevel::None);

$presentation = new Presentation("Sample.pptx");
try {
    $presentation->save("Sample-out.pptx", SaveFormat::Pptx, $pptxOptions);
} finally {
    $presentation->dispose();
}

Этот пример показывает, как сохранить презентацию в файл PPTX с максимальным сжатием:

$pptxOptions = new PptxOptions();
$pptxOptions->setCompressionLevel(CompressionLevel::Level9);

$presentation = new Presentation("Sample.pptx");
try {
    $presentation->save("Sample-level9.pptx", SaveFormat::Pptx, $pptxOptions);
} finally {
    $presentation->dispose();
}

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

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

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

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

$pptxOptions = new PptxOptions();
$pptxOptions->setRefreshThumbnail(false);

$presentation = new Presentation("Sample.pptx");
try {
    $presentation->save("Output.pptx", SaveFormat::Pptx, $pptxOptions);
}
finally {
    $presentation->dispose();
}

Сохранение прогресса в процентах

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

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

class ExportProgressHandler {
    function reporting($progressValue) {
        // Используйте значение процента прогресса здесь.
        $progress = java("java.lang.Double")->valueOf($progressValue)->intValue();
        echo($progress . "% of the file has been converted.");
    }
}

$progressHandler = java_closure(new ExportProgressHandler(), null, java("com.aspose.slides.IProgressCallback"));

$saveOptions = new PdfOptions();
$saveOptions->setProgressCallback($progressHandler);

$presentation = new Presentation("Sample.pptx");
try {
    $presentation->save("Output.pdf", SaveFormat::Pdf, $saveOptions);
} finally {
    $presentation->dispose();
}

Часто задаваемые вопросы

Поддерживается ли «быстрое сохранение» (инкрементальное сохранение), когда записываются только изменения?
Нет. При каждом сохранении создаётся полный файл назначения; инкрементальное «быстрое сохранение» не поддерживается.

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

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

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