Gerenciar SmartArt em Apresentações PowerPoint usando Python
Visão geral
SmartArt é um diagrama do PowerPoint composto por nós, formas de nó e um layout. Com Aspose.Slides para Python via Java, você pode criar SmartArt, ler texto de seus nós, alterar seu layout, inspecionar nós ocultos, configurar layouts de organograma e criar organogramas com imagens.
Obter texto de um objeto SmartArt
Um nó SmartArt pode conter uma ou mais formas. Para ler o texto das formas do nó, itere através de SmartArt.getAllNodes, então leia o TextFrame retornado por SmartArtShape.getTextFrame.
O exemplo requer uma apresentação com pelo menos um slide e um objeto SmartArt como a primeira forma nesse slide. Ele imprime cada quadro de texto disponível no console.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SmartArt
presentation = Presentation("sample.pptx")
try:
slide = presentation.getSlides().get_Item(0)
shape = slide.getShapes().get_Item(0)
if isinstance(shape, SmartArt):
smart_art = shape
for node in smart_art.getAllNodes():
for node_shape in node.getShapes():
if node_shape.getTextFrame() is not None:
print(node_shape.getTextFrame().getText())
finally:
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 SmartArtLayoutType BasicBlockList, altera para o valor BasicProcess e salva a apresentação. A posição e o tamanho passados para ShapeCollection.addSmartArt são medidos em pontos. Use SmartArt.setLayout para mudar o layout.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArtLayoutType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
smart_art = slide.getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.BasicBlockList)
smart_art.setLayout(SmartArtLayoutType.BasicProcess)
presentation.save("ChangeSmartArtLayout.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Verificar se um nó SmartArt está oculto
SmartArtNode.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 SmartArtLayoutType RadialCycle e verifica o estado oculto do nó adicionado. Ele imprime uma mensagem se o nó estiver oculto e salva o diagrama.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArtLayoutType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
smart_art = slide.getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.RadialCycle)
node = smart_art.getAllNodes().addNode()
is_hidden = node.isHidden()
if is_hidden:
print("The node is hidden in the SmartArt data model.")
presentation.save("CheckSmartArtHiddenProperty.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Obter ou definir o layout do organograma
Para diagramas SmartArt que usam um layout de organograma, SmartArtNode.getOrganizationChartLayout e SmartArtNode.setOrganizationChartLayout definem como os nós filhos são organizados sob um nó pai. Por exemplo, você pode definir que os nós filhos pendam à esquerda, à direita ou a ambos os lados, dependendo do OrganizationChartLayoutType selecionado.
O exemplo a seguir cria um organograma e define o layout para o primeiro nó como o valor OrganizationChartLayoutType LeftHanging. O índice baseado em zero 0 seleciona o primeiro nó de nível superior; seus nós filhos usam o arranjo selecionado. A apresentação modificada é então salva.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import OrganizationChartLayoutType, Presentation, SaveFormat, SmartArtLayoutType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
smart_art = slide.getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.OrganizationChart)
root_node = smart_art.getNodes().get_Item(0)
root_node.setOrganizationChartLayout(OrganizationChartLayoutType.LeftHanging)
presentation.save("OrganizationChartLayout.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Criar um organograma com imagem
Um organograma com imagem é um layout SmartArt projetado para diagramas hierárquicos que incluem marcadores de posição de imagem. Use o valor SmartArtLayoutType PictureOrganizationChart ao adicionar o objeto SmartArt a um slide. Este exemplo salva um diagrama com marcadores de posição de imagem; ele não preenche os marcadores com imagens.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArtLayoutType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
smart_art = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.PictureOrganizationChart)
presentation.save("PictureOrganizationChart.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Converter diagramas legados em grupos de formas
Ao modernizar uma apresentação existente, pode ser necessário atualizar um organograma criado originalmente no PowerPoint 97–2003. Aspose.Slides representa esses diagramas legados como objetos LegacyDiagram. Use LegacyDiagram.convertToGroupShape para converter um diagrama em um grupo de formas, permitindo editar elementos visuais individuais. Consulte a Referência da API LegacyDiagram para detalhes.
A conversão adiciona um novo grupo à coleção de formas sem remover o diagrama original. Após a conversão bem‑sucedida, remova o original com ShapeCollection.remove para evitar conteúdo duplicado. Colete os diagramas legados em uma lista antes de convertê‑los, de modo que a adição e remoção de formas não interrompa a iteração.
O exemplo a seguir abre uma apresentação, procura em cada slide, converte os diagramas em grupos de formas e salva a apresentação atualizada como PPTX.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LegacyDiagram, Presentation, SaveFormat
presentation = Presentation("legacy-diagrams.ppt")
try:
for slide in presentation.getSlides():
legacy_diagrams = []
for shape in slide.getShapes():
if isinstance(shape, LegacyDiagram):
legacy_diagrams.append(shape)
for legacy_diagram in legacy_diagrams:
group_shape = legacy_diagram.convertToGroupShape()
if group_shape is not None:
slide.getShapes().remove(legacy_diagram)
presentation.save("modernized.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
A apresentação salva contém grupos de formas editáveis no lugar dos diagramas legados convertidos, sem diagramas originais restantes ao lado. Abra o PPTX no PowerPoint para editar elementos individuais dentro de cada grupo, como texto, preenchimento ou posição.
Perguntas frequentes
O SmartArt suporta espelhamento ou inversão para idiomas RTL?
Sim. O método SmartArt.setReversed troca a direção do diagrama de esquerda‑para‑direita para direita‑para‑esquerda, ou vice‑versa, quando o layout SmartArt selecionado suporta reversão.
Como posso copiar o 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 todo o slide que contém o SmartArt. Ambas as abordagens preservam tamanho, posição e formatação.
Como renderizar o SmartArt para uma imagem raster para visualização ou exportação web?
Renderizar o slide ou a apresentação inteira para PNG ou JPEG. O SmartArt é renderizado como parte do slide.
Como encontrar um objeto SmartArt específico em um slide se houver vários?
Use Shape.setAlternativeText ou Shape.setName para atribuir um texto alternativo ou nome distintivo à forma SmartArt, procure esse valor em BaseSlide.getShapes e, em seguida, verifique se a forma correspondente é um SmartArt.