Операции low-code с презентациями в PHP
Обзор
Пространство имён aspose.slides предоставляет статические вспомогательные классы для распространённых операций с презентациями. Эти вспомогательные классы упаковывают часто используемые сценарии работы с объектной моделью в целевые методы, позволяя конвертировать или объединять файлы, обрабатывать элементы презентации, собирать фигуры и удалять неиспользуемый контент с меньшим объёмом кода.
Вспомогательные средства low‑code наиболее полезны, когда операция применяется к целому файлу или презентации и стандартный рабочий процесс соответствует вашим требованиям. Используйте полную объектную модель Aspose.Slides, когда требуется тонкая настройка отдельных слайдов, мастеров, макетов, фигур, параметров экспорта или отношений между элементами презентации.
Ниже представлена таблица с доступными вспомогательными средствами:
| Помощник | Для чего используется |
|---|---|
| Convert | Конвертация презентации в другой формат с помощью прямого вызова файл‑в‑файл. |
| Merger | Объединение полных файлов презентаций одинакового формата. |
| ForEach_ | Выполнение обратного вызова для каждого слайда, фигуры, абзаца или части текста. |
| Collect | Получение фигур из всей презентации для повторной обработки или анализа. |
| Compress | Удаление неиспользуемых мастеров и макетов и уменьшение объёма встроенных шрифтов. |
Конвертировать презентацию
Используйте Convert::autoByExtension, когда расширение выходного файла достаточно для выбора формата экспорта. Метод открывает исходную презентацию, определяет требуемый формат по пути к выходному файлу и записывает результат.
use aspose\slides\Convert;
Convert::autoByExtension("input.pptx", "output.pdf");
Класс Convert также предоставляет специализированные методы для вывода в PDF, SVG, JPEG, PNG и TIFF. Используйте полную объектную модель, когда необходимо просмотреть или изменить презентацию перед экспортом или настроить параметр экспорта, который не доступен через выбранный вспомогательный класс. Смотрите Конвертировать презентацию для рабочих процессов и параметров, специфичных для форматов.
Объединить презентации
Используйте Merger::process для комбинирования полных файлов презентаций одним вызовом. Входные презентации должны иметь один и тот же файловый формат.
use aspose\slides\Merger;
$inputFiles = ["part-1.pptx", "part-2.pptx"];
Merger::process($inputFiles, "merged.pptx");
Этот вспомогательный класс подходит, когда все слайды должны быть добавлены к одному результату без отдельного выбора или переназначения. Применяйте полную объектную модель, если нужно объединять выбранные слайды, применять мастер‑или макет‑назначения, явно сохранять разделы или согласовывать различный размер слайдов. См. Объединить презентации для этих сценариев.
Перебор элементов презентации
Класс ForEach_ вызывает обратный вызов для каждого запрошенного типа элемента презентации. Это избавляет от вложенных циклов по коллекциям и удобно для проверки или изменения формата по всей презентации.
В следующем примере используются ForEach_::slide, ForEach_::shape, ForEach_::paragraph и ForEach_::portion для инспекции соответствующих элементов:
use aspose\slides\ForEach_;
use aspose\slides\Presentation;
class SlideCallback {
public function invoke($slide, $index): void {
$slideIndex = java_values($index);
$shapeCount = java_values($slide->getShapes()->size());
echo sprintf("Slide %d: %d shapes", $slideIndex, $shapeCount) . PHP_EOL;
}
}
class ShapeCallback {
public function invoke($shape, $slide, $index): void {
$shapeIndex = java_values($index);
$slideType = java_values($slide->getClass()->getSimpleName());
$shapeName = java_values($shape->getName());
echo sprintf("Shape %d on %s: %s", $shapeIndex, $slideType, $shapeName) . PHP_EOL;
}
}
class ParagraphCallback {
public function invoke($paragraph, $slide, $index): void {
$paragraphIndex = java_values($index);
$slideType = java_values($slide->getClass()->getSimpleName());
$text = java_values($paragraph->getText());
echo sprintf("Paragraph %d on %s: %s", $paragraphIndex, $slideType, $text) . PHP_EOL;
}
}
class PortionCallback {
public function invoke($portion, $paragraph, $slide, $index): void {
$portionIndex = java_values($index);
$slideType = java_values($slide->getClass()->getSimpleName());
$text = java_values($portion->getText());
echo sprintf("Portion %d on %s: %s", $portionIndex, $slideType, $text) . PHP_EOL;
}
}
$presentation = new Presentation("input.pptx");
try {
$slideCallback = java_closure(new SlideCallback(), null, java('com.aspose.slides.ForEach_$ForEachSlideCallback'));
$shapeCallback = java_closure(new ShapeCallback(), null, java('com.aspose.slides.ForEach_$ForEachShapeCallback'));
$paragraphCallback = java_closure(new ParagraphCallback(), null, java('com.aspose.slides.ForEach_$ForEachParagraphCallback'));
$portionCallback = java_closure(new PortionCallback(), null, java('com.aspose.slides.ForEach_$ForEachPortionCallback'));
ForEach_::slide($presentation, $slideCallback);
ForEach_::shape($presentation, $shapeCallback);
ForEach_::paragraph($presentation, $paragraphCallback);
ForEach_::portion($presentation, $portionCallback);
} finally {
$presentation->dispose();
}
По умолчанию перебор фигур и текста по всей презентации охватывает обычные, мастер‑ и макет‑слайды. Перегрузки с параметром includeNotes позволяют также обрабатывать слайды с заметками. Используйте прямые циклы по коллекциям, когда важен порядок обхода, ранний выход, фильтрация до вызова обратного вызова или детальный контроль родитель‑дочерних связей.
Сбор фигур
Используйте Collect::shapes, когда нужна коллекция всех фигур в презентации, а не обратный вызов для каждой фигуры. Это полезно, если один и тот же набор будет отфильтрован, подсчитан или обработан более одного раза.
use aspose\slides\Collect;
use aspose\slides\Presentation;
$presentation = new Presentation("input.pptx");
try {
$shapes = Collect::shapes($presentation);
foreach ($shapes as $shape) {
$shapeName = java_values($shape->getName());
$shapeType = java_values($shape->getClass()->getSimpleName());
echo sprintf("%s: %s", $shapeName, $shapeType) . PHP_EOL;
}
} finally {
$presentation->dispose();
}
Применяйте ForEach_::shape вместо этого, когда каждую фигуру можно обработать сразу и нет необходимости сохранять собранный результат.
Сжатие содержимого презентации
Класс Compress может удалять неиспользуемые структурные элементы и уменьшать объём встроенных шрифтов:
- Compress::removeUnusedLayoutSlides удаляет макет‑слайды, которые не используют обычные слайды.
- Compress::removeUnusedMasterSlides удаляет мастер‑слайды, которые больше не нужны.
- Compress::compressEmbeddedFonts удаляет неиспользуемые символы из встроенных шрифтов.
use aspose\slides\Compress;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation("input.pptx");
try {
Compress::removeUnusedLayoutSlides($presentation);
Compress::removeUnusedMasterSlides($presentation);
Compress::compressEmbeddedFonts($presentation);
$presentation->save("compressed.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Сначала удаляйте неиспользуемые макеты, а затем неиспользуемые мастеры, чтобы мастер, ставший неиспользуемым после очистки макетов, также был удалён. Сохраняйте оптимизированную презентацию в новый файл, если позже могут понадобиться исходные мастеры, макеты или полный набор встроенных шрифтов. Подробности смотрите в статях Slide Master и Embedded Font.
Часто задаваемые вопросы
Когда следует использовать low‑code API вместо полной объектной модели?
Применяйте вспомогательные средства low‑code, когда стандартная операция относится к полному файлу или презентации и не требует детального контроля над отдельными элементами. Используйте полную объектную модель, если нужно выбрать конкретные слайды, управлять отношениями мастеров и макетов, проверять промежуточное состояние или настраивать поведение, не доступное через вспомогательный класс.
Может ли Merger объединять презентации разных файловых форматов?
Нет. Merger::process требует, чтобы входные презентации имели один и тот же формат. Сначала преобразуйте входные файлы в общий формат, например с помощью Convert::autoByExtension, а затем объедините полученные файлы.
**Обрабатывает ли ForEach_ мастера, макеты и слайды заметок?**
ForEach_::slide перебирает обычные слайды презентации. Операции ForEach_::shape, ForEach_::paragraph и ForEach_::portion по умолчанию включают обычные, мастер‑ и макет‑слайды. Используйте их перегрузки с параметром includeNotes, установленным в true, чтобы включить слайды заметок.
**В чём разница между ForEach_::shape и Collect::shapes?**
Используйте ForEach_::shape для непосредственной обработки каждой фигуры через обратный вызов. Применяйте Collect::shapes, когда нужен сохраняемый результат, который можно фильтровать, подсчитывать или обходить несколько раз.
Делает ли Compress всегда презентацию меньше?
Не обязательно. Результат зависит от того, содержит ли презентация неиспользуемые макеты, неиспользуемые мастеры или встроенные шрифты с неиспользуемыми символами. Если ни того, ни другого нет, соответствующие операции Compress могут не уменьшить размер файла.
**Сохраняются ли изменения, внесённые через ForEach_ или Compress, автоматически?**
Нет. Эти вспомогательные средства работают с загруженным объектом Presentation в памяти. После изменения элементов в обратном вызове ForEach_ или выполнения Compress вызовите Presentation::save, чтобы записать результат.