Сохранение презентаций в 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();
}
ПРИМЕЧАНИЕ
Если при сохранении используется Zip64Mode.Never, будет выброшено исключение PptxException, если презентацию нельзя сохранить в формате ZIP32.Сохранение презентаций в формате 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();
}
Информация
Эта опция помогает сократить время, необходимое для сохранения презентации в формате PPTX.Сохранение прогресса в процентах
Отчёт о прогрессе сохранения настраивается через метод 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();
}
Информация
Aspose разработала бесплатное приложение PowerPoint Splitter на основе собственного API. Приложение позволяет разбить презентацию на несколько файлов, сохраняя выбранные слайды как новые файлы PPTX или PPT.Часто задаваемые вопросы
Поддерживается ли «быстрое сохранение» (инкрементальное сохранение), когда записываются только изменения?
Нет. При каждом сохранении создаётся полный файл назначения; инкрементальное «быстрое сохранение» не поддерживается.
Можно ли из разных потоков сохранять один и тот же объект Presentation?
Нет. Экземпляр Presentation не является потокобезопасным; сохраняйте его только из одного потока.
Что происходит с гиперссылками и внешними связанными файлами при сохранении?
Гиперссылки сохраняются. Внешние связанные файлы (например, видео по относительным путям) не копируются автоматически — обеспечьте доступность указанных путей.
Можно ли задавать/сохранять метаданные документа (Автор, Заголовок, Компания, Дата)?
Да. Поддерживаются стандартные свойства документа, которые будут записаны в файл при сохранении.