Hur man lägger till former i PowerPoint med Python

Hur man lägger till former i PowerPoint med Python

Aspose.Slides FOSS för Python stöder att lägga till AutoShapes, Tables, Connectors och PictureFrames till presentationsbilder. Alla formtyper läggs till via slide.shapes-samlingen.

Steg-för-steg-guide

Steg 1: Installera paketet

pip install aspose-slides-foss

Verifiera installationen:

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

Steg 2: Skapa en presentation

Använd alltid Presentation som en kontext‑hanterare.

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)

Steg 3: Lägg till en AutoShape

slide.shapes.add_auto_shape(shape_type, x, y, width, height) placerar en form på den angivna positionen och storleken (alla i punkter). Använd ShapeType‑konstanter för att välja formen.

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)

Steg 4: Lägg till en tabell

slide.shapes.add_table(x, y, col_widths, row_heights) skapar en tabell på den angivna positionen. Kolumnbredder och radhöjder är listor med punktvärden.

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)

Steg 5: Lägg till en anslutning

Kopplingar länkar två former visuellt. Skapa formerna först, lägg sedan till en koppling och ange dess start- och slutanslutningspunkter.

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)

Anslutningsplatsindex är numrerade 0–3 för en rektangel: top=0, left=1, bottom=2, right=3.


Steg 6: Lägg till en bildram

Bädda in en bild och lägg till den på bilden som en PictureFrame. Läs först bildens byte, lägg till dem i presentationens bildsamling och skapa sedan ramen.

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)

Vanliga problem och lösningar

Formen visas utanför det synliga bildområdet

Slides är 720 × 540 punkter som standard. Värden för x eller y utanför dessa gränser placerar formen utanför bilden. Behåll x < 720 och y < 540, och säkerställ x + width <= 720 och y + height <= 540.

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

add_auto_shape() returnerar shape‑objektet direkt. Om du ser None, kontrollera att du inte kastar bort returvärdet.

Tabellcellens text är tom efter tilldelning

Den korrekta egenskapen är .text_frame.text (inte .text direkt på cellen). Få åtkomst till celler som table.rows[row_index][col_index].text_frame.text = "value".


Vanliga frågor

Hur många former kan jag lägga till på en bild?

Det finns ingen begränsning som påläggs av biblioteket. Praktiska begränsningar beror på filstorlek och renderingskapaciteten hos din mål‑PPTX‑visare.

Kan jag ändra en formens position efter att ha lagt till den?

Ja. Shape‑objektet som returneras av add_auto_shape() har x, y, width och height egenskaper som du kan ställa in:

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

Kan jag ange färgen på formens kontur (ram)?

Ja, via 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)

Är diagram stödda?

Nej. Diagram, SmartArt och OLE‑objekt är inte implementerade i den här utgåvan och ger NotImplementedError.


Se även

 Svenska