Применение или изменение макетов слайдов в PHP

Обзор

Макет слайда определяет расположение полей‑заполнителей и форматирование содержимого на слайде. Он управляет тем, какие заполнители доступны и где они отображаются. Макеты слайдов помогают быстро и последовательно создавать презентации — независимо от того, просты они или сложны. Некоторые из наиболее часто используемых макетов слайдов в PowerPoint:

Макет Titile Slide — содержит два текстовых заполнителя: один для заголовка и один для подзаголовка.

Макет Title and Content — имеет меньший заполнитель заголовка в верхней части и более крупный ниже для основного содержимого (текст, маркированные списки, диаграммы, изображения и др.).

Пустой макет — не содержит заполнителей, предоставляя полный контроль над созданием слайда с нуля.

Макеты слайдов являются частью шаблона слайда (slide master), который является верхнеуровневым слайдом, определяющим стили макетов для всей презентации. Вы можете получить доступ к макетам и изменять их через шаблон слайда — по типу, имени или уникальному идентификатору. Либо можно редактировать конкретный макет напрямую в презентации.

Для работы с макетами слайдов в Aspose.Slides for PHP можно использовать:

Добавление макетов слайдов в презентацию

Для настройки внешнего вида и структуры ваших слайдов может потребоваться добавить новые макеты в презентацию. Aspose.Slides for PHP позволяет проверить наличие нужного макета, при необходимости добавить его и использовать для вставки слайдов на основе этого макета.

  1. Создайте объект класса Presentation.
  2. Получите доступ к MasterLayoutSlideCollection.
  3. Проверьте, существует ли требуемый макет в коллекции. Если нет — добавьте нужный макет.
  4. Добавьте пустой слайд на основе только что созданного макета.
  5. Сохраните презентацию.

Ниже приведён пример кода PHP, демонстрирующий добавление макета слайда в презентацию PowerPoint:

// Создайте экземпляр класса Presentation, представляющего файл PowerPoint.
$presentation = new Presentation("Sample.pptx");
try {
    // Пройдитесь по типам макетов слайдов, чтобы выбрать макет слайда.
    $layoutSlides = $presentation->getMasters()->get_Item(0)->getLayoutSlides();
    $layoutSlide = null;
    if (!java_is_null($layoutSlides->getByType(SlideLayoutType::TitleAndObject))) {
        $layoutSlide = $layoutSlides->getByType(SlideLayoutType::TitleAndObject);
    } else {
        $layoutSlide = $layoutSlides->getByType(SlideLayoutType::Title);
    }

    if (java_is_null($layoutSlide)) {
        // Ситуация, когда презентация не содержит всех типов макетов.
        // Файл презентации содержит только типы макетов Blank и Custom.
        // Однако макеты слайдов с пользовательскими типами могут иметь узнаваемые имена,
        // например "Title", "Title and Content" и т.д., которые можно использовать для выбора макета слайда.
        // Вы также можете опираться на набор типов фигур‑заполнителей.
        // Например, слайд Title должен иметь только тип заполнителя Title и т.п.
        foreach($layoutSlides as $titleAndObjectLayoutSlide) {
            if (java_values($titleAndObjectLayoutSlide->getName()) == "Title and Object") {
                $layoutSlide = $titleAndObjectLayoutSlide;
                break;
            }
        }

        if (java_is_null($layoutSlide)) {
            foreach($layoutSlides as $titleLayoutSlide) {
                if (java_values($titleLayoutSlide->getName()) == "Title") {
                    $layoutSlide = $titleLayoutSlide;
                    break;
                }
            }

            if (java_is_null($layoutSlide)) {
                $layoutSlide = $layoutSlides->getByType(SlideLayoutType::Blank);
                if (java_is_null($layoutSlide)) {
                    $layoutSlide = $layoutSlides->add(SlideLayoutType::TitleAndObject, "Title and Object");
                }
            }
        }
    }

    // Добавьте пустой слайд, используя добавленный макет слайда.
    $presentation->getSlides()->insertEmptySlide(0, $layoutSlide);

    // Сохраните презентацию на диск.
    $presentation->save("output.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Удаление неиспользуемых макетов слайдов

Aspose.Slides предоставляет метод removeUnusedLayoutSlides класса Compress, позволяющий удалить ненужные и неиспользуемые макеты слайдов.

Следующий пример кода PHP показывает, как удалить макет слайда из презентации PowerPoint:

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

Добавление заполнителей в макеты слайдов

Aspose.Slides предоставляет метод LayoutSlide.getPlaceholderManager, который позволяет добавлять новые заполнители в макет слайда.

Этот менеджер содержит методы для следующих типов заполнителей:

Заполнитель PowerPoint Метод LayoutPlaceholderManager
Content addContentPlaceholder(float x, float y, float width, float height)
Content (Vertical) addVerticalContentPlaceholder(float x, float y, float width, float height)
Text addTextPlaceholder(float x, float y, float width, float height)
Text (Vertical) addVerticalTextPlaceholder(float x, float y, float width, float height)
Picture addPicturePlaceholder(float x, float y, float width, float height)
Chart addChartPlaceholder(float x, float y, float width, float height)
Table addTablePlaceholder(float x, float y, float width, float height)
SmartArt addSmartArtPlaceholder(float x, float y, float width, float height)
Media addMediaPlaceholder(float x, float y, float width, float height)
Online Image addOnlineImagePlaceholder(float x, float y, float width, float height)

Ниже показан PHP‑код, демонстрирующий добавление новых фигур‑заполнителей в пустой (Blank) макет слайда:

$presentation = new Presentation();
try {
    // Получить пустой макет слайда.
    $layout = $presentation->getLayoutSlides()->getByType(SlideLayoutType::Blank);

    // Получить менеджер заполнителей макетного слайда.
    $placeholderManager = $layout->getPlaceholderManager();

    // Добавить различные заполнители к пустому макету слайда.
    $placeholderManager->addContentPlaceholder(20, 20, 310, 270);
    $placeholderManager->addVerticalTextPlaceholder(350, 20, 350, 270);
    $placeholderManager->addChartPlaceholder(20, 310, 310, 180);
    $placeholderManager->addTablePlaceholder(350, 310, 350, 180);

    // Добавить новый слайд с пустым макетом.
    $newSlide = $presentation->getSlides()->addEmptySlide($layout);

    $presentation->save("Placeholders.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Результат:

The placeholders on the layout slide

Установка видимости нижнего колонтитула для макета слайда

В презентациях PowerPoint элементы нижнего колонтитула, такие как дата, номер слайда и пользовательский текст, могут отображаться или скрываться в зависимости от макета слайда. Aspose.Slides for PHP позволяет управлять видимостью этих заполнителей нижнего колонтитула. Это полезно, когда необходимо, чтобы некоторые макеты показывали информацию нижнего колонтитула, а другие оставались чистыми.

  1. Создайте объект класса Presentation.
  2. Получите ссылку на макет слайда по его индексу.
  3. Установите видимость заполнителя нижнего колонтитула слайда.
  4. Установите видимость заполнителя номера слайда.
  5. Установите видимость заполнителя даты/времени.
  6. Сохраните презентацию.

Пример кода PHP, показывающий, как задать видимость нижнего колонтитула слайда:

$presentation = new Presentation("Presentation.ppt");
try {
    $headerFooterManager = $presentation->getLayoutSlides()->get_Item(0)->getHeaderFooterManager();

    if (!$headerFooterManager->isFooterVisible()) {
        $headerFooterManager->setFooterVisibility(true);
    }

    if (!$headerFooterManager->isSlideNumberVisible()) {
        $headerFooterManager->setSlideNumberVisibility(true);
    }

    if (!$headerFooterManager->isDateTimeVisible()) {
        $headerFooterManager->setDateTimeVisibility(true);
    }

    $headerFooterManager->setFooterText("Footer text");
    $headerFooterManager->setDateTimeText("Date and time text");

    $presentation->save("Presentation.ppt", SaveFormat::Ppt);
} finally {
    $presentation->dispose();
}

Установка видимости нижних колонтитулов у дочерних слайдов

​В презентациях PowerPoint элементы нижнего колонтитула, такие как дата, номер слайда и пользовательский текст, могут быть управляемы на уровне шаблона слайда, чтобы обеспечить единообразие во всех макетах. Aspose.Slides for PHP позволяет задать видимость и содержимое этих заполнителей на шаблоне слайда и распространить эти настройки на все дочерние макеты.

  1. Создайте объект класса Presentation.
  2. Получите ссылку на шаблон слайда по его индексу.
  3. Сделайте видимыми все нижние колонтитулы шаблона и его дочерних макетов.
  4. Сделайте видимыми все номера слайдов шаблона и его дочерних макетов.
  5. Сделайте видимыми все заполнители даты/времени шаблона и его дочерних макетов.
  6. Сохраните презентацию.

Пример кода PHP, демонстрирующий эту операцию:

$presentation = new Presentation("presentation.ppt");
try {
    $headerFooterManager = $presentation->getMasters()->get_Item(0)->getHeaderFooterManager();

    $headerFooterManager->setFooterAndChildFootersVisibility(true);
    $headerFooterManager->setSlideNumberAndChildSlideNumbersVisibility(true);
    $headerFooterManager->setDateTimeAndChildDateTimesVisibility(true);

    $headerFooterManager->setFooterAndChildFootersText("Footer text");
    $headerFooterManager->setDateTimeAndChildDateTimesText("Date and time text");

    $presentation->save("Output.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

FAQ

В чём разница между шаблоном слайда и макетом слайда?

Шаблон слайда задаёт общую тему и форматирование по умолчанию, тогда как макеты слайдов определяют конкретные расположения заполнителей для разных типов содержимого.

Можно ли скопировать макет слайда из одной презентации в другую?

Да, можно клонировать макет слайда из коллекции макетов одной презентации (доступно через метод getLayoutSlides) и вставить его в другую презентацию с помощью метода addClone.

Что происходит, если удалить макет слайда, который всё ещё используется?

Если попытаться удалить макет, на который ссылается хотя бы один слайд, Aspose.Slides выбросит исключение PptxEditException. Чтобы избежать этого, используйте removeUnusedLayoutSlides, который безопасно удалит только неиспользуемые макеты.