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

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

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

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

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

	// Путь к каталогу документов.
	const String templatePath = u"../templates/AddSlides.pptx";

	// Создаёт экземпляр класса Presentation
	SharedPtr<Presentation> pres = MakeObject<Presentation>(templatePath);

	// Получить ссылку на слайд по его индексу
	SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);

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

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

	// Путь к каталогу документов.
	const String templatePath = u"../templates/AddSlides.pptx";

	// Создаёт экземпляр класса Presentation
	SharedPtr<Presentation> pres = MakeObject<Presentation>(templatePath);

	// Получает ID слайда
	int id = pres->get_Slides()->idx_get(0)->get_SlideId();

	// Доступ к слайду по его ID
	SharedPtr<IBaseSlide> slide = pres->GetSlideById(id);

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

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

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

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

	// Путь к каталогу документов.
	const String templatePath = u"../templates/AddSlides.pptx";
	const String outPath = u"../out/ChangeSlidePosition.pptx";

	// Создаёт экземпляр класса Presentation
	SharedPtr<Presentation> pres = MakeObject<Presentation>(templatePath);

	// Получает слайд, позицию которого нужно изменить
	SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);

	// Устанавливает новую позицию для слайда
	slide->set_SlideNumber(2);

	// Сохраняет изменённую презентацию
	pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);

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

Задать номер слайда

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

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

Этот код C++ демонстрирует операцию, в которой номер первого слайда установлен в 10:

	// Путь к каталогу документов.
	const String outPath = u"../out/SetSlideNumber_out.pptx";
	const String templatePath = u"../templates/AccessSlides.pptx";

	//Создаёт экземпляр класса Presentation
	SharedPtr<Presentation> pres = MakeObject<Presentation>(templatePath);

	// Получает номер слайда
	int firstSlideNumber = pres->get_FirstSlideNumber();

	// Устанавливает номер слайда
	pres->set_FirstSlideNumber(2);
	
	// Сохраняет изменённую презентацию
	pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);

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

auto presentation = System::MakeObject<Presentation>();

auto layoutSlide = presentation->get_LayoutSlides()->GetByType(SlideLayoutType::Blank);

auto slides = presentation->get_Slides();
slides->AddEmptySlide(layoutSlide);
slides->AddEmptySlide(layoutSlide);
slides->AddEmptySlide(layoutSlide);

// Sets the number for the first presentation slide
presentation->set_FirstSlideNumber(0);

// Shows slide numbers for all slides
presentation->get_HeaderFooterManager()->SetAllSlideNumbersVisibility(true);

// Hides the slide number for the first slide
slides->idx_get(0)->get_HeaderFooterManager()->SetSlideNumberVisibility(false);

// Saves the modified presentation
presentation->Save(u"output.pptx", SaveFormat::Pptx);

FAQ

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

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

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

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

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

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