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

Aspose.Slides позволяет получать доступ к слайдам двумя способами: по индексу и по идентификатору.

Доступ к слайду по индексу

Все слайды в презентации располагаются численно в порядке их позиции, начиная с 0. Первый слайд доступен по индексу 0; второй — по индексу 1; и т.д.

Класс Presentation, представляющий файл презентации, открывает все слайды как коллекцию ISlideCollection (коллекцию объектов ISlide). Этот PHP‑код показывает, как получить доступ к слайду по его индексу:

  # Создает объект Presentation, представляющий файл презентации
  $pres = new Presentation("demo.pptx");
  try {
    # Получает слайд по его индексу
    $slide = $pres->getSlides()->get_Item(0);
  } finally {
    $pres->dispose();
  }

Доступ к слайду по идентификатору

Каждому слайду в презентации присвоен уникальный идентификатор. Вы можете использовать метод getSlideById (предоставленный классом Presentation), чтобы обратиться к этому идентификатору. Этот PHP‑код показывает, как передать действительный идентификатор слайда и получить доступ к нему через метод getSlideById:

  # Создаёт объект Presentation, представляющий файл презентации
  $pres = new Presentation("demo.pptx");
  try {
    # Получает ID слайда
    $id = $pres->getSlides()->get_Item(0)->getSlideId();
    # Получает слайд по его ID
    $slide = $pres->getSlideById($id);
  } finally {
    $pres->dispose();
  }

Изменение позиции слайда

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

  1. Создайте экземпляр класса Presentation.
  2. Получите ссылку на слайд (позицию которого нужно изменить) по его индексу
  3. Установите новую позицию для слайда через свойство setSlideNumber.
  4. Сохраните изменённую презентацию.

Этот PHP‑код демонстрирует операцию, при которой слайд в позиции 1 перемещается в позицию 2:

  # Создаёт объект Presentation, представляющий файл презентации
  $pres = new Presentation("Presentation.pptx");
  try {
    # Получает слайд, позицию которого нужно изменить
    $sld = $pres->getSlides()->get_Item(0);
    # Устанавливает новую позицию для слайда
    $sld->setSlideNumber(2);
    # Сохраняет изменённую презентацию
    $pres->save("helloworld_Pos.pptx", SaveFormat::Pptx);
  } finally {
    $pres->dispose();
  }

Первый слайд стал вторым; второй стал первым. При изменении позиции слайда остальные слайды автоматически корректируются.

Установка номера слайда

С помощью свойства setFirstSlideNumber (предоставленного классом Presentation) можно задать новый номер первого слайда в презентации. Эта операция приводит к перерасчёту номеров остальных слайдов.

  1. Создайте экземпляр класса Presentation.
  2. Получите номер слайда.
  3. Установите номер слайда.
  4. Сохраните изменённую презентацию.

Этот PHP‑код демонстрирует операцию, при которой номер первого слайда задаётся как 10:

  # Создаёт объект Presentation, представляющий файл презентации
  $pres = new Presentation("HelloWorld.pptx");
  try {
    # Получает номер слайда
    $firstSlideNumber = $pres->getFirstSlideNumber();
    # Устанавливает номер слайда
    $pres->setFirstSlideNumber(10);
    # Сохраняет изменённую презентацию
    $pres->save("Set_Slide_Number_out.pptx", SaveFormat::Pptx);
  } finally {
    $pres->dispose();
  }

Если вы хотите пропустить первый слайд, можно начать нумерацию со второго слайда (и скрыть нумерацию для первого) следующим образом:

  $presentation = new Presentation();
  try {
    $layoutSlide = $presentation->getLayoutSlides()->getByType(SlideLayoutType::Blank);
    $presentation->getSlides()->addEmptySlide($layoutSlide);
    $presentation->getSlides()->addEmptySlide($layoutSlide);
    $presentation->getSlides()->addEmptySlide($layoutSlide);
    # Устанавливает номер первого слайда презентации
    $presentation->setFirstSlideNumber(0);
    # Отображает номера всех слайдов
    $presentation->getHeaderFooterManager()->setAllSlideNumbersVisibility(true);
    # Скрывает номер первого слайда
    $presentation->getSlides()->get_Item(0)->getHeaderFooterManager()->setSlideNumberVisibility(false);
    # Сохраняет изменённую презентацию
    $presentation->save("output.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($presentation)) {
      $presentation->dispose();
    }
  }

FAQ

Совпадает ли номер слайда, видимый пользователем, с нулевой базой индекса коллекции?

Номер, отображаемый на слайде, может начинаться с произвольного значения (например, 10) и не обязан совпадать с индексом; взаимосвязь управляется настройкой first slide number презентации.

Влияют ли скрытые слайды на индексацию?

Да. Скрытый слайд остаётся в коллекции и учитывается при индексации; «скрытый» относится к отображению, а не к его позиции в коллекции.

Меняется ли индекс слайда, когда добавляются или удаляются другие слайды?

Да. Индексы всегда отражают текущий порядок слайдов и пересчитываются при вставке, удалении и перемещении.