Управление SmartArt в презентациях PowerPoint с использованием PHP

Получить текст из объекта SmartArt

Теперь метод TextFrame был добавлен в класс SmartArtShape. Это свойство позволяет получать весь текст из SmartArt, если у него есть не только текст узлов. Следующий пример кода поможет получить текст из узла SmartArt.

  $pres = new Presentation("Presentation.pptx");
  try {
    $slide = $pres->getSlides()->get_Item(0);
    $smartArt = $slide->getShapes()->get_Item(0);
    $smartArtNodes = $smartArt->getAllNodes();
    foreach($smartArtNodes as $smartArtNode) {
      foreach($smartArtNode->getShapes() as $nodeShape) {
        if (!java_is_null($nodeShape->getTextFrame())) {
          echo($nodeShape->getTextFrame()->getText());
        }
      }
    }
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Изменить тип макета объекта SmartArt

Чтобы изменить тип макета SmartArt, выполните следующие шаги:

  • Создайте экземпляр класса Presentation.
  • Получите ссылку на слайд, используя его индекс.
  • Добавьте SmartArt BasicBlockList.
  • Измените LayoutType на BasicProcess.
  • Запишите презентацию в файл PPTX. В приведённом ниже примере мы добавили соединитель между двумя фигурами.
  $pres = new Presentation();
  try {
    # Добавить SmartArt BasicProcess
    $smart = $pres->getSlides()->get_Item(0)->getShapes()->addSmartArt(10, 10, 400, 300, SmartArtLayoutType::BasicBlockList);
    # Изменить LayoutType на BasicProcess
    $smart->setLayout(SmartArtLayoutType::BasicProcess);
    # Сохранение презентации
    $pres->save("ChangeSmartArtLayout_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Проверка свойства Hidden у объекта SmartArt

Обратите внимание: метод SmartArtNode::isHidden() возвращает true, если этот узел скрыт в модели данных. Чтобы проверить свойство скрытия любого узла SmartArt, выполните следующие шаги:

  • Создайте экземпляр класса Presentation.
  • Добавьте SmartArt RadialCycle.
  • Добавьте узел в SmartArt.
  • Проверьте свойство visibility.
  • Запишите презентацию в файл PPTX. В приведённом ниже примере мы добавили соединитель между двумя фигурами.
  $pres = new Presentation();
  try {
    # Добавить SmartArt BasicProcess
    $smart = $pres->getSlides()->get_Item(0)->getShapes()->addSmartArt(10, 10, 400, 300, SmartArtLayoutType::RadialCycle);
    # Добавить узел в SmartArt
    $node = $smart->getAllNodes()->addNode();
    # Проверить свойство isHidden
    $hidden = $node->isHidden();// Возвращает true

    if ($hidden) {
      # Выполнить некоторые действия или уведомления
    }
    # Сохранение презентации
    $pres->save("CheckSmartArtHiddenProperty_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Получить или установить тип организационной диаграммы

Методы SmartArtNode::getOrganizationChartLayout() и SmartArtNode::setOrganizationChartLayout(int) позволяют получить или задать тип организационной диаграммы, связанный с текущим узлом. Чтобы получить или задать тип организационной диаграммы, выполните следующие шаги:

  • Создайте экземпляр класса Presentation.
  • Добавьте SmartArt на слайд.
  • Получите или set the organization chart type.
  • Запишите презентацию в файл PPTX. В приведённом ниже примере мы добавили соединитель между двумя фигурами.
  $pres = new Presentation();
  try {
    # Добавить SmartArt BasicProcess
    $smart = $pres->getSlides()->get_Item(0)->getShapes()->addSmartArt(10, 10, 400, 300, SmartArtLayoutType::OrganizationChart);
    # Получить или установить тип организационной диаграммы
    $smart->getNodes()->get_Item(0)->setOrganizationChartLayout(OrganizationChartLayoutType::LeftHanging);
    # Сохранение презентации
    $pres->save("OrganizeChartLayoutType_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Создать диаграмму Picture Organization

Aspose.Slides for PHP via Java предоставляет простой API для создания диаграмм PictureOrganization простым способом. Чтобы создать диаграмму на слайде:

  1. Создайте экземпляр класса Presentation.
  2. Получите ссылку на слайд по его индексу.
  3. Добавьте диаграмму с данными по умолчанию и нужным типом (ChartType::PictureOrganizationChart).
  4. Запишите изменённую презентацию в файл PPTX

Следующий код используется для создания диаграммы.

  $pres = new Presentation("test.pptx");
  try {
    $smartArt = $pres->getSlides()->get_Item(0)->getShapes()->addSmartArt(0, 0, 400, 400, SmartArtLayoutType::PictureOrganizationChart);
    $pres->save("OrganizationChart.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Получить или установить состояние SmartArt

Чтобы изменить тип макета SmartArt, выполните следующие шаги:

  1. Создайте экземпляр класса Presentation.
  2. Добавьте SmartArt на слайд.
  3. Get или Set состояние диаграммы SmartArt.
  4. Запишите презентацию в файл PPTX.

Следующий код используется для создания диаграммы.

  # Создать экземпляр класса Presentation, представляющего файл PPTX
  $pres = new Presentation();
  try {
    # Добавить SmartArt BasicProcess
    $smart = $pres->getSlides()->get_Item(0)->getShapes()->addSmartArt(10, 10, 400, 300, SmartArtLayoutType::BasicProcess);
    # Получить или установить состояние диаграммы SmartArt
    $smart->setReversed(true);
    $flag = $smart->isReversed();
    # Сохранение презентации
    $pres->save("output.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

FAQ

Поддерживает ли SmartArt зеркальное отображение/реверсирование для RTL-языков?

Да. Метод setReversed переключает направление диаграммы (LTR/RTL), если выбранный тип SmartArt поддерживает реверс.

Как скопировать SmartArt на тот же слайд или в другую презентацию, сохранив форматирование?

Вы можете клонировать форму SmartArt через коллекцию фигур (ShapeCollection::addClone) или клонировать весь слайд, содержащий эту форму. Оба подхода сохраняют размер, положение и стили.

Как отобразить SmartArt в растровом изображении для предварительного просмотра или веб-экспорта?

Отрендерите слайд (или всю презентацию) в PNG/JPEG с помощью API, преобразующего слайды/презентации в изображения — SmartArt будет отрисован как часть слайда.

Как программно выбрать конкретный SmartArt на слайде, если их несколько?

Обычной практикой является использование альтернативного текста (Alt Text) или имени, и поиск фигуры по этому атрибуту в фигурах слайда. Затем проверьте тип, чтобы убедиться, что это SmartArt. Документация описывает типичные методы поиска и работы с фигурами.