Gerenciar formas em apresentações usando Python
Visão geral
Este guia apresenta a manipulação de formas no Aspose.Slides para Python via .NET. Aprenda padrões práticos para encontrar formas (incluindo por Texto Alternativo), duplicar, excluir ou ocultar, reordenar, alinhar e espelhar, ler IDs e formatação baseada em layout, e exportar formas individuais para SVG usando as APIs Presentation e Shape.
Encontrar formas nos slides
O PowerPoint identifica as formas apenas por IDs internos. Atribua um Texto Alternativo único à forma de destino no PowerPoint, depois abra a apresentação com o Aspose.Slides para Python, percorra as formas do slide e selecione aquela cujo Texto Alternativo corresponda. O método find_shape implementa essa abordagem e retorna a forma correspondente.
import aspose.slides as slides
# Encontra uma forma em um slide pelo seu texto alternativo.
def find_shape(slide, alt_text):
for slide_shape in slide.shapes:
if slide_shape.alternative_text == alt_text:
return slide_shape
return None
# Instancia a classe Presentation que representa um arquivo de apresentação.
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
# Encontra a forma com Texto Alternativo "Shape1".
shape = find_shape(slide, "Shape1")
if shape is not None:
print("Shape name:", shape.name)
Clonar formas
Para clonar formas de um slide de origem para um novo slide no Aspose.Slides, siga estas etapas:
- Crie um Presentation a partir do arquivo de origem.
- Obtenha o slide de origem pelo índice e sua coleção de formas.
- Recupere um layout em branco do slide mestre.
- Adicione um slide vazio usando esse layout e obtenha suas formas.
- Clone as formas para o slide de destino.
- Salve a apresentação como PPTX.
O exemplo de código a seguir clona formas de um slide para outro.
import aspose.slides as slides
# Instancia a classe Presentation.
with slides.Presentation("sample.pptx") as presentation:
source_shapes = presentation.slides[0].shapes
blank_layout = presentation.masters[0].layout_slides.get_by_type(slides.SlideLayoutType.BLANK)
target_slide = presentation.slides.add_empty_slide(blank_layout)
target_shapes = target_slide.shapes
target_shapes.add_clone(source_shapes[1], 50, 150 + source_shapes[0].height)
target_shapes.add_clone(source_shapes[2])
target_shapes.insert_clone(0, source_shapes[0], 50, 150)
# Salva a apresentação no disco.
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Remover formas
O Aspose.Slides permite remover qualquer forma de um slide. Por exemplo, para excluir uma forma do primeiro slide pelo seu Texto Alternativo, siga estas etapas:
- Crie uma instância de Presentation e carregue o arquivo.
- Acesse o primeiro slide da coleção de slides.
- Encontre a forma pelo valor do Texto Alternativo.
- Remova a forma da coleção de formas do slide.
- Salve a apresentação no disco no formato PPTX.
import aspose.slides as slides
# Encontra uma forma em um slide pelo seu texto alternativo.
def find_shape(slide, alt_text):
for slide_shape in slide.shapes:
if slide_shape.alternative_text == alt_text:
return slide_shape
return None
# Instancia a classe Presentation que representa um arquivo de apresentação.
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
# Encontra a forma com Texto Alternativo "User Defined".
shape = find_shape(slide, "User Defined")
# Remove a forma.
slide.shapes.remove(shape)
# Salva a apresentação no disco.
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Ocultar formas
O Aspose.Slides permite ocultar qualquer forma em um slide. Por exemplo, para ocultar uma forma no primeiro slide pelo seu Texto Alternativo, siga estas etapas:
- Crie uma instância de Presentation e carregue o arquivo.
- Acesse o primeiro slide da coleção de slides.
- Encontre a forma pelo valor do Texto Alternativo.
- Oculte a forma.
- Salve a apresentação no disco em formato PPTX.
# Encontra uma forma em um slide pelo seu texto alternativo.
def find_shape(slide, alt_text):
for slide_shape in slide.shapes:
if slide_shape.alternative_text == alt_text:
return slide_shape
return None
# Instancia a classe Presentation que representa um arquivo de apresentação.
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
# Encontra a forma com Texto Alternativo "User Defined".
shape = find_shape(slide, "User Defined")
# Oculta a forma.
shape.hidden = True
# Salva a apresentação no disco.
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Alterar a ordem das formas
O Aspose.Slides permite que os desenvolvedores reordenem formas (alterem sua ordem Z). O reordenamento determina qual forma aparece à frente ou atrás. Por exemplo, para reordenar duas formas no primeiro slide, siga os passos abaixo:
- Crie uma instância da classe Presentation.
- Acesse o primeiro slide.
- Adicione a primeira forma (por exemplo, um retângulo).
- Adicione a segunda forma (por exemplo, um triângulo).
- Reordene as formas movendo a segunda forma para a primeira posição na coleção.
- Salve a apresentação no disco.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
# Adiciona duas formas ao slide.
shape1 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 20, 20, 200, 150)
shape2 = slide.shapes.add_auto_shape(slides.ShapeType.TRIANGLE, 20, 200, 200, 150)
# Move a segunda forma para a primeira posição.
slide.shapes.reorder(0, shape2)
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Obter o ID de forma Interop
O Aspose.Slides permite obter o identificador exclusivo de uma forma no escopo do slide, ao contrário da propriedade unique_id, que é única em toda a apresentação. A propriedade office_interop_shape_id está disponível na classe Shape. Seu valor corresponde ao Id do objeto Microsoft.Office.Interop.PowerPoint.Shape. Um trecho de código de exemplo é mostrado abaixo.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
# Obtém o identificador exclusivo da forma dentro do slide.
officeInteropShapeId = presentation.slides[0].shapes[0].office_interop_shape_id
Definir o texto alternativo para formas
O Aspose.Slides permite que os desenvolvedores definam texto alternativo para qualquer forma. Você pode usar o texto alternativo para identificar e localizar formas em uma apresentação. A propriedade de texto alternativo pode ser lida e escrita tanto pelo Aspose.Slides quanto pelo Microsoft PowerPoint. Ao marcar formas com essa propriedade, você pode posteriormente removê‑las, ocultá‑las ou reordená‑las em um slide.
Para definir o texto alternativo de uma forma, siga estas etapas:
- Crie uma instância da classe Presentation.
- Acesse o primeiro slide.
- Adicione uma forma ao slide.
- Defina o texto alternativo.
- Salve a apresentação no disco.
import aspose.slides as slides
# Instancia a classe Presentation que representa um arquivo PPTX.
with slides.Presentation() as presentation:
slide = presentation.slides[0]
# Adiciona uma forma.
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 40, 150, 50)
# Define o texto alternativo para a forma.
shape.alternative_text = "User Defined"
# Salva a apresentação no disco.
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Acessar formatos de layout para formas
O Aspose.Slides oferece uma API simples para acessar formatos de layout de formas. Esta seção demonstra como acessar os formatos de layout.
import aspose.slides as slides
with slides.Presentation(folder_path + "sample.pptx") as presentation:
for layout_slide in presentation.layout_slides:
fill_formats = list(map(lambda shape: shape.fill_format, layout_slide.shapes))
line_formats = list(map(lambda shape: shape.line_format, layout_slide.shapes))
Renderizar formas como SVG
O Aspose.Slides suporta renderização de formas como SVG. O método write_as_svg (e suas sobrecargas) na classe Shape permite salvar o conteúdo de uma forma como uma imagem SVG. O trecho de código abaixo mostra como exportar uma forma para um arquivo SVG.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
with open("output.svg", "wb") as image_stream:
# Obtém a primeira forma no primeiro slide.
shape = presentation.slides[0].shapes[0]
shape.write_as_svg(image_stream)
Alinhar forma
Usando o método align_shape na classe SlidesUtil, você pode:
- Alinhar formas em relação às margens de um slide (veja o Exemplo 1).
- Alinhar formas em relação umas às outras (veja o Exemplo 2).
A enumeração ShapesAlignmentType define as opções de alinhamento disponíveis.
Exemplo 1
Este código Python mostra como alinhar as formas com índices 1, 2 e 4 à borda superior do slide:
import aspose.slides as slides
align_type = slides.ShapesAlignmentType.ALIGN_TOP
slide_indices = [1, 2, 4]
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
slides.util.SlideUtil.align_shapes(align_type, True, slide, slide_indices)
Exemplo 2
Este exemplo Python mostra como alinhar todas as formas em uma coleção em relação à forma mais baixa da coleção:
import aspose.slides as slides
align_type = slides.ShapesAlignmentType.ALIGN_BOTTOM
with slides.Presentation("sample.pptx") as presentation:
slides.util.SlideUtil.align_shapes(align_type, False, presentation.slides[0])
Propriedades de espelhamento
No Aspose.Slides, a classe ShapeFrame fornece controle sobre o espelhamento horizontal e vertical das formas por meio das propriedades flip_h e flip_v. Ambas as propriedades são do tipo NullableBool, permitindo valores TRUE para indicar espelhamento, FALSE para nenhum espelhamento ou NOT_DEFINED para usar o comportamento padrão. Esses valores são acessíveis a partir do Frame de uma forma.
Para modificar as configurações de espelhamento, uma nova instância de ShapeFrame é construída com a posição e o tamanho atuais da forma, os valores desejados para flip_h e flip_v e o ângulo de rotação. Atribuir essa instância ao Frame da forma e salvar a apresentação aplica as transformações de espelhamento e as grava no arquivo de saída.
Suponha que temos um arquivo sample.pptx no qual o primeiro slide contém uma única forma com configurações de espelhamento padrão, como mostrado abaixo.

O exemplo de código a seguir obtém as propriedades de espelhamento atuais da forma e a espelha tanto horizontal quanto verticalmente.
with slides.Presentation("sample.pptx") as presentation:
shape = presentation.slides[0].shapes[0]
# Recupera a propriedade de espelhamento horizontal da forma.
horizontal_flip = shape.frame.flip_h
print("Horizontal flip:", horizontal_flip)
# Recupera a propriedade de espelhamento vertical da forma.
vertical_flip = shape.frame.flip_v
print("Vertical flip:", vertical_flip)
x, y = shape.frame.x, shape.frame.y
width, height = shape.frame.width, shape.frame.height
flip_h, flip_v = slides.NullableBool.TRUE, slides.NullableBool.TRUE # Espelha horizontalmente e verticalmente.
rotation = shape.frame.rotation
shape.frame = slides.ShapeFrame(x, y, width, height, flip_h, flip_v, rotation)
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
O resultado:

FAQ
Posso combinar formas (união/interseção/subtração) em um slide como em um editor de desktop?
Não existe uma API de operação booleana integrada. Você pode aproximar isso construindo o contorno desejado por conta própria — por exemplo, calcular a geometria resultante (via GeometryPath) e criar uma nova forma com esse contorno, opcionalmente removendo as originais.
Como posso controlar a ordem de empilhamento (z-order) para que uma forma permaneça sempre “no topo”?
Altere a ordem de inserção/movimento dentro da coleção de shapes do slide. Para resultados previsíveis, finalize a ordem Z após todas as outras modificações do slide.
Posso “travar” uma forma para impedir que usuários a editem no PowerPoint?
Sim. Defina os flags de proteção a nível de forma (por exemplo, bloquear seleção, movimentação, redimensionamento, edição de texto). Se necessário, reflita as restrições no mestre ou no layout. Observe que isso é proteção ao nível da UI, não um recurso de segurança; para proteção mais forte, combine com restrições a nível de arquivo, como recomendações de somente‑leitura ou senhas (read‑only recommendations or passwords).