Formen in Präsentationen mit Python skalieren

Übersicht

Eine der häufigsten Fragen von Aspose.Slides for Python‑Kunden ist, wie man Formen so skaliert, dass bei einer Änderung der Foliengröße die Daten nicht abgeschnitten werden. Dieser kurze technische Beitrag zeigt, wie das geht.

Formen skalieren

Damit sich Formen bei einer Änderung der Foliengröße nicht verschieben, aktualisieren Sie die Position und die Abmessungen jeder Form, sodass sie zum neuen Folienlayout passen.

import aspose.slides as slides

    # Präsentationsdatei laden.
    with slides.Presentation("sample.pptx") as presentation:
        # Originalgröße der Folie abrufen.
        current_height = presentation.slide_size.size.height
        current_width = presentation.slide_size.size.width

        # Foliengröße ändern, ohne vorhandene Formen zu skalieren.
        presentation.slide_size.set_size(slides.SlideSizeType.A4_PAPER, slides.SlideSizeScaleType.DO_NOT_SCALE)

        # Neue Foliengröße abrufen.
        new_height = presentation.slide_size.size.height
        new_width = presentation.slide_size.size.width

        height_ratio = new_height / current_height
        width_ratio = new_width / current_width

        # Formen auf jeder Folie skalieren und neu positionieren.
        for slide in presentation.slides:
            for shape in slide.shapes:
                # Größe der Form skalieren.
                shape.height = shape.height * height_ratio
                shape.width = shape.width * width_ratio

                # Position der Form skalieren.
                shape.y = shape.y * height_ratio
                shape.x = shape.x * width_ratio

    presentation.save("output.pptx", slides.export.SaveFormat.PPTX)

Verwenden Sie den folgenden Code, um Folien mit Tabellen zu skalieren. Bei Tabellen ist das Setzen von Breite oder Höhe ein Sonderfall: Sie müssen die einzelnen Zeilenhöhen und Spaltenbreiten anpassen, um die Gesamtabmessungen der Tabelle zu ändern.

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    # Originale Foliengröße abrufen.
    current_height = presentation.slide_size.size.height
    current_width = presentation.slide_size.size.width

    # Foliengröße ändern, ohne vorhandene Formen zu skalieren.
    presentation.slide_size.set_size(slides.SlideSizeType.A4_PAPER, slides.SlideSizeScaleType.DO_NOT_SCALE)

    # Neue Foliengröße abrufen.
    new_height = presentation.slide_size.size.height
    new_width = presentation.slide_size.size.width

    height_ratio = new_height / current_height
    width_ratio = new_width / current_width

    for master in presentation.masters:
        for shape in master.shapes:
            # Formgröße skalieren.
            shape.height = shape.height * height_ratio
            shape.width = shape.width * width_ratio

            # Formposition skalieren.
            shape.y = shape.y * height_ratio
            shape.x = shape.x * width_ratio

        for layout_slide in master.layout_slides:
            for shape in layout_slide.shapes:
                # Formgröße skalieren.
                shape.height = shape.height * height_ratio
                shape.width = shape.width * width_ratio

                # Formposition skalieren.
                shape.y = shape.y * height_ratio
                shape.x = shape.x * width_ratio

    for slide in presentation.slides:
        for shape in slide.shapes:
            # Formgröße skalieren.
            shape.height = shape.height * height_ratio
            shape.width = shape.width * width_ratio

            # Formposition skalieren.
            shape.y = shape.y * height_ratio
            shape.x = shape.x * width_ratio

            if type(shape) is slides.Table:
                for row in shape.rows:
                    row.minimal_height = row.minimal_height * height_ratio
                for column in shape.columns:
                    column.width = column.width * width_ratio

    presentation.save("output.pptx", slides.export.SaveFormat.PPTX)

FAQ

Warum werden Formen nach dem Skalieren einer Folie verzerrt oder abgeschnitten?

Beim Skalieren einer Folie behalten Formen ihre ursprüngliche Position und Größe, sofern die Skalierung nicht explizit geändert wird. Das kann dazu führen, dass Inhalte abgeschnitten oder Formen missaligned werden.

Funktioniert der bereitgestellte Code für alle Formtypen?

Das Basisbeispiel funktioniert für die meisten Formtypen (Textfelder, Bilder, Diagramme usw.). Bei Tabellen müssen Sie jedoch Zeilen und Spalten separat behandeln, da Höhe und Breite einer Tabelle durch die Abmessungen der einzelnen Zellen bestimmt werden.

Wie skaliere ich Tabellen beim Skalieren einer Folie?

Sie müssen alle Zeilen und Spalten der Tabelle durchlaufen und deren Höhe und Breite proportional anpassen, wie im zweiten Codebeispiel gezeigt.

Funktioniert dieses Skalieren auch für Master‑Folien und Layout‑Folien?

Ja, Sie sollten außerdem durch Masterfolien und Layoutfolien iterieren und dieselbe Skalierungslogik auf deren Formen anwenden, um Konsistenz in der gesamten Präsentation sicherzustellen.

Kann ich die Orientierung einer Folie (Portrait/Landscape) zusammen mit dem Skalieren ändern?

Ja. Sie können presentation.slide_size.orientation verwenden, um die Orientierung zu ändern. Stellen Sie sicher, dass Sie die Skalierungslogik entsprechend anpassen, um das Layout beizubehalten.

Gibt es ein Limit für die Foliengröße, die ich festlegen kann?

Aspose.Slides unterstützt benutzerdefinierte Größen, aber sehr große Größen können die Leistung oder die Kompatibilität mit einigen PowerPoint‑Versionen beeinträchtigen.

Wie kann ich verhindern, dass Formen mit festem Seitenverhältnis verzerrt werden?

Sie können die Eigenschaft aspect_ratio_locked der Form vor dem Skalieren prüfen. Ist sie gesperrt, passen Sie Breite oder Höhe proportional an, anstatt sie einzeln zu skalieren.