Como adicionar formas ao PowerPoint no Python

Como adicionar formas ao PowerPoint no Python

Aspose.Slides FOSS for Python supports adding AutoShapes, Tables, Connectors, and PictureFrames to presentation slides. All shape types are added through the slide.shapes coleção.

Guia passo a passo

Passo 1: Instalar o pacote

pip install aspose-slides-foss

Verificar a instalação:

import aspose.slides_foss as slides
print("Ready")

Passo 2: Crie uma apresentação

Usar sempre: Presentation como gestor de contexto.

import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat

with slides.Presentation() as prs:
    slide = prs.slides[0]
    # ... add shapes ...
    prs.save("output.pptx", SaveFormat.PPTX)

Passo 3: Adicionar um AutoShape

slide.shapes.add_auto_shape(shape_type, x, y, width, height) coloca uma forma na posição e tamanho dados (todos em pontos). Use ShapeType constantes para selecionar a forma.

import aspose.slides_foss as slides
from aspose.slides_foss import ShapeType
from aspose.slides_foss.export import SaveFormat

with slides.Presentation() as prs:
    slide = prs.slides[0]

    # Rectangle
    rect = slide.shapes.add_auto_shape(ShapeType.RECTANGLE, 50, 50, 300, 100)
    rect.add_text_frame("Rectangle shape")

    # Ellipse
    ellipse = slide.shapes.add_auto_shape(ShapeType.ELLIPSE, 400, 50, 200, 100)
    ellipse.add_text_frame("Ellipse shape")

    prs.save("autoshapes.pptx", SaveFormat.PPTX)

Passo 4: Adicionar uma tabela

slide.shapes.add_table(x, y, col_widths, row_heights) A largura das colunas e a altura das linhas são listas de valores pontuais.

import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat

with slides.Presentation() as prs:
    slide = prs.slides[0]

    col_widths = [150.0, 150.0, 150.0]
    row_heights = [40.0, 40.0, 40.0]
    table = slide.shapes.add_table(50, 200, col_widths, row_heights)

    # Set header row text
    headers = ["Product", "Units", "Revenue"]
    for col, text in enumerate(headers):
        table.rows[0][col].text_frame.text = text

    # Set data rows
    rows = [
        ["Widget A", "120", "$2,400"],
        ["Widget B", "85", "$1,700"],
    ]
    for row_idx, row_data in enumerate(rows):
        for col, text in enumerate(row_data):
            table.rows[row_idx + 1][col].text_frame.text = text

    prs.save("table.pptx", SaveFormat.PPTX)

Passo 5: Adicionar um conector

Conectores ligam duas formas visualmente. Crie as formas primeiro, depois adicione um conector e defina seus pontos de ligação inicial e final.

import aspose.slides_foss as slides
from aspose.slides_foss import ShapeType
from aspose.slides_foss.export import SaveFormat

with slides.Presentation() as prs:
    slide = prs.slides[0]

    box1 = slide.shapes.add_auto_shape(ShapeType.RECTANGLE, 50, 100, 150, 60)
    box1.add_text_frame("Start")

    box2 = slide.shapes.add_auto_shape(ShapeType.RECTANGLE, 350, 100, 150, 60)
    box2.add_text_frame("End")

    conn = slide.shapes.add_connector(ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10)
    conn.start_shape_connected_to = box1
    conn.start_shape_connection_site_index = 3  # right side of box1
    conn.end_shape_connected_to = box2
    conn.end_shape_connection_site_index = 1    # left side of box2

    prs.save("connector.pptx", SaveFormat.PPTX)

Os índices do local de conexão são numerados 03 para um retângulo: cima=0, esquerda=1, baixo=2, direita=3.


Passo 6: Adicionar um quadro de imagem

Incorporar uma imagem e adicioná-la ao slide como um PictureFrame.Leia os bytes da imagem primeiro, adicione-os à coleção de imagens da apresentação e crie o quadro.

import aspose.slides_foss as slides
from aspose.slides_foss import ShapeType
from aspose.slides_foss.export import SaveFormat

with slides.Presentation() as prs:
    with open("logo.png", "rb") as f:
        image_data = f.read()

    image = prs.images.add_image(image_data)

    slide = prs.slides[0]
    slide.shapes.add_picture_frame(
        ShapeType.RECTANGLE,  # bounding shape type
        50, 50,               # x, y in points
        200, 150,             # width, height in points
        image
    )

    prs.save("with-image.pptx", SaveFormat.PPTX)

Problemas comuns e soluções

Forma aparece fora da área de deslizamento visível

Os slides são 960 × 540 pontos por padrão. x ou a) y Para além desses limites, coloque a forma fora do diapositivo. x < 960 e a) y < 540, e assegurar a sua aplicação. x + width <= 960 e a) y + height <= 540.

AttributeError: 'NoneType' object has no attribute 'text_frame'

add_auto_shape() retorna o objeto de forma diretamente. Se você ver None, verifique se não está a descartar o valor de retorno.

Texto da célula de tabela está vazio após atribuição

A propriedade correta é: .text_frame.text (não .text Celas de acesso como: table.rows[row_index][col_index].text_frame.text = "value".


Perguntas Frequentes

Quantas formas posso adicionar a um slide?

Não há limite imposto pela biblioteca. Os limites práticos dependem do tamanho do arquivo e da capacidade de renderização do seu visor PPTX alvo.

Posso mudar a posição de uma forma depois de adicioná-la?

Sim, o objeto de forma devolvido por add_auto_shape() tem x, y, width, e height propriedades que pode definir:

shape.x = 100
shape.y = 200
shape.width = 400
shape.height = 80

Posso definir a forma contorno (borda) cor?

Sim, através do shape.line_format:

from aspose.slides_foss.drawing import Color
shape.line_format.fill_format.solid_fill_color.color = Color.from_argb(255, 200, 0, 0)

Os gráficos são suportados?

Não. Gráficos, SmartArt e objetos OLE não são implementados nesta edição e elevar NotImplementedError.


Ver também:

 Português