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-fossVerificar 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 = 80Posso 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.