Gerenciar SmartArt em Apresentações PowerPoint Usando C++

Visão geral

SmartArt é um diagrama do PowerPoint composto por nós, formas de nó e um layout. Com Aspose.Slides para C++, você pode criar SmartArt, ler texto de seus nós, alterar seu layout, inspecionar nós ocultos, configurar layouts de organogramas e criar organogramas de imagens.

Obter texto de um objeto SmartArt

Um nó SmartArt pode conter uma ou mais formas. Para ler o texto visível, itere através de ISmartArt::get_AllNodes, então leia o ITextFrame retornado por ISmartArtShape::get_TextFrame.

auto presentation = System::MakeObject<Presentation>(u"sample.pptx");
auto slide = presentation->get_Slide(0);
auto shape = slide->get_Shape(0);

if (System::ObjectExt::Is<ISmartArt>(shape))
{
    auto smartArt = System::ExplicitCast<ISmartArt>(shape);

    for (int nodeIndex = 0; nodeIndex < smartArt->get_AllNodes()->get_Count(); nodeIndex++)
    {
        auto node = smartArt->get_AllNodes()->idx_get(nodeIndex);

        for (int shapeIndex = 0; shapeIndex < node->get_Shapes()->get_Count(); shapeIndex++)
        {
            auto nodeShape = node->get_Shape(shapeIndex);

            if (nodeShape->get_TextFrame() != nullptr)
            {
                System::Console::WriteLine(nodeShape->get_TextFrame()->get_Text());
            }
        }
    }
}

presentation->Dispose();

Alterar o tipo de layout de um objeto SmartArt

O layout do SmartArt controla como os nós são organizados e conectados. O exemplo a seguir cria um objeto SmartArt com o valor BasicBlockList de SmartArtLayoutType, altera para o valor BasicProcess e salva a apresentação.

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

auto smartArt = presentation->get_Slide(0)->get_Shapes()->AddSmartArt(
    10.0f, 10.0f, 400.0f, 300.0f, SmartArtLayoutType::BasicBlockList);

smartArt->set_Layout(SmartArtLayoutType::BasicProcess);

presentation->Save(u"ChangeSmartArtLayout_out.pptx", SaveFormat::Pptx);
presentation->Dispose();

Verificar se um nó SmartArt está oculto

ISmartArtNode::get_IsHidden indica se o nó está oculto no modelo de dados do SmartArt. Nós ocultos podem existir na estrutura mesmo quando o layout selecionado não os exibe como elementos visíveis do diagrama.

O exemplo a seguir adiciona um nó a um objeto SmartArt que usa o valor RadialCycle de SmartArtLayoutType e verifica o estado de ocultação do nó.

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

auto smartArt = presentation->get_Slide(0)->get_Shapes()->AddSmartArt(
    10.0f, 10.0f, 400.0f, 300.0f, SmartArtLayoutType::RadialCycle);

auto node = smartArt->get_AllNodes()->AddNode();
bool isHidden = node->get_IsHidden();

if (isHidden)
{
    System::Console::WriteLine(u"The node is hidden in the SmartArt data model.");
}

presentation->Save(u"CheckSmartArtHiddenProperty_out.pptx", SaveFormat::Pptx);
presentation->Dispose();

Obter ou definir o layout do organograma

Para diagramas SmartArt que utilizam um layout de organograma, ISmartArtNode::get_OrganizationChartLayout e ISmartArtNode::set_OrganizationChartLayout definem como os nós filhos são organizados sob um nó pai. Por exemplo, você pode definir os nós filhos para pendurar à esquerda, à direita ou em ambos os lados, dependendo do OrganizationChartLayoutType selecionado.

O exemplo a seguir cria um organograma e define o layout do primeiro nó para o valor LeftHanging de OrganizationChartLayoutType.

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

auto smartArt = presentation->get_Slide(0)->get_Shapes()->AddSmartArt(
    10.0f, 10.0f, 400.0f, 300.0f, SmartArtLayoutType::OrganizationChart);

auto rootNode = smartArt->get_Node(0);
rootNode->set_OrganizationChartLayout(OrganizationChartLayoutType::LeftHanging);

presentation->Save(u"OrganizationChartLayout_out.pptx", SaveFormat::Pptx);
presentation->Dispose();

Criar um organograma de imagens

Um organograma de imagens é um layout SmartArt projetado para diagramas hierárquicos que incluem marcadores de posição de imagem. Use o valor PictureOrganizationChart de SmartArtLayoutType ao adicionar o objeto SmartArt a um slide.

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

auto smartArt = presentation->get_Slide(0)->get_Shapes()->AddSmartArt(
    0.0f, 0.0f, 400.0f, 400.0f, SmartArtLayoutType::PictureOrganizationChart);

presentation->Save(u"PictureOrganizationChart_out.pptx", SaveFormat::Pptx);
presentation->Dispose();

Perguntas frequentes

O SmartArt oferece suporte a espelhamento ou inversão para idiomas RTL?

Sim. O método SmartArt::set_IsReversed altera a direção do diagrama de esquerda para a direita para direita para a esquerda, ou o inverso, quando o layout SmartArt selecionado suporta a reversão.

Como posso copiar um SmartArt para o mesmo slide ou para outra apresentação preservando a formatação?

Você pode clonar a forma SmartArt com ShapeCollection::AddClone ou clonar o slide inteiro que contém o SmartArt. Ambas as abordagens preservam o tamanho, a posição e a formatação.

Como faço para renderizar o SmartArt em uma imagem raster para visualização ou exportação para a web?

Renderize o slide ou a apresentação inteira para PNG ou JPEG. O SmartArt é renderizado como parte do slide.

Como posso encontrar um objeto SmartArt específico em um slide se houver vários?

Defina um valor distinto em Shape::set_AlternativeText ou Shape::set_Name na forma SmartArt, procure esse valor em BaseSlide::get_Shapes, e então verifique se a forma correspondente é um ISmartArt.