PowerPoint-Formen in Java formatieren

Einführung

Formatiere Formen in PowerPoint, indem du ihre Konturen, Füllungen und Effekte anpasst. Aspose.Slides for Java ermöglicht die programmgesteuerte Steuerung dieser Einstellungen, einschließlich Transparenz, Drehung und 3D‑Formatierung.

Formatiervorgänge für Formen in PowerPoint

Aspose.Slides for Java bietet Schnittstellen und Methoden, die es dir erlauben, Formen mit denselben Optionen zu formatieren, die in PowerPoint verfügbar sind.

Linien formatieren

Verwende IShape.getLineFormat to control a shape’s outline. Dieses Beispiel erstellt ein nicht gefülltes Rechteck mit einer blauen, gestrichelten Kontur. ILineFormat.setStyle wählt eine dick‑dünn‑Verbundlinie, während ILineFormat.setWidth die Breite auf 7 Punkte setzt und ILineFormat.setDashStyle das Strichmuster auswählt.

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 150, 75);
    shape.getFillFormat().setFillType(FillType.NoFill);
    shape.getLineFormat().setStyle(LineStyle.ThickThin);
    shape.getLineFormat().setWidth(7);
    shape.getLineFormat().setDashStyle(LineDashStyle.Dash);
    shape.getLineFormat().getFillFormat().setFillType(FillType.Solid);
    shape.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);

    presentation.save("formatted_lines.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Das Ergebnis:

Die formatierten Linien in der Präsentation

Benutzerdefinierte Linien‑Strichmuster festlegen

Verwende ILineFormat.setCustomDashPattern, wenn vordefinierte Linien‑Stile die benötigten Strich‑ und Lückenlängen nicht bieten, zum Beispiel für Marken‑Konturen oder technische Diagramme. Das Zuordnen eines Musters ändert automatisch den Linien‑Strichstil zu LineDashStyle.Custom.

Array‑Einträge wechseln zwischen Strich‑ und Lückenlängen und beginnen mit einem Strich. Jeder Wert ist ein Vielfaches der Linienbreite: { 4, 2 } bei einer Breite von 3 Punkten erzeugt einen 12‑Punkte‑Strich gefolgt von einer 6‑Punkte‑Lücke. Verwende Paare von endlichen, nicht‑negativen Werten, um vollständige Strich‑und‑Lücken‑Segmente zu definieren. Das Beispiel verwendet positive Werte, um jeden Strich und jede Lücke sichtbar zu halten.

Dieses Beispiel erstellt fünf blaue Linien gleicher Länge mit flachen Enden. Die ersten drei vergleichen Muster bei einer Breite von 3 Punkten. Das vierte wiederholt das erste Muster mit doppelter Breite und verdoppelt damit sowohl Strich‑ als auch Lückenlängen. Das fünfte wechselt von einem benutzerdefinierten Muster zu einer durchgezogenen Linie.

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    presentation.getSlideSize().setSize(600, 300, SlideSizeScaleType.DoNotScale);
    ISlide slide = presentation.getSlides().get_Item(0);

    float[][] patterns = {
        { 4, 2 },
        { 1, 2 },
        { 6, 2, 1, 2 },
        { 4, 2 },
        { 4, 2 }
    };

    for (int i = 0; i < patterns.length; i++) {
        IAutoShape line = slide.getShapes().addAutoShape(ShapeType.Line, 50, 50 + i * 50, 500, 0);
        line.getLineFormat().setWidth(i == 3 ? 6 : 3);
        line.getLineFormat().getFillFormat().setFillType(FillType.Solid);
        line.getLineFormat().getFillFormat().getSolidFillColor().setColor(new Color(0, 0, 139));
        line.getLineFormat().setCapStyle(LineCapStyle.Flat);
        line.getLineFormat().setBeginArrowheadStyle(LineArrowheadStyle.None);
        line.getLineFormat().setEndArrowheadStyle(LineArrowheadStyle.None);
        line.getLineFormat().setCustomDashPattern(patterns[i]);
    }

    // Setze die letzte Linie zurück zu einem durchgezogenen Stil.
    slide.getShapes().get_Item(4).getLineFormat().setDashStyle(LineDashStyle.Solid);

    presentation.save("custom_dash_patterns.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Um stattdessen zu einem vordefinierten Strichstil zurückzukehren, übergebe LineDashStyle.Dash an ILineFormat.setDashStyle. Der ausgewählte Stil bestimmt das Aussehen der Linie.

Das Ergebnis in PowerPoint von oben nach unten: {4, 2}, 3 pt; {1, 2}, 3 pt; {6, 2, 1, 2}, 3 pt; {4, 2}, 6 pt; und Solid, 3 pt.

Drei benutzerdefinierte Strichmuster, eine breitere Linie mit dem ersten Muster und eine durchgezogene Linie in PowerPoint

Linien‑Enden festlegen

Verwende ILineFormat.setCapStyle, um die Enden einer offenen Linie zu setzen. Die Klasse LineCapStyle bietet drei explizite End‑Stile:

  • Flat: Der Strich endet am Endpunkt.
  • Round: Ein halbkreisförmiges Ende erstreckt sich jenseits des Endpunkts um die halbe Linienbreite.
  • Square: Ein quadratisches Ende erstreckt sich jenseits des Endpunkts um die halbe Linienbreite.

Die Klasse enthält außerdem NotDefined, was bedeutet, dass kein End‑Stil explizit zugewiesen ist.

Enden unterscheiden sich von Pfeilspitzen, die Symbole an Linienenden hinzufügen, und von Verbindungs­punkten, die Ecken zwischen Liniensegmenten steuern. Dieses Beispiel deaktiviert Pfeilspitzen über ILineFormat.setBeginArrowheadStyle und ILineFormat.setEndArrowheadStyle, sodass nur die End‑Formen verglichen werden.

Das folgende Beispiel erstellt drei ansonsten identische horizontale Linien mit einer Breite von 20 Punkten. Von oben nach unten verwenden sie flache, runde bzw. quadratische Enden. Ihre Endpunkte besitzen dieselben horizontalen Koordinaten; die runden und quadratischen Enden erstrecken sich 10 Punkte über jeden Endpunkt hinaus.

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    presentation.getSlideSize().setSize(500, 240, SlideSizeScaleType.DoNotScale);
    ISlide slide = presentation.getSlides().get_Item(0);

    byte[] capStyles = new byte[] { LineCapStyle.Flat, LineCapStyle.Round, LineCapStyle.Square };

    for (int i = 0; i < capStyles.length; i++) {
        IAutoShape line = slide.getShapes().addAutoShape(ShapeType.Line, 100, 50 + i * 70, 300, 0);
        line.getLineFormat().setWidth(20);
        line.getLineFormat().getFillFormat().setFillType(FillType.Solid);
        line.getLineFormat().getFillFormat().getSolidFillColor().setColor(new Color(0, 0, 139));
        line.getLineFormat().setDashStyle(LineDashStyle.Solid);
        line.getLineFormat().setCapStyle(capStyles[i]);
        line.getLineFormat().setBeginArrowheadStyle(LineArrowheadStyle.None);
        line.getLineFormat().setEndArrowheadStyle(LineArrowheadStyle.None);
    }

    presentation.save("line_caps.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Das Ergebnis in PowerPoint von oben nach unten: Flat, Round und Square.

Flache, runde und quadratische Enden an identischen dicken Linien in PowerPoint

Skizze‑Effekte auf Form‑Linien anwenden

Ein Skizze‑Effekt lässt eine Form‑Linie handgezeichnet wirken. Verwende IShape.getLineFormat zum Zugriff auf die Linieneinstellungen, ILineFormat.getSketchFormat zum Zugriff auf die Skizzen‑Einstellungen und ISketchFormat.setSketchType, um einen Wert aus der Klasse LineSketchType auszuwählen.

Der folgende Java‑Code zeigt, wie ein LineSketchType.Curved‑Effekt angewendet, der explizit zugewiesene Wert ausgelesen und der Effekt mit LineSketchType.None entfernt wird:

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 200, 100);

    ISketchFormat sketchFormat = shape.getLineFormat().getSketchFormat();
    sketchFormat.setSketchType(LineSketchType.Curved);
    int explicitSketchType = sketchFormat.getSketchType();
    System.out.println("Explicit sketch type: " + explicitSketchType);
    sketchFormat.setSketchType(LineSketchType.None);
} finally {
    presentation.dispose();
}

Der von ISketchFormat.getSketchType zurückgegebene Wert repräsentiert die direkt der Form zugewiesene Einstellung. Wenn die Linien‑Formatierung von einem Theme, einer Master‑Folie oder einer Layout‑Folie geerbt werden kann, verwende ILineFormat.getEffective, greife auf ILineFormatEffectiveData.getSketchFormat zu und lese ISketchFormatEffectiveData.getSketchType. Der effektive Wert spiegelt die Formatierung wider, die nach Auflösung der Vererbung tatsächlich angewendet wird. Dieses Beispiel erfordert eine vorhandene Präsentation mit mindestens einer Form auf der ersten Folie und gibt beide Werte aus:

import com.aspose.slides.*;

Presentation presentation = new Presentation("presentation.pptx");
try {
    IShape shape = presentation.getSlides().get_Item(0).getShapes().get_Item(0);

    ILineFormat lineFormat = shape.getLineFormat();
    int explicitSketchType = lineFormat.getSketchFormat().getSketchType();
    ILineFormatEffectiveData effectiveLineFormat = lineFormat.getEffective();
    int effectiveSketchType = effectiveLineFormat.getSketchFormat().getSketchType();

    System.out.println("Explicit sketch type: " + explicitSketchType);
    System.out.println("Effective sketch type: " + effectiveSketchType);
} finally {
    presentation.dispose();
}

Verbindungs‑Stile formatieren

Hier sind die drei Optionen für den Verbindungs‑Typ:

  • Round
  • Miter
  • Bevel

Der Verbindungs‑Stil bestimmt, wie zwei Kontur‑Segmente an einer Ecke zusammentreffen. Verwende Round für abgerundete Ecken, Miter für scharfe Ecken oder Bevel für abgeflachte Ecken.

Der Verbindungs‑Stil in der Präsentation

Dieses Beispiel erstellt drei schwarze Rechtecke mit blauen Konturen von 15 Punkten Breite. Es verwendet ILineFormat.setJoinStyle, um die Werte miter, bevel und round von LineJoinStyle festzulegen und so zu vergleichen, wie die Ecken gezeichnet werden.

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape miterShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 20, 20, 150, 75);
    IAutoShape bevelShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 210, 20, 150, 75);
    IAutoShape roundShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 20, 135, 150, 75);

    miterShape.getFillFormat().setFillType(FillType.Solid);
    miterShape.getFillFormat().getSolidFillColor().setColor(Color.BLACK);
    bevelShape.getFillFormat().setFillType(FillType.Solid);
    bevelShape.getFillFormat().getSolidFillColor().setColor(Color.BLACK);
    roundShape.getFillFormat().setFillType(FillType.Solid);
    roundShape.getFillFormat().getSolidFillColor().setColor(Color.BLACK);

    miterShape.getLineFormat().setWidth(15);
    bevelShape.getLineFormat().setWidth(15);
    roundShape.getLineFormat().setWidth(15);

    miterShape.getLineFormat().getFillFormat().setFillType(FillType.Solid);
    miterShape.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);
    bevelShape.getLineFormat().getFillFormat().setFillType(FillType.Solid);
    bevelShape.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);
    roundShape.getLineFormat().getFillFormat().setFillType(FillType.Solid);
    roundShape.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);

    miterShape.getLineFormat().setJoinStyle(LineJoinStyle.Miter);
    bevelShape.getLineFormat().setJoinStyle(LineJoinStyle.Bevel);
    roundShape.getLineFormat().setJoinStyle(LineJoinStyle.Round);

    miterShape.getTextFrame().setText("Miter Join Style");
    bevelShape.getTextFrame().setText("Bevel Join Style");
    roundShape.getTextFrame().setText("Round Join Style");

    presentation.save("join_styles.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Miter‑Verbindungen an scharfen Ecken begrenzen

Verwende ILineFormat.setMiterLimit zusammen mit ILineFormat.setJoinStyle auf LineJoinStyle.Miter, um zu begrenzen, wie weit eine scharfe Ecke ausdehnen darf.

Der Grenzwert ist das Verhältnis des Abstands zwischen innerer und äußerer Ecke der Verbindung zur Linienbreite. Zum Beispiel erlaubt ein Wert von 8 eine Miter‑Länge von bis zu achtmal der Linienbreite; er ist keine Messung in Punkten. Wenn die Ecke den Grenzwert überschreiten würde, verwendet PowerPoint an dieser Stelle eine abgeschrägte Verbindung. Ein größerer Grenzwert ermöglicht schärfere Spitzen. Die Einstellung wirkt sich nur auf Miter‑Verbindungen aus und hat keinen sichtbaren Effekt, solange die Ecke innerhalb beider Grenzwerte bleibt.

Dieses Beispiel erstellt zwei identische, nicht gefüllte Dreiecke mit Konturen von 20 Punkten Breite. Das linke Dreieck verwendet einen Grenzwert von 2, das rechte 8. Jedes Dreieck ist 80 Punkte breit und 160 Punkte hoch, sodass das Seitenverhältnis der Miter‑Länge‑zu‑Linienbreite etwa 4,12 beträgt. Consequently, PowerPoint bevels the left apex and preserves the right apex.

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    presentation.getSlideSize().setSize(500, 320, SlideSizeScaleType.DoNotScale);
    ISlide slide = presentation.getSlides().get_Item(0);

    float[] miterLimits = new float[] { 2f, 8f };

    for (int i = 0; i < miterLimits.length; i++) {
        IAutoShape triangle = slide.getShapes().addAutoShape(ShapeType.Triangle, 90 + i * 240, 110, 80, 160);
        triangle.getFillFormat().setFillType(FillType.NoFill);
        triangle.getLineFormat().setWidth(20);
        triangle.getLineFormat().getFillFormat().setFillType(FillType.Solid);
        triangle.getLineFormat().getFillFormat().getSolidFillColor().setColor(new Color(0, 0, 139));
        triangle.getLineFormat().setJoinStyle(LineJoinStyle.Miter);
        triangle.getLineFormat().setMiterLimit(miterLimits[i]);
    }

    presentation.save("miter_limits.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Das Ergebnis in PowerPoint: Miter limit 2 links und miter limit 8 rechts.

Eine abgeschrägte Spitze mit Miter‑Grenzwert 2 und eine spitze Spitze mit Miter‑Grenzwert 8 in PowerPoint

Verlaufs‑Füllung

Eine Verlauf‑Füllung mischt Farben über eine Form hinweg. Dieses Beispiel füllt eine Ellipse mit einem linearen Verlauf von 45 Grad von Rot nach Lila über IFillFormat.getGradientFormat. Die Methode IGradientStopCollection.addPresetColor legt die Farb‑Stops bei 0 und 1, dem Anfang und Ende des Verlaufs, fest. Das Löschen der vorhandenen Stops stellt sicher, dass nur diese beiden Farben verwendet werden.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Ellipse, 50, 50, 150, 75);
    shape.getFillFormat().setFillType(FillType.Gradient);
    shape.getFillFormat().getGradientFormat().setGradientShape(GradientShape.Linear);
    shape.getFillFormat().getGradientFormat().setLinearGradientAngle(45);
    shape.getFillFormat().getGradientFormat().getGradientStops().clear();
    shape.getFillFormat().getGradientFormat().getGradientStops().addPresetColor(1.0f, PresetColor.Purple);
    shape.getFillFormat().getGradientFormat().getGradientStops().addPresetColor(0.0f, PresetColor.Red);

    presentation.save("gradient_fill.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Das Ergebnis:

Die Ellipse mit Verlauf‑Füllung

Wenn ein Verlauf in einem exportierten Bild anders aussieht als in PowerPoint, siehe Choose a Gradient Rendering Style. Du kannst einen Render‑Stil auswählen, ohne die im Dokument gespeicherte Verlauf‑Füllung zu ändern.

Den Winkel des linearen Verlaufs festlegen

Verwende IGradientFormat.setLinearGradientAngle, um die Ausrichtung einer GradientShape.Linear‑Füllung zu steuern. Der Winkel wird in Grad gemessen und erhöht sich im Uhrzeigersinn: 0 verläuft von links nach rechts, 90 von oben nach unten, 180 von rechts nach links und 270 von unten nach oben. Bruchteile von Grad werden unterstützt. Endliche Winkel außerhalb des Intervalls [0, 360) werden zu einer Umdrehung normalisiert; zum Beispiel wird -45 zu 315 und 360 zu 0.

Dieses Beispiel erstellt sechs Rechtecke mit identischen Rot‑, Grün‑ und Blau‑Stops bei den Positionen 0, 0.5 und 1. Das Skalieren ist deaktiviert, damit der Winkel unabhängig von den Proportionen der Rechtecke verglichen werden kann. Die Winkel von links nach rechts sind 0, 45 und 90 in der ersten Zeile und 135, 180 und 270 in der zweiten Zeile.

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    presentation.getSlideSize().setSize(720, 400, SlideSizeScaleType.DoNotScale);
    ISlide slide = presentation.getSlides().get_Item(0);

    float[] angles = new float[] { 0, 45, 90, 135, 180, 270 };

    for (int i = 0; i < angles.length; i++) {
        int x = 30 + (i % 3) * 230;
        int y = 30 + (i / 3) * 190;

        IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, x, y, 200, 150);
        shape.getLineFormat().getFillFormat().setFillType(FillType.NoFill);
        shape.getFillFormat().setFillType(FillType.Gradient);

        IGradientFormat gradient = shape.getFillFormat().getGradientFormat();
        gradient.setGradientShape(GradientShape.Linear);
        gradient.getGradientStops().clear();
        gradient.getGradientStops().add(0f, Color.RED);
        gradient.getGradientStops().add(0.5f, Color.GREEN);
        gradient.getGradientStops().add(1f, Color.BLUE);
        gradient.setLinearGradientScaled(NullableBool.False);
        gradient.setLinearGradientAngle(angles[i]);
    }

    presentation.save("linear_gradient_angles.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Das Ergebnis in PowerPoint:

Lineare Verläufe bei 0°, 45°, 90° in der oberen Zeile und 135°, 180°, 270° in der unteren Zeile

Einen linearen Verlauf mit der Form skalieren

IGradientFormat.setLinearGradientScaled akzeptiert einen NullableBool. Setze ihn explizit auf False, um den geometrischen Verlauf‑Winkel beizubehalten, wenn sich die Proportionen der Form ändern, oder auf True, um den Verlauf mit Breite und Höhe der Form zu skalieren. Bei aktivierter Skalierung kann der sichtbare Winkel von dem zugewiesenen Winkel bei einer nicht‑quadratischen Form abweichen.

Das folgende Beispiel verwendet einen Winkel von 45 Grad und dieselben Farb‑Stops wie im Winkel‑Vergleich. Die linke Spalte verwendet False; die rechte Spalte True. Jede Spalte enthält ein breites Rechteck über einem hohen Rechteck. Beide beginnen mit denselben breiten Abmessungen; das Ändern von Breite und Höhe des zweiten Rechtecks zeigt, wie die Füllung auf Größenänderungen reagiert, ohne die Verlauf‑Einstellungen zu ändern.

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    presentation.getSlideSize().setSize(720, 460, SlideSizeScaleType.DoNotScale);
    ISlide slide = presentation.getSlides().get_Item(0);

    byte[] scalingOptions = new byte[] { NullableBool.False, NullableBool.True };

    for (int column = 0; column < scalingOptions.length; column++) {
        for (int row = 0; row < 2; row++) {
            int x = 30 + column * 360;
            int y = row == 0 ? 30 : 150;

            IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, x, y, 300, 90);
            shape.getLineFormat().getFillFormat().setFillType(FillType.NoFill);
            shape.getFillFormat().setFillType(FillType.Gradient);

            IGradientFormat gradient = shape.getFillFormat().getGradientFormat();
            gradient.setGradientShape(GradientShape.Linear);
            gradient.getGradientStops().clear();
            gradient.getGradientStops().add(0f, Color.RED);
            gradient.getGradientStops().add(0.5f, Color.GREEN);
            gradient.getGradientStops().add(1f, Color.BLUE);
            gradient.setLinearGradientAngle(45);
            gradient.setLinearGradientScaled(scalingOptions[column]);

            if (row == 1) {
                shape.setWidth(90);
                shape.setHeight(280);
            }
        }
    }

    presentation.save("linear_gradient_scaling.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Das Ergebnis in PowerPoint, links ohne Skalierung und rechts mit Skalierung:

Breite und hohe Rechtecke mit einem 45‑Grad‑Verlauf, Vergleich LinearGradientScaled False links und True rechts

Bei deaktivierter Skalierung behalten die diagonalen Farb‑Bänder in beiden Rechtecken dieselbe Orientierung. Bei aktivierter Skalierung strecken sich die Bänder mit den Proportionen der Form. Das hilft, einen Vorlagen‑Verlauf beim Anpassen einer Form an eine andere Größe wiederzugeben. Auf einem Quadrat ändert das Aktivieren der Skalierung das Aussehen dieses 45‑Grad‑Verlaufs nicht.

Sowohl Winkel‑ als auch Skalierungs‑Einstellungen gelten für lineare Verläufe. Sie steuern nicht GradientShape.Radial oder GradientShape.Rectangle‑Füllungen.

Winkel mit Verlauf‑Richtung kombinieren

IGradientFormat.setGradientDirection wählt einen Verlauf‑Stil aus der Klasse GradientDirection aus; er ist kein Ersatz für einen numerischen Winkel. Für einen linearen Verlauf können die Eck‑Stile den Bereich, über den die Farben verteilt werden, ändern, ohne den über setLinearGradientAngle zugewiesenen Winkel zu ändern. Lass die Richtung unverändert, wenn du Winkel oder Skalierung vergleichst.

Das folgende Beispiel wendet dieselben Einstellungen in umgekehrter Reihenfolge an. Die beiden Rechtecke sehen gleich aus: Das Setzen der Richtung vor oder nach dem Winkel ändert das Ergebnis nicht.

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    for (int i = 0; i < 2; i++) {
        IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 30, 30 + i * 140, 320, 100);
        shape.getLineFormat().getFillFormat().setFillType(FillType.NoFill);
        shape.getFillFormat().setFillType(FillType.Gradient);

        IGradientFormat gradient = shape.getFillFormat().getGradientFormat();
        gradient.setGradientShape(GradientShape.Linear);
        gradient.getGradientStops().clear();
        gradient.getGradientStops().add(0f, Color.RED);
        gradient.getGradientStops().add(0.5f, Color.GREEN);
        gradient.getGradientStops().add(1f, Color.BLUE);
        gradient.setLinearGradientScaled(NullableBool.True);

        if (i == 0) {
            gradient.setGradientDirection(GradientDirection.FromCorner1);
            gradient.setLinearGradientAngle(30);
        } else {
            gradient.setLinearGradientAngle(30);
            gradient.setGradientDirection(GradientDirection.FromCorner1);
        }
    }

    presentation.save("linear_gradient_direction.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Muster‑Füllung

Eine Muster‑Füllung verwendet ein zweifarbiges Design, etwa Punkte, Streifen oder Karos. Dieses Beispiel verwendet IPatternFormat.setPatternStyle, um ein Rautenmuster auszuwählen. IPatternFormat.getBackColor liefert den hellgrauen Hintergrund und IPatternFormat.getForeColor die gelbe Musterfarbe.

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 150, 75);
    shape.getFillFormat().setFillType(FillType.Pattern);
    shape.getFillFormat().getPatternFormat().setPatternStyle(PatternStyle.Trellis);
    shape.getFillFormat().getPatternFormat().getBackColor().setColor(Color.LIGHT_GRAY);
    shape.getFillFormat().getPatternFormat().getForeColor().setColor(Color.YELLOW);

    presentation.save("pattern_fill.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Das Ergebnis:

Das Rechteck mit Muster‑Füllung

Bild‑Füllung

Eine Bild‑Füllung verwendet ein Bild innerhalb einer Form. Dieses Beispiel benötigt ein lokales Bild und lädt es über Images.fromFile in die Bild‑Sammlung der Präsentation. Das Setzen von IPictureFillFormat.setPictureFillMode auf den Kachel‑Modus wiederholt das Bild innerhalb des Rechtecks. Das hier verwendete Quellbild ist unten abgebildet:

Das Lotus‑Bild

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 255, 130);
    shape.getFillFormat().setFillType(FillType.Picture);
    shape.getFillFormat().getPictureFillFormat().setPictureFillMode(PictureFillMode.Tile);

    IImage image = Images.fromFile("lotus.png");
    IPPImage picture;
    try {
        picture = presentation.getImages().addImage(image);
    } finally {
        image.dispose();
    }
    shape.getFillFormat().getPictureFillFormat().getPicture().setImage(picture);

    presentation.save("picture_fill.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Das Ergebnis:

Die Form mit Bild‑Füllung

Bild als Textur kacheln

Wenn du ein gekacheltes Bild als Textur setzen und das Kachel‑Verhalten anpassen möchtest, kannst du die folgenden Methoden der Schnittstelle IPictureFillFormat und der Klasse PictureFillFormat verwenden:

  • setPictureFillMode: Legt den Bild‑Füllmodus fest – entweder Tile oder Stretch.
  • setTileAlignment: Gibt die Ausrichtung der Kacheln innerhalb der Form an.
  • setTileFlip: Steuert, ob die Kachel horizontal, vertical oder in beiden Richtungen gespiegelt wird.
  • setTileOffsetX: Setzt den horizontalen Versatz der Kachel (in Punkten) vom Ursprung der Form.
  • setTileOffsetY: Setzt den vertikalen Versatz der Kachel (in Punkten) vom Ursprung der Form.
  • setTileScaleX: Definiert die horizontale Skalierung der Kachel als Prozentsatz.
  • setTileScaleY: Definiert die vertikale Skalierung der Kachel als Prozentsatz.

Dieses Beispiel benötigt ein lokales Bild und konfiguriert IPictureFillFormat, um es mit 50 % seiner Originalgröße zu wiederholen. Offsets von −32 Punkten verschieben die Kacheln horizontal und vertical; die Ausrichtung unten‑rechts und das Spiegeln in beiden Richtungen bestimmen, wie die wiederholte Textur angeordnet wird.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide firstSlide = presentation.getSlides().get_Item(0);

    IAutoShape shape = firstSlide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 190, 95);
    shape.getFillFormat().setFillType(FillType.Picture);

    IImage sourceImage = Images.fromFile("lotus.png");
    IPPImage presentationImage;
    try {
        presentationImage = presentation.getImages().addImage(sourceImage);
    } finally {
        sourceImage.dispose();
    }

    IPictureFillFormat pictureFillFormat = shape.getFillFormat().getPictureFillFormat();
    pictureFillFormat.getPicture().setImage(presentationImage);
    pictureFillFormat.setPictureFillMode(PictureFillMode.Tile);
    pictureFillFormat.setTileOffsetX(-32);
    pictureFillFormat.setTileOffsetY(-32);
    pictureFillFormat.setTileScaleX(50);
    pictureFillFormat.setTileScaleY(50);
    pictureFillFormat.setTileAlignment(RectangleAlignment.BottomRight);
    pictureFillFormat.setTileFlip(TileFlip.FlipBoth);

    presentation.save("tile.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Das Ergebnis:

Die Kachel‑Optionen

Einfarbige Füllung

Eine einfarbige Füllung gibt einer Form eine einzelne, gleichmäßige Farbe. Dieses Beispiel verwendet IFillFormat.setFillType, um den einfarbigen Füllmodus zu setzen und weist Gelb über IFillFormat.getSolidFillColor zu, bevor das Rechteck in einer Präsentation gespeichert wird.

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 150, 75);
    shape.getFillFormat().setFillType(FillType.Solid);
    shape.getFillFormat().getSolidFillColor().setColor(Color.YELLOW);

    presentation.save("solid_color_fill.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Das Ergebnis:

Die Form mit einfarbiger Füllung

Folien‑Hintergrund als Form‑Füllung verwenden

Verwende IAutoShape.setUseBackgroundFill, wenn eine Form dem Folien‑Hintergrund entsprechen soll, zum Beispiel in einer Präsentations‑Vorlage. Setze zuerst IFillFormat.setFillType auf FillType.NotDefined, um jede explizite Füllung zu entfernen. Mit dieser Kombination verwendet die Form den Folien‑Hintergrund anstelle ihrer Stil‑Füllung. Das Setzen des Flags allein entfernt keine bereits vorhandene explizite Füllung.

Dies unterscheidet sich von FillType.NoFill: NoFill lässt Objekte hinter der Form sichtbar, während NoFill die Objekte verdeckt. Ein Verlauf bleibt an die Folie ausgerichtet, statt in jeder Form neu zu beginnen.

Das folgende Beispiel erstellt einen Master‑Hintergrund, der von der Folie geerbt wird, und platziert einen magentafarbenen Streifen hinter drei Rechtecken. Das linke Rechteck verwendet den Hintergrund, das mittlere hat keine Füllung, und das rechte wechselt von Hintergrund‑Füllung zu einer expliziten orangefarbenen Füllung.

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    presentation.getSlideSize().setSize(720, 400, SlideSizeScaleType.DoNotScale);
    ISlide slide = presentation.getSlides().get_Item(0);

    // Vererbe den Farbverlauf vom Master.
    slide.getBackground().setType(BackgroundType.NotDefined);
    slide.getLayoutSlide().getBackground().setType(BackgroundType.NotDefined);
    IBackground background = slide.getLayoutSlide().getMasterSlide().getBackground();
    background.setType(BackgroundType.OwnBackground);
    background.getFillFormat().setFillType(FillType.Gradient);
    IGradientFormat gradient = background.getFillFormat().getGradientFormat();
    gradient.setGradientShape(GradientShape.Linear);
    gradient.setLinearGradientAngle(0);
    gradient.getGradientStops().clear();
    gradient.getGradientStops().add(0, new Color(0, 0, 139));
    gradient.getGradientStops().add(1, new Color(135, 206, 250));

    // Füge dieses Objekt zuerst hinzu, damit es hinter den Rechtecken erscheint.
    IAutoShape band = slide.getShapes().addAutoShape(ShapeType.Rectangle, 25, 150, 670, 100);
    band.getFillFormat().setFillType(FillType.Solid);
    band.getFillFormat().getSolidFillColor().setColor(Color.MAGENTA);
    band.getLineFormat().getFillFormat().setFillType(FillType.NoFill);

    IAutoShape backgroundShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 100, 160, 200);
    backgroundShape.getFillFormat().setFillType(FillType.NotDefined);
    backgroundShape.setUseBackgroundFill(true);

    IAutoShape noFillShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 280, 100, 160, 200);
    noFillShape.getFillFormat().setFillType(FillType.NoFill);

    IAutoShape explicitShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 510, 100, 160, 200);
    explicitShape.getFillFormat().setFillType(FillType.NotDefined);
    explicitShape.setUseBackgroundFill(true);

    // Deaktiviere die Hintergrundfüllung, bevor eine explizite Füllung angewendet wird.
    explicitShape.setUseBackgroundFill(false);
    explicitShape.getFillFormat().setFillType(FillType.Solid);
    explicitShape.getFillFormat().getSolidFillColor().setColor(new Color(255, 165, 0));

    presentation.save("background_fill.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Das Ergebnis von links nach rechts: background fill, no fill und explicit fill. Der magentafarbene Streifen wird von den linken und rechten Rechtecken verdeckt, bleibt jedoch durch das mittlere Rechteck sichtbar.

Hintergrund‑Füllung, keine Füllung und explizite orange Füllung über einem magentafarbenen Streifen

Das gleiche Verhalten gilt für einen direkt auf der Folie definierten Hintergrund oder einen von einem Layout geerbten Hintergrund. Die Form verwendet den von der Folie aufgelösten Hintergrund; das Beispiel lässt sowohl den Folien‑ als auch den Layout‑Hintergrund undefiniert, sodass der Master ihn bereitstellt.

Transparenz festlegen

Für eine einfarbige Füllung steuert die Alpha‑Komponente der Farbe die Undurchsichtigkeit: 0 ist vollständig transparent und 255 vollständig undurchsichtig. Dieses Beispiel verwendet einen Alpha‑Wert von 128 für ein gelbes Rechteck, wodurch es etwa zu 50 % transparent ist, sodass das darunterliegende Rechteck sichtbar bleibt. Die Farbe wird über IFillFormat.getSolidFillColor zugewiesen.

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape solidShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 150, 75);

    IAutoShape transparentShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 80, 80, 150, 75);
    transparentShape.getFillFormat().setFillType(FillType.Solid);
    transparentShape.getFillFormat().getSolidFillColor().setColor(new Color(255, 255, 0, 128));

    presentation.save("shape_transparency.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Das Ergebnis:

Die transparente Form

Formen drehen

Verwende IShape.setRotation, um eine Form in der Ebenen‑Ebene der Folie zu drehen. Der Winkel wird in Grad gemessen; dieses Beispiel dreht ein Rechteck um 5 Grad im Uhrzeigersinn und speichert die Präsentation.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 150, 75);
    shape.setRotation(5);

    presentation.save("shape_rotation.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Das Ergebnis:

Die Form‑Drehung

3D‑Kanten‑Effekte hinzufügen

Verwende IShape.getThreeDFormat um einer Form Tiefe und abgeflachte Kanten zu verleihen. Dieses Beispiel erstellt eine grüne Ellipse mit orangefarbiger Kontur, setzt die Tiefe über IThreeDFormat.setDepth auf 4 Punkte und wendet über IThreeDFormat.getBevelTop einen kreisförmigen oberen Abschrägungs‑Effekt mit einer Breite und Höhe von 6 Punkten an. Eine frontale orthografische Kamera und Dreipunkt‑Beleuchtung machen die Abschrägung sichtbar.

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Ellipse, 50, 50, 100, 100);
    shape.getFillFormat().setFillType(FillType.Solid);
    shape.getFillFormat().getSolidFillColor().setColor(new Color(0, 128, 0));
    shape.getLineFormat().getFillFormat().setFillType(FillType.Solid);
    shape.getLineFormat().getFillFormat().getSolidFillColor().setColor(new Color(255, 165, 0));
    shape.getLineFormat().setWidth(2.0);
    shape.getThreeDFormat().setDepth(4);
    shape.getThreeDFormat().getBevelTop().setBevelType(BevelPresetType.Circle);
    shape.getThreeDFormat().getBevelTop().setHeight(6);
    shape.getThreeDFormat().getBevelTop().setWidth(6);
    shape.getThreeDFormat().getCamera().setCameraType(CameraPresetType.OrthographicFront);
    shape.getThreeDFormat().getLightRig().setLightType(LightRigPresetType.ThreePt);
    shape.getThreeDFormat().getLightRig().setDirection(LightingDirection.Top);

    presentation.save("3D_bevel_effect.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Das Ergebnis:

Der 3D‑Abschrägungs‑Effekt

3D‑Drehungs‑Effekte hinzufügen

Die 3D‑Ansicht einer Form wird durch ihre Kamera‑Einstellungen gesteuert. Dieses Beispiel verwendet ICamera.setRotation mit Latitude‑, Longitude‑ und Revolutions‑Winkeln von 40, 35 bzw. 20 Grad. Es wählt eine isometrische Kamera über ICamera.setCameraType und ausgeglichene Beleuchtung über ILightRig.setLightType, bevor das formatierte Rechteck gespeichert wird.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape autoShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 150, 75);
    autoShape.getTextFrame().setText("Hello, Aspose!");
    autoShape.getThreeDFormat().getCamera().setCameraType(CameraPresetType.IsometricLeftUp);
    autoShape.getThreeDFormat().getCamera().setRotation(40, 35, 20);
    autoShape.getThreeDFormat().getLightRig().setLightType(LightRigPresetType.Balanced);

    presentation.save("3D_rotation_effect.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Das Ergebnis:

Der 3D‑Drehungs‑Effekt

Schwarz‑Weiß‑Darstellung für Formen steuern

Die Methode IShape.setBlackWhiteMode legt fest, wie eine einzelne Form gerendert wird, wenn eine Präsentation im Schwarz‑Weiß‑Modus angezeigt oder verarbeitet wird. Sie aktiviert die Schwarz‑Weiß‑Anzeige nicht automatisch und ändert die Füllung, Linie oder andere Formatierungen der Form nicht im normalen Farbraum.

Verwende einen Wert aus der Klasse BlackWhiteMode, um das gewünschte Verhalten auszuwählen. Zum Beispiel lässt Automatic die Rendering‑Anwendung die Konvertierung wählen, Gray und LightGray verwenden Grautöne, BlackWhite nur Schwarz und Weiß, Black und White erzwingen eine einzelne Farbe, Color erhält die normale Farbgebung, und Hidden lässt die Form im Schwarz‑Weiß‑Modus wegfallen. NotDefined bedeutet, dass kein formbezogener Modus zugewiesen ist.

Dieses Beispiel erstellt ein orangefarbenes Rechteck und verwendet IShape.setBlackWhiteMode, um den Modus auf Gray zu setzen. Die gespeicherte Form behält ihre orange Farbe für die normale Farbanzeige bei und fordert Graufärbung von Anwendungen an, die den Schwarz‑Weiß‑Modus respektieren:

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 200, 100);
    shape.getFillFormat().setFillType(FillType.Solid);
    shape.getFillFormat().getSolidFillColor().setColor(new Color(255, 165, 0));
    shape.setBlackWhiteMode(BlackWhiteMode.Gray);

    presentation.save("shape_black_white_mode.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Im normalen Farbraum behält das Rechteck seine orange Farbe. In einem Schwarz‑Weiß‑Workflow verwendet es Graufärbung, weil sein Modus auf Gray gesetzt ist. So kannst du eine Vollfarb‑Folien‑Version beibehalten und gleichzeitig ein unterschiedliches Aussehen für den Druck, die Vorschau oder andere Workflows definieren, die die Schwarz‑Weiß‑Einstellungen der Präsentation berücksichtigen.

Formatierung zurücksetzen

Verwende ISlide.reset , um die Position, Größe und Formatierung von Platzhaltern einer Folie von den entsprechenden Platzhaltern des Layouts wiederherzustellen. Dieses Beispiel erfordert eine vorhandene Präsentation mit layout‑verknüpften Platzhaltern und setzt jede Folie zurück, bevor sie gespeichert wird. Formen ohne entsprechende Layout‑Platzhalter werden nicht zurückgesetzt.

import com.aspose.slides.*;

Presentation presentation = new Presentation("sample.pptx");
try {
    for (ISlide slide : presentation.getSlides()) {
        slide.reset();
    }

    presentation.save("reset_formatting.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

FAQ

Beeinflusst die Formatierung von Formen die endgültige Dateigröße der Präsentation?

Farben, Linien‑Stile und Effekt‑Einstellungen fügen im Vergleich zu eingebetteten Bildern und Medien nur geringe Datenmengen hinzu. Bild‑Füllungen können die Dateigröße erhöhen, weil ihre Bilder in der Präsentation gespeichert werden.

Wie kann ich Formen auf einer Folie erkennen, die identische Formatierung besitzen, um sie zu gruppieren?

Vergleiche die wichtigsten Formatierungs‑Eigenschaften jeder Form – Füllung, Linie und Effekte. Stimmen alle entsprechenden Werte überein, betrachte deren Stile als identisch und gruppiere die Formen logisch, was die spätere Stilverwaltung vereinfacht.

Kann ich ein Set benutzerdefinierter Form‑Stile in einer separaten Datei speichern, um es in anderen Präsentationen wiederzuverwenden?

Ja. Speichere Beispiel‑Formen mit den gewünschten Stilen in einem Vorlagen‑Slide‑Deck oder einer .POTX‑Vorlagendatei. Beim Erstellen einer neuen Präsentation öffne die Vorlage, klone die benötigten stilisierten Formen und wende deren Formatierung dort an, wo sie gebraucht wird.