Formater les formes PowerPoint en PHP
Introduction
Formatez les formes dans PowerPoint en ajustant leurs contours, remplissages et effets. Aspose.Slides for PHP via Java vous permet de contrôler ces paramètres de façon programmatique, y compris la transparence, la rotation et le formatage 3D.

Aspose.Slides for PHP via Java fournit des classes et des méthodes qui vous permettent de formater les formes en utilisant les mêmes options disponibles dans PowerPoint.
Format Lines
Utilisez Shape::getLineFormat pour contrôler le contour d’une forme. Cet exemple crée un rectangle sans remplissage avec un contour bleu, pointillé. LineFormat::setStyle sélectionne une ligne composée épaisse‑fine, tandis que LineFormat::setWidth définit sa largeur à 7 points et LineFormat::setDashStyle choisit le motif pointillé.
use aspose\slides\FillType;
use aspose\slides\LineDashStyle;
use aspose\slides\LineStyle;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$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(java("java.awt.Color")->BLUE);
$presentation->save("formatted_lines.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

Set Custom Line Dash Patterns
Utilisez LineFormat::setCustomDashPattern lorsque les styles de ligne prédéfinis ne fournissent pas les longueurs de tirets et d’intervalles dont vous avez besoin, par exemple pour des contours de marque ou des diagrammes techniques. L’affectation d’un motif change automatiquement le style de tiret de ligne en LineDashStyle::Custom.
Les entrées du tableau alternent entre les longueurs de tiret et d’interstice, en commençant par un tiret. Chaque valeur est un multiple de la largeur de la ligne : [4, 2] avec une largeur de 3 points produit un tiret de 12 points suivi d’un interstice de 6 points. Utilisez des paires de valeurs finies, non négatives, pour définir des segments complets de tiret‑et‑interstice. L’exemple utilise des valeurs positives afin que chaque tiret et chaque interstice restent visibles.
Cet exemple crée cinq lignes bleues de même longueur avec des extrémités plates. Les trois premières comparent les motifs avec une largeur de 3 points. La quatrième répète le premier motif à deux fois la largeur, doublant ainsi les longueurs des tirets et des interstices. La cinquième passe d’un motif personnalisé à une ligne continue.
use aspose\slides\FillType;
use aspose\slides\LineArrowheadStyle;
use aspose\slides\LineCapStyle;
use aspose\slides\LineDashStyle;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
use aspose\slides\SlideSizeScaleType;
$presentation = new Presentation();
try {
$presentation->getSlideSize()->setSize(600, 300, SlideSizeScaleType::DoNotScale);
$slide = $presentation->getSlides()->get_Item(0);
$patterns = [
[4, 2],
[1, 2],
[6, 2, 1, 2],
[4, 2],
[4, 2]
];
$lineColor = new Java("java.awt.Color", 0, 0, 139);
for ($i = 0; $i < count($patterns); $i++) {
$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($lineColor);
$line->getLineFormat()->setCapStyle(LineCapStyle::Flat);
$line->getLineFormat()->setBeginArrowheadStyle(LineArrowheadStyle::None);
$line->getLineFormat()->setEndArrowheadStyle(LineArrowheadStyle::None);
$line->getLineFormat()->setCustomDashPattern($patterns[$i]);
}
// Rétablir la dernière ligne en style plein.
$slide->getShapes()->get_Item(4)->getLineFormat()->setDashStyle(LineDashStyle::Solid);
$presentation->save("custom_dash_patterns.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Pour revenir à un style pointillé prédéfini, transmettez LineDashStyle::Dash à LineFormat::setDashStyle. Le style sélectionné contrôle l’apparence de la ligne.
Le résultat dans PowerPoint, de haut en bas : {4, 2}, 3 pt ; {1, 2}, 3 pt ; {6, 2, 1, 2}, 3 pt ; {4, 2}, 6 pt ; et Solid, 3 pt.

Set Line Caps
Utilisez LineFormat::setCapStyle pour définir les extrémités d’une ligne ouverte. La classe LineCapStyle propose trois styles de cap explicites :
Flat: le tracé s’arrête au point final.Round: un cap semi‑circulaire dépasse le point final d’une moitié de la largeur de la ligne.Square: un cap carré dépasse le point final d’une moitié de la largeur de la ligne.
La classe comprend également NotDefined, qui signifie qu’aucun style de cap n’est explicitement assigné.
Les caps sont différents des pointes de flèche, qui ajoutent des symboles aux extrémités, et des jointures, qui contrôlent les coins entre les segments de ligne. Cet exemple désactive les pointes de flèche via LineFormat::setBeginArrowheadStyle et LineFormat::setEndArrowheadStyle afin que seules les formes de cap soient comparées.
L’exemple suivant crée trois lignes horizontales autrement identiques, de 20 points de largeur. De haut en bas, elles utilisent respectivement les caps plat, arrondi et carré. Leurs points d’extrémité partagent les mêmes coordonnées horizontales ; les caps arrondis et carrés dépassent de 10 points chaque extrémité.
use aspose\slides\FillType;
use aspose\slides\LineArrowheadStyle;
use aspose\slides\LineCapStyle;
use aspose\slides\LineDashStyle;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
use aspose\slides\SlideSizeScaleType;
$presentation = new Presentation();
try {
$presentation->getSlideSize()->setSize(500, 240, SlideSizeScaleType::DoNotScale);
$slide = $presentation->getSlides()->get_Item(0);
$capStyles = [LineCapStyle::Flat, LineCapStyle::Round, LineCapStyle::Square];
for ($i = 0; $i < count($capStyles); $i++) {
$line = $slide->getShapes()->addAutoShape(ShapeType::Line, 100, 50 + $i * 70, 300, 0);
$line->getLineFormat()->setWidth(20);
$line->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
$lineColor = new Java("java.awt.Color", 0, 0, 139);
$line->getLineFormat()->getFillFormat()->getSolidFillColor()->setColor($lineColor);
$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();
}
Le résultat dans PowerPoint, de haut en bas : Flat, Round et Square.

Apply Sketch Effects to Shape Lines
Un effet de croquis donne à la ligne d’une forme un aspect dessiné à la main. Utilisez Shape::getLineFormat pour accéder aux paramètres de ligne, LineFormat::getSketchFormat pour accéder aux paramètres de croquis, et SketchFormat::setSketchType pour sélectionner une valeur de la classe LineSketchType.
Le code PHP suivant montre comment appliquer un effet LineSketchType::Curved, lire la valeur explicitement assignée et supprimer l’effet avec LineSketchType::None :
use aspose\slides\LineSketchType;
use aspose\slides\Presentation;
use aspose\slides\ShapeType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 50, 200, 100);
$sketchFormat = $shape->getLineFormat()->getSketchFormat();
$sketchFormat->setSketchType(LineSketchType::Curved);
$explicitSketchType = $sketchFormat->getSketchType();
echo "Explicit sketch type: " . $explicitSketchType . PHP_EOL;
$sketchFormat->setSketchType(LineSketchType::None);
} finally {
$presentation->dispose();
}
La valeur renvoyée par SketchFormat::getSketchType représente le paramètre assigné directement à la forme. Si le formatage de la ligne peut être hérité d’un thème, d’une diapositive maître ou d’une diapositive de mise en page, utilisez LineFormat::getEffective, accédez à la méthode getSketchFormat de l’objet retourné, puis lisez sa valeur getSketchType. La valeur effective reflète le formatage réellement appliqué après résolution de l’héritage. Cet exemple nécessite une présentation existante contenant au moins une forme sur la première diapositive et imprime les deux valeurs :
use aspose\slides\Presentation;
$presentation = new Presentation("presentation.pptx");
try {
$shape = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item(0);
$lineFormat = $shape->getLineFormat();
$explicitSketchType = $lineFormat->getSketchFormat()->getSketchType();
$effectiveLineFormat = $lineFormat->getEffective();
$effectiveSketchType = $effectiveLineFormat->getSketchFormat()->getSketchType();
echo "Explicit sketch type: " . $explicitSketchType . PHP_EOL;
echo "Effective sketch type: " . $effectiveSketchType . PHP_EOL;
} finally {
$presentation->dispose();
}
Format Join Styles
Voici les trois options de type de jointure :
- Round
- Miter
- Bevel
Le style de jointure contrôle la façon dont deux segments de contour se rencontrent à un coin. Utilisez Round pour des coins arrondis, Miter pour des coins pointus, ou Bevel pour des coins aplatis.

Cet exemple crée trois rectangles noirs avec des contours bleus de 15 points de largeur. Il définit LineFormat::setJoinStyle aux valeurs miter, bevel et round de LineJoinStyle, respectivement, afin de comparer le rendu des coins.
use aspose\slides\FillType;
use aspose\slides\LineJoinStyle;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$miterShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 20, 20, 150, 75);
$bevelShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 210, 20, 150, 75);
$roundShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 20, 135, 150, 75);
$miterShape->getFillFormat()->setFillType(FillType::Solid);
$miterShape->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
$bevelShape->getFillFormat()->setFillType(FillType::Solid);
$bevelShape->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
$roundShape->getFillFormat()->setFillType(FillType::Solid);
$roundShape->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.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(java("java.awt.Color")->BLUE);
$bevelShape->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
$bevelShape->getLineFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLUE);
$roundShape->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
$roundShape->getLineFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.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();
}
Limit Miter Joins at Sharp Corners
Utilisez LineFormat::setMiterLimit avec LineFormat::setJoinStyle réglé sur LineJoinStyle::Miter pour limiter l’étendue d’un coin pointu.
La limite est un rapport entre la distance des coins interne et externe de la jointure et la largeur de la ligne. Par exemple, une valeur de 8 autorise une longueur de jointure pouvant atteindre huit fois la largeur de la ligne ; ce n’est pas une mesure en points. Si le coin dépasse la limite, PowerPoint utilise une jointure biseautée à cet endroit. Une limite plus élevée permet des pointes plus aiguisées. Ce paramètre n’affecte que les jointures en biseau et n’a aucun effet visible lorsque le coin reste à l’intérieur des deux limites.
Cet exemple crée deux triangles identiques, sans remplissage, avec des contours de 20 points de largeur. Le triangle de gauche utilise une limite de 2, celui de droite une limite de 8. Chaque triangle mesure 80 points de largeur et 160 points de hauteur, ce qui donne à son coin supérieur un rapport longueur‑de‑jointure / largeur de ligne d’environ 4,12. Ainsi, PowerPoint biseautera l’apex gauche et conservera l’apex droit.
use aspose\slides\FillType;
use aspose\slides\LineJoinStyle;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
use aspose\slides\SlideSizeScaleType;
$presentation = new Presentation();
try {
$presentation->getSlideSize()->setSize(500, 320, SlideSizeScaleType::DoNotScale);
$slide = $presentation->getSlides()->get_Item(0);
$miterLimits = [2, 8];
for ($i = 0; $i < count($miterLimits); $i++) {
$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);
$lineColor = new Java("java.awt.Color", 0, 0, 139);
$triangle->getLineFormat()->getFillFormat()->getSolidFillColor()->setColor($lineColor);
$triangle->getLineFormat()->setJoinStyle(LineJoinStyle::Miter);
$triangle->getLineFormat()->setMiterLimit($miterLimits[$i]);
}
$presentation->save("miter_limits.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat dans PowerPoint : Miter limit 2 à gauche et miter limit 8 à droite.

Gradient Fill
Un remplissage en dégradé mélange des couleurs à travers une forme. Cet exemple remplit une ellipse avec un dégradé linéaire à 45° du rouge au violet en utilisant FillFormat::getGradientFormat. La méthode GradientStopCollection::addPresetColor place les arrêts de couleur aux positions 0 et 1, début et fin du dégradé. Effacer les arrêts existants garantit que seules ces deux couleurs sont utilisées.
use aspose\slides\FillType;
use aspose\slides\GradientShape;
use aspose\slides\Presentation;
use aspose\slides\PresetColor;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$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.0, PresetColor::Purple);
$shape->getFillFormat()->getGradientFormat()->getGradientStops()->addPresetColor(0.0, PresetColor::Red);
$presentation->save("gradient_fill.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

Si un dégradé apparaît différemment dans une image exportée que dans PowerPoint, consultez Choose a Gradient Rendering Style. Vous pouvez choisir un style de rendu sans modifier le dégradé stocké dans la présentation.
Set the Linear Gradient Angle
Utilisez GradientFormat::setLinearGradientAngle pour contrôler l’orientation d’un remplissage GradientShape::Linear. L’angle est mesuré en degrés et augmente dans le sens des aiguilles d’une montre : 0 va de gauche à droite, 90 de haut en bas, 180 de droite à gauche, et 270 de bas en haut. Les angles fractionnaires sont pris en charge. Les angles finis hors de l’intervalle [0, 360) sont normalisés à une rotation complète ; par exemple, -45 devient 315 et 360 devient 0.
Cet exemple crée six rectangles avec des arrêts de couleur rouge, vert et bleu identiques aux positions 0, 0.5 et 1. L’échelle est désactivée afin que l’angle puisse être comparé indépendamment des proportions des rectangles. Les angles, de gauche à droite, sont 0, 45 et 90 sur la première ligne, puis 135, 180 et 270 sur la deuxième ligne.
use aspose\slides\FillType;
use aspose\slides\GradientShape;
use aspose\slides\NullableBool;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
use aspose\slides\SlideSizeScaleType;
$presentation = new Presentation();
try {
$presentation->getSlideSize()->setSize(720, 400, SlideSizeScaleType::DoNotScale);
$slide = $presentation->getSlides()->get_Item(0);
$angles = [0, 45, 90, 135, 180, 270];
for ($i = 0; $i < count($angles); $i++) {
$x = 30 + ($i % 3) * 230;
$y = 30 + intdiv($i, 3) * 190;
$shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, $x, $y, 200, 150);
$shape->getLineFormat()->getFillFormat()->setFillType(FillType::NoFill);
$shape->getFillFormat()->setFillType(FillType::Gradient);
$gradient = $shape->getFillFormat()->getGradientFormat();
$gradient->setGradientShape(GradientShape::Linear);
$gradient->getGradientStops()->clear();
$gradient->getGradientStops()->add(0, java("java.awt.Color")->RED);
$gradient->getGradientStops()->add(0.5, java("java.awt.Color")->GREEN);
$gradient->getGradientStops()->add(1, java("java.awt.Color")->BLUE);
$gradient->setLinearGradientScaled(NullableBool::False);
$gradient->setLinearGradientAngle($angles[$i]);
}
$presentation->save("linear_gradient_angles.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat dans PowerPoint :

Scale a Linear Gradient with the Shape
GradientFormat::setLinearGradientScaled accepte une valeur NullableBool. Réglez‑la explicitement sur False pour conserver l’angle géométrique du dégradé lorsque les proportions de la forme changent, ou sur True pour faire évoluer le dégradé avec la largeur et la hauteur de la forme. Avec l’échelle activée, l’angle visible peut différer de l’angle assigné sur une forme non carrée.
L’exemple suivant utilise un angle de 45 degrés et les mêmes arrêts de couleur que dans la comparaison d’angles. La colonne de gauche utilise False ; la colonne de droite utilise True. Chaque colonne contient un rectangle large au-dessus d’un rectangle haut. Les deux démarrent avec les mêmes dimensions larges ; le redimensionnement du deuxième rectangle montre comment le remplissage réagit sans changer les paramètres du dégradé.
use aspose\slides\FillType;
use aspose\slides\GradientShape;
use aspose\slides\NullableBool;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
use aspose\slides\SlideSizeScaleType;
$presentation = new Presentation();
try {
$presentation->getSlideSize()->setSize(720, 460, SlideSizeScaleType::DoNotScale);
$slide = $presentation->getSlides()->get_Item(0);
$scalingOptions = [NullableBool::False, NullableBool::True];
for ($column = 0; $column < count($scalingOptions); $column++) {
for ($row = 0; $row < 2; $row++) {
$x = 30 + $column * 360;
$y = $row == 0 ? 30 : 150;
$shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, $x, $y, 300, 90);
$shape->getLineFormat()->getFillFormat()->setFillType(FillType::NoFill);
$shape->getFillFormat()->setFillType(FillType::Gradient);
$gradient = $shape->getFillFormat()->getGradientFormat();
$gradient->setGradientShape(GradientShape::Linear);
$gradient->getGradientStops()->clear();
$gradient->getGradientStops()->add(0, java("java.awt.Color")->RED);
$gradient->getGradientStops()->add(0.5, java("java.awt.Color")->GREEN);
$gradient->getGradientStops()->add(1, java("java.awt.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();
}
Le résultat dans PowerPoint, avec l’échelle désactivée à gauche et activée à droite :

Avec l’échelle désactivée, les bandes de couleur diagonales conservent la même orientation dans les deux rectangles. Avec l’échelle activée, les bandes s’étirent avec les proportions de la forme. Cela facilite la reproduction du dégradé d’un modèle lorsqu’on adapte une forme à une taille différente. Sur un carré, activer l’échelle ne modifie pas l’apparence de ce dégradé de 45 degrés.
Les paramètres d’angle et d’échelle s’appliquent aux dégradés linéaires. Ils ne contrôlent pas les remplissages GradientShape::Radial ou GradientShape::Rectangle.
Combine the Angle with Gradient Direction
GradientFormat::setGradientDirection sélectionne un style de dégradé parmi la classe GradientDirection; ce n’est pas un substitut à un angle numérique. Pour un dégradé linéaire, les styles de coin peuvent modifier la zone de distribution des couleurs sans changer l’angle assigné via setLinearGradientAngle. Conservez la direction inchangée lors de la comparaison des angles ou de l’échelle.
L’exemple suivant applique les mêmes paramètres dans un ordre inverse. Les deux rectangles ont le même rendu : assigner la direction avant ou après l’angle ne modifie pas le résultat.
use aspose\slides\FillType;
use aspose\slides\GradientDirection;
use aspose\slides\GradientShape;
use aspose\slides\NullableBool;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
for ($i = 0; $i < 2; $i++) {
$shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 30, 30 + $i * 140, 320, 100);
$shape->getLineFormat()->getFillFormat()->setFillType(FillType::NoFill);
$shape->getFillFormat()->setFillType(FillType::Gradient);
$gradient = $shape->getFillFormat()->getGradientFormat();
$gradient->setGradientShape(GradientShape::Linear);
$gradient->getGradientStops()->clear();
$gradient->getGradientStops()->add(0, java("java.awt.Color")->RED);
$gradient->getGradientStops()->add(0.5, java("java.awt.Color")->GREEN);
$gradient->getGradientStops()->add(1, java("java.awt.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();
}
Pattern Fill
Un remplissage de motif applique un motif bicolore, tel que des points, des bandes ou des carreaux. Cet exemple utilise PatternFormat::setPatternStyle pour sélectionner un motif en treillis. PatternFormat::getBackColor fournit l’arrière‑plan gris clair, et PatternFormat::getForeColor fournit la couleur jaune du motif.
use aspose\slides\FillType;
use aspose\slides\PatternStyle;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$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(java("java.awt.Color")->LIGHT_GRAY);
$shape->getFillFormat()->getPatternFormat()->getForeColor()->setColor(java("java.awt.Color")->YELLOW);
$presentation->save("pattern_fill.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

Picture Fill
Un remplissage d’image utilise une image à l’intérieur d’une forme. Cet exemple nécessite une image locale et utilise Images::fromFile pour la charger dans la collection d’images de la présentation. Définir PictureFillFormat::setPictureFillMode sur le mode « tiled » répète l’image à l’intérieur du rectangle. L’image source utilisée ici est affichée ci‑dessous :

use aspose\slides\FillType;
use aspose\slides\Images;
use aspose\slides\PictureFillMode;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 50, 255, 130);
$shape->getFillFormat()->setFillType(FillType::Picture);
$shape->getFillFormat()->getPictureFillFormat()->setPictureFillMode(PictureFillMode::Tile);
$image = Images::fromFile("lotus.png");
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();
}
Le résultat :

Tile Picture As Texture
Si vous souhaitez définir une image en mosaïque comme texture et personnaliser le comportement du carrelage, vous pouvez utiliser les méthodes suivantes de la classe PictureFillFormat :
- setPictureFillMode : définit le mode de remplissage d’image —
TileouStretch. - setTileAlignment : spécifie l’alignement des tuiles dans la forme.
- setTileFlip : contrôle si la tuile est inversée horizontalement, verticalement ou les deux.
- setTileOffsetX : définit le décalage horizontal de la tuile (en points) depuis l’origine de la forme.
- setTileOffsetY : définit le décalage vertical de la tuile (en points) depuis l’origine de la forme.
- setTileScaleX : définit l’échelle horizontale de la tuile en pourcentage.
- setTileScaleY : définit l’échelle verticale de la tuile en pourcentage.
Cet exemple nécessite une image locale et configure PictureFillFormat pour la répéter à 50 % de sa taille d’origine. Des décalages de −32 points déplacent les tuiles horizontalement et verticalement ; l’alignement en bas‑à‑droite et le retournement dans les deux directions déterminent la disposition de la texture répétée.
use aspose\slides\FillType;
use aspose\slides\Images;
use aspose\slides\PictureFillMode;
use aspose\slides\Presentation;
use aspose\slides\RectangleAlignment;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
use aspose\slides\TileFlip;
$presentation = new Presentation();
try {
$firstSlide = $presentation->getSlides()->get_Item(0);
$shape = $firstSlide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 50, 190, 95);
$shape->getFillFormat()->setFillType(FillType::Picture);
$sourceImage = Images::fromFile("lotus.png");
try {
$presentationImage = $presentation->getImages()->addImage($sourceImage);
} finally {
$sourceImage->dispose();
}
$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();
}
Le résultat :

Solid Color Fill
Un remplissage uni donne à une forme une couleur unique et uniforme. Cet exemple définit FillFormat::setFillType sur le mode de remplissage solide et assigne le jaune via FillFormat::getSolidFillColor, puis enregistre le rectangle dans une présentation.
use aspose\slides\FillType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 50, 150, 75);
$shape->getFillFormat()->setFillType(FillType::Solid);
$shape->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->YELLOW);
$presentation->save("solid_color_fill.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

Copy Colors While Preserving Theme References
Utilisez ColorFormat::copyFrom pour copier une définition de couleur, y compris son type, sa référence de thème et ses transformations. Ceci est utile lors du transfert d’une couleur de remplissage entre formes qui doivent rester liées au thème de la présentation. La méthode copie uniquement la couleur ; elle ne copie pas le type de remplissage, le contour ou d’autres formats de forme. Définissez explicitement le type de remplissage de destination avec FillFormat::setFillType.
Cet exemple crée trois rectangles, de gauche à droite : la source, une copie consciente du thème, et une copie RGB fixe. La source utilise ColorFormat::setSchemeColor pour référencer la première couleur d’accent et ajoute une teinte via ColorOperationCollection::add. La copie RGB utilise la couleur de remplissage effective de la source, de sorte que les trois semblent identiques au départ. L’appel à ColorFormat::setColor définit une valeur RGB fixe et efface toute transformation de couleur existante.
use aspose\slides\ColorTransformOperation;
use aspose\slides\FillType;
use aspose\slides\ImageFormat;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\SchemeColor;
use aspose\slides\ShapeType;
use aspose\slides\SlideSizeScaleType;
$presentation = new Presentation();
try {
$presentation->getSlideSize()->setSize(660, 220, SlideSizeScaleType::DoNotScale);
$slide = $presentation->getSlides()->get_Item(0);
$initialAccent = new Java("java.awt.Color", 65, 105, 225);
$presentation->getMasterTheme()->getColorScheme()->getAccent1()->setColor($initialAccent);
$source = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 30, 40, 180, 140);
$themeCopy = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 240, 40, 180, 140);
$rgbCopy = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 450, 40, 180, 140);
foreach ([$source, $themeCopy, $rgbCopy] as $shape) {
$shape->getFillFormat()->setFillType(FillType::Solid);
$shape->getLineFormat()->getFillFormat()->setFillType(FillType::NoFill);
}
$sourceColor = $source->getFillFormat()->getSolidFillColor();
$sourceColor->setSchemeColor(SchemeColor::Accent1);
$sourceColor->getColorTransform()->add(ColorTransformOperation::Tint, 0.75);
$themeCopy->getFillFormat()->getSolidFillColor()->copyFrom($sourceColor);
$rgbCopy->getFillFormat()->getSolidFillColor()->setColor($source->getFillFormat()->getEffective()->getSolidFillColor());
$before = $slide->getImage(1.0, 1.0);
try {
$before->save("color-copy-before.png", ImageFormat::Png);
} finally {
$before->dispose();
}
// Les références de thème suivent la nouvelle couleur d'accent ; la valeur RGB fixe ne le fait pas.
$updatedAccent = new Java("java.awt.Color", 255, 69, 0);
$presentation->getMasterTheme()->getColorScheme()->getAccent1()->setColor($updatedAccent);
$after = $slide->getImage(1.0, 1.0);
try {
$after->save("color-copy-after.png", ImageFormat::Png);
} finally {
$after->dispose();
}
$presentation->save("copied_colors.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Avant le changement de thème, les trois remplissages correspondent :

Après le changement de thème, la source et la copie consciente du thème suivent la nouvelle couleur d’accent et conservent leur teinte. La copie RGB fixe reste bleue :

La définition copiée est indépendante de la source. Modifier ultérieurement la référence de thème de la source, assigner une autre couleur ou ajouter/supprimer ses transformations ne modifie pas la destination. Un changement de thème affecte toujours les deux formes parce que chacune fait référence de façon indépendante à la même couleur de thème.
Enregistrement et réouverture du PPTX conservent le type de couleur retourné par ColorFormat::getColorType, la référence de thème et la collection de transformations retournée par ColorFormat::getColorTransform ; cela ne convertit pas la définition en RGB.
Lors de copies entre différents contextes de thème, comme des présentations avec des palettes d’accent différentes, la référence copiée est résolue par rapport au thème de destination. La même référence et les mêmes transformations peuvent donc produire une couleur visible différente. Consultez Presentation Theme pour plus d’informations sur la configuration des couleurs de thème.
Use the Slide Background as a Shape Fill
Utilisez AutoShape::setUseBackgroundFill lorsqu’une forme doit correspondre à l’arrière‑plan de la diapositive, par exemple dans un modèle de présentation. Définissez le type de remplissage avec FillFormat::setFillType sur FillType::NotDefined d’abord pour supprimer tout remplissage explicite. Avec cette combinaison, la forme utilise l’arrière‑plan de la diapositive au lieu de son remplissage de style. Activer simplement le drapeau ne supprime pas un remplissage explicite existant.
Cela diffère de FillType::NoFill: le remplissage d’arrière‑plan couvre les objets situés derrière la forme avec la zone correspondante de l’arrière‑plan de la diapositive, tandis que « No Fill » laisse ces objets visibles. Un dégradé reste aligné avec la diapositive plutôt que de redémarrer à l’intérieur de chaque forme.
L’exemple suivant crée un arrière‑plan maître hérité par la diapositive et place une bande magenta derrière trois rectangles. Le rectangle de gauche utilise l’arrière‑plan, le rectangle du centre n’a aucun remplissage, et le rectangle de droite passe du remplissage d’arrière‑plan à un remplissage orange explicite.
use aspose\slides\BackgroundType;
use aspose\slides\FillType;
use aspose\slides\GradientShape;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
use aspose\slides\SlideSizeScaleType;
$presentation = new Presentation();
try {
$presentation->getSlideSize()->setSize(720, 400, SlideSizeScaleType::DoNotScale);
$slide = $presentation->getSlides()->get_Item(0);
// Hériter du dégradé du master.
$slide->getBackground()->setType(BackgroundType::NotDefined);
$slide->getLayoutSlide()->getBackground()->setType(BackgroundType::NotDefined);
$background = $slide->getLayoutSlide()->getMasterSlide()->getBackground();
$background->setType(BackgroundType::OwnBackground);
$background->getFillFormat()->setFillType(FillType::Gradient);
$gradient = $background->getFillFormat()->getGradientFormat();
$gradient->setGradientShape(GradientShape::Linear);
$gradient->setLinearGradientAngle(0);
$gradient->getGradientStops()->clear();
$startColor = new Java("java.awt.Color", 0, 0, 139);
$gradient->getGradientStops()->add(0, $startColor);
$endColor = new Java("java.awt.Color", 135, 206, 250);
$gradient->getGradientStops()->add(1, $endColor);
// Ajouter cet objet d'abord pour qu'il apparaisse derrière les rectangles.
$band = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 25, 150, 670, 100);
$band->getFillFormat()->setFillType(FillType::Solid);
$band->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->MAGENTA);
$band->getLineFormat()->getFillFormat()->setFillType(FillType::NoFill);
$backgroundShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 100, 160, 200);
$backgroundShape->getFillFormat()->setFillType(FillType::NotDefined);
$backgroundShape->setUseBackgroundFill(true);
$noFillShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 280, 100, 160, 200);
$noFillShape->getFillFormat()->setFillType(FillType::NoFill);
$explicitShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 510, 100, 160, 200);
$explicitShape->getFillFormat()->setFillType(FillType::NotDefined);
$explicitShape->setUseBackgroundFill(true);
// Désactiver le remplissage d'arrière-plan avant d'appliquer un remplissage explicite.
$explicitShape->setUseBackgroundFill(false);
$explicitShape->getFillFormat()->setFillType(FillType::Solid);
$fillColor = new Java("java.awt.Color", 255, 165, 0);
$explicitShape->getFillFormat()->getSolidFillColor()->setColor($fillColor);
$presentation->save("background_fill.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat, de gauche à droite : background fill, no fill, et explicit fill. La bande magenta est masquée par les rectangles gauche et droit mais reste visible à travers le rectangle du centre.

Le même comportement s’applique à un arrière‑plan défini directement sur la diapositive ou hérité d’une mise en page. La forme utilise l’arrière‑plan résolu de la diapositive ; l’exemple laisse les arrière‑plans de la diapositive et de la mise en page non définis afin que le maître les fournisse.
Set Transparency
Pour un remplissage solide, le composant alpha de la couleur contrôle l’opacité : 0 est totalement transparent et 255 totalement opaque. Cet exemple utilise une valeur alpha de 128 pour un rectangle jaune, le rendant approximativement à 50 % transparent afin que le rectangle en dessous reste visible. La couleur est assignée via FillFormat::getSolidFillColor.
use aspose\slides\FillType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$solidShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 50, 150, 75);
$transparentShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 80, 80, 150, 75);
$transparentShape->getFillFormat()->setFillType(FillType::Solid);
$fillColor = new Java("java.awt.Color", 255, 255, 0, 128);
$transparentShape->getFillFormat()->getSolidFillColor()->setColor($fillColor);
$presentation->save("shape_transparency.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

Rotate Shapes
Utilisez Shape::setRotation pour faire pivoter une forme dans le plan de la diapositive. L’angle est mesuré en degrés ; cet exemple fait pivoter un rectangle de 5 degrés dans le sens des aiguilles d’une montre et enregistre la présentation.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 50, 150, 75);
$shape->setRotation(5);
$presentation->save("shape_rotation.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

Add 3D Bevel Effects
Utilisez Shape::getThreeDFormat pour donner à une forme de la profondeur et des biseaux. Cet exemple crée une ellipse verte avec un contour orange, définit ThreeDFormat::setDepth à 4 points, et applique un biseau supérieur circulaire d’une largeur et hauteur de 6 points via ThreeDFormat::getBevelTop. Une caméra orthographique frontale et un éclairage à trois points rendent le biseau visible.
use aspose\slides\BevelPresetType;
use aspose\slides\CameraPresetType;
use aspose\slides\FillType;
use aspose\slides\LightRigPresetType;
use aspose\slides\LightingDirection;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$shape = $slide->getShapes()->addAutoShape(ShapeType::Ellipse, 50, 50, 100, 100);
$shape->getFillFormat()->setFillType(FillType::Solid);
$fillColor = new Java("java.awt.Color", 0, 128, 0);
$shape->getFillFormat()->getSolidFillColor()->setColor($fillColor);
$shape->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
$lineColor = new Java("java.awt.Color", 255, 165, 0);
$shape->getLineFormat()->getFillFormat()->getSolidFillColor()->setColor($lineColor);
$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();
}
Le résultat :

Add 3D Rotation Effects
La vue 3D d’une forme est contrôlée par les paramètres de sa caméra. Cet exemple utilise Camera::setRotation avec des angles de latitude, longitude et révolution de 40, 35 et 20 degrés respectivement. Il sélectionne une caméra isométrique via Camera::setCameraType et un éclairage équilibré via LightRig::setLightType, puis enregistre le rectangle formaté.
use aspose\slides\CameraPresetType;
use aspose\slides\LightRigPresetType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$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();
}
Le résultat :

Control Black-and-White Rendering for Shapes
La méthode Shape::setBlackWhiteMode spécifie comment une forme individuelle est rendue lorsqu’une présentation est visualisée ou traitée en mode noir et blanc. Elle ne déclenche pas l’affichage noir et blanc en soi, et ne modifie pas le remplissage, le contour ou d’autres formats de la forme en mode couleur normale.
Utilisez une valeur de la classe BlackWhiteMode pour sélectionner le comportement souhaité. Par exemple, Automatic laisse l’application de rendu choisir la conversion, Gray et LightGray utilisent un rendu gris, BlackWhite n’utilise que le noir et blanc, Black et White imposent une couleur unique, Color préserve les couleurs normales, et Hidden omet la forme en mode noir et blanc. NotDefined signifie qu’aucun mode au niveau de la forme n’est assigné.
Cet exemple crée un rectangle orange et définit Shape::setBlackWhiteMode sur gris. La forme enregistrée conserve son remplissage orange pour l’affichage couleur normale et demande un rendu gris aux applications qui respectent les paramètres d’affichage noir et blanc :
use aspose\slides\BlackWhiteMode;
use aspose\slides\FillType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 50, 200, 100);
$shape->getFillFormat()->setFillType(FillType::Solid);
$fillColor = new Java("java.awt.Color", 255, 165, 0);
$shape->getFillFormat()->getSolidFillColor()->setColor($fillColor);
$shape->setBlackWhiteMode(BlackWhiteMode::Gray);
$presentation->save("shape_black_white_mode.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
En mode couleur normale, le rectangle conserve son remplissage orange. Dans un flux de travail d’affichage noir et blanc, il utilise le rendu gris parce que son mode est réglé sur Gray. Cela vous permet de conserver une diapositive en couleur complète tout en définissant une apparence distincte pour l’impression, l’aperçu ou d’autres flux qui honorent les paramètres d’affichage noir et blanc de la présentation.
Reset Formatting
Utilisez Slide::reset pour restaurer la position, la taille et le formatage des espaces réservés de diapositive à partir de leurs espaces réservés de mise en page correspondants. Cet exemple nécessite une présentation existante contenant des espaces réservés liés à la mise en page et réinitialise chaque diapositive avant l’enregistrement. Les formes sans espace réservé correspondant ne sont pas réinitialisées.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation("sample.pptx");
try {
for ($i = 0; $i < java_values($presentation->getSlides()->size()); $i++) {
$slide = $presentation->getSlides()->get_Item($i);
$slide->reset();
}
$presentation->save("reset_formatting.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
FAQ
Le formatage des formes affecte-t-il la taille finale du fichier de présentation ?
Les couleurs, styles de ligne et paramètres d’effet ajoutent généralement peu de données comparés aux images et médias incorporés. Les remplissages d’image peuvent augmenter la taille du fichier parce que leurs images sont stockées dans la présentation.
Comment détecter les formes sur une diapositive qui partagent un même formatage afin de les regrouper ?
Comparez les propriétés clés de formatage de chaque forme — remplissage, ligne et paramètres d’effet. Si toutes les valeurs correspondantes sont identiques, traitez leurs styles comme identiques et regroupez logiquement ces formes, ce qui simplifie la gestion ultérieure des styles.
Puis‑je enregistrer un ensemble de styles de forme personnalisés dans un fichier séparé pour les réutiliser dans d’autres présentations ?
Oui. Stockez des formes exemples avec les styles souhaités dans un jeu de diapositives modèle ou un fichier modèle .POTX. Lors de la création d’une nouvelle présentation, ouvrez le modèle, clonez les formes stylisées dont vous avez besoin et réappliquez leur formatage où cela est requis.