Сохранение презентаций в PHP
Обзор
Open Presentations in PHP описывает, как использовать класс Presentation для открытия презентации. В этой статье объясняется, как создавать и сохранять презентации. Класс Presentation содержит содержимое презентации. Независимо от того, создаёте ли вы презентацию с нуля или изменяете существующую, вам понадобится сохранить её после окончания работы. С Aspose.Slides для 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.Сохранение презентаций без обновления миниатюры
Метод 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.FAQ
Поддерживается ли «быстрое сохранение» (инкрементальное сохранение), при котором записываются только изменения?
Нет. При каждом сохранении создаётся полный целевой файл; инкрементальное «быстрое сохранение» не поддерживается.
Можно ли безопасно сохранять один и тот же объект Presentation из нескольких потоков?
Нет. Экземпляр Presentation не является потокобезопасным (/slides/ru/php-java/multithreading/); сохраняйте его из одного потока.
Что происходит с гиперссылками и внешними файлами при сохранении?
Гиперссылки сохраняются. Внешние файлы, связанные, например, видео по относительным путям, автоматически не копируются — убедитесь, что указанные пути остаются доступными.
Можно ли задавать/сохранять метаданные документа (Автор, Название, Компания, Дата)?
Да. Стандартные свойства документа поддерживаются и будут записаны в файл при сохранении.