Element Builders – Créer des éléments SVG en C# avec Fluent Builder API

L’ Aspose.SVG Builder API permet aux développeurs de créer et de modifier des éléments SVG par programmation en C# avec une syntaxe fluent builder. Au lieu de construire manuellement du XML SVG ou de manipuler directement les attributs DOM, Element Builders offre une approche plus propre et plus maintenable pour générer du SVG.

La Builder API prend en charge les éléments SVG courants tels que les rectangles, cercles, chemins, lignes, polygones, textes et groupes. Grâce aux builders imbriqués et aux méthodes chaînées, les développeurs peuvent générer des graphiques SVG complexes avec moins de code répétitif et une meilleure lisibilité.

Cet article explique comment créer des éléments SVG en C#, construire des graphiques SVG par programmation et modifier des documents SVG existants avec Aspose.SVG for .NET. Vous découvrirez la classe de base SVGElementBuilder, la classe SVGSVGElementBuilder, les builders spécialisés et la manière dont ils simplifient la programmation SVG.

Que sont les SVG Element Builders?

Les Element Builders sont des classes spécialisées utilisées pour créer des éléments SVG par programmation. Chaque builder correspond à un élément SVG précis et fournit des méthodes fortement typées pour configurer les attributs et styles SVG.

La Builder API prend en charge:

La syntaxe fluide simplifie la génération SVG et améliore la maintenabilité du code dans les applications .NET.

SVG Element Builders pris en charge

BuilderÉlément SVG
SVGSVGElementBuilder<svg>
SVGRectElementBuilder<rect>
SVGCircleElementBuilder<circle>
SVGLineElementBuilder<line>
SVGPathElementBuilder<path>
SVGTextElementBuilder<text>
SVGGElementBuilder<g>
SVGPolygonElementBuilder<polygon>
SVGPolylineElementBuilder<polyline>

Vous trouverez la liste complète des builders SVG sur la page de référence API Aspose.Svg.Builder.

Création de nouveaux éléments

L’API Aspose.SVG SVG Builder utilise le Fluent Builder Pattern, une approche de conception adaptée aux besoins de simplicité, de clarté et de polyvalence dans la manipulation SVG.

Fluent Builder Pattern

Dans SVG Builder API, le Fluent Builder Pattern simplifie la création et la mise à jour des éléments SVG, rendant le processus plus intuitif et moins sujet aux erreurs. Le principe consiste à utiliser des méthodes qui configurent un élément SVG et renvoient l’instance du builder pour le chaînage de méthodes.

Les expressions lambda améliorent la clarté et la concision des méthodes de configuration. Elles permettent de définir les attributs et styles des éléments SVG de manière détaillée mais compacte:

1    using (SVGDocument document = new SVGDocument())
2    {
3        SVGSVGElement svgElement = new SVGSVGElementBuilder()
4            .AddCircle(circle => circle
5                .Cx(100).Cy(100).R(50)
6                .Fill(Color.Red).Stroke(Paint.None)
7                .StrokeWidth(2))
8            .Build(document);
9    }

Ici, circle => circle.Cx(100).Cy(100).R(50).Fill(Color.Red).Stroke(Paint.None).StrokeWidth(2) est une façon concise de configurer le centre, le rayon, le remplissage et le contour du cercle. Cette approche simplifie la configuration des éléments et améliore la lisibilité ainsi que la maintenabilité du code.

Créer du SVG à partir de zéro

Voici une approche concise pour créer des SVG à partir de zéro avec C#.

1using Aspose.Svg.Builder;
2using System.Drawing;
3using System.IO;
 1    // Create SVG from scratch in C# using Builder API
 2
 3    // Create an <svg> element with specified width, height and viewBox, and add into it other required elements
 4    SVGSVGElement svg = new SVGSVGElementBuilder()
 5        .Width(700).Height(300)
 6        .ViewBox(0, 0, 700, 300)
 7
 8        .AddG(g => g
 9        .AddCircle(circle => circle.Cx(130).Cy(130).R(60).Fill(Paint.None).Stroke(Color.FromArgb(200, 0, 0)).StrokeWidth(70).StrokeDashArray(2, 14))
10        .AddText("I can create SVG from scratch!", x: 270, y: 140, fontSize: 30, fill: Color.Teal)
11        )
12        .Build(document.FirstChild as SVGSVGElement);
13
14    // Save the document
15    document.Save(Path.Combine(OutputDir, "svg-from-scratch.svg"));
16}

Visualisation du fichier svg-from-scratch.svg

L’exemple utilise le Fluent Builder Pattern dans SVGSVGElementBuilder pour construire les éléments SVG. Ce modèle offre une manière expressive et maintenable de générer des documents SVG par rapport à l’approche décrite dans l’article Modifier le fichier SVG, qui repose davantage sur la manipulation DOM de bas niveau et la définition explicite d’attributs. Cette approche:

Modification du SVG

Une technique puissante pour modifier des SVG par programmation consiste à utiliser Element Builders.

Ajout de nouveaux éléments

Modifier des SVG avec des Element Builders offre une approche puissante et flexible pour manipuler des graphiques vectoriels par programmation. Dans l’exemple suivant, un fichier SVG existant est chargé, enrichi, puis enregistré:

1using Aspose.Svg.Builder;
2using System.Drawing;
3using System.IO;
 1// Add multiple shapes (circle and polyline) to an existing SVG document using SVG Builder
 2
 3string documentPath = Path.Combine(DataDir, "circles.svg");
 4
 5// Initialize an SVG document
 6using (SVGDocument document = new SVGDocument(documentPath))
 7{
 8    // Create a <circle> element with attributes
 9    SVGCircleElement circle = new SVGCircleElementBuilder()
10     .Cx(350).Cy(70).R(50).Fill(Paint.None).Stroke(Color.FromArgb(80, 132, 132)).StrokeWidth(10)
11     .Build(document);
12
13    // Append the newly created <circle> element to the root <svg> element
14    document.RootElement.AppendChild(circle);
15
16    // Create a <polyline> element with attributes
17    SVGPolylineElement polyline = new SVGPolylineElementBuilder()
18    .Points(new double[] { 125, 130, 275, 180, 425, 130 }).Stroke(Color.FromArgb(80, 132, 132)).Fill(Paint.None).StrokeWidth(10)
19    .Build(document);
20
21    // Append the newly created <polyline> element to the root <svg> element
22    document.RootElement.AppendChild(polyline);
23
24    // Save the document
25    document.Save(Path.Combine(OutputDir, "circles-edited.svg"));
26}

Dans cet exemple:

La figure (a) montre le fichier circles.svg original, et la figure (b) montre le fichier circles-edited.svg modifié avec un cercle et une polyligne ajoutés.

Visualisation du fichier circles.svg original et du fichier circles-edited.svg modifié avec des éléments cercle et polyligne ajoutés.

Modification d’éléments existants

Dans l’exemple C# suivant, nous mettons à jour un document SVG existant en changeant la couleur de remplissage et de contour du premier élément SVG <circle> du document:

1using Aspose.Svg;
2using Aspose.Svg.Builder;
3using System.Drawing;
4using Aspose.Svg.Dom.Svg;
5using System.Linq;
6using System.IO;
 1// Modify an existing SVG element in C# using SVG Builder
 2
 3string documentPath = Path.Combine(DataDir, "circles.svg");
 4
 5// Initialize an SVG document
 6using (SVGDocument document = new SVGDocument(documentPath))
 7{
 8    // Assume an existing SVG element is part of the document
 9    SVGCircleElement circle = document.GetElementsByTagName("circle").First() as SVGCircleElement;
10
11    // Modify the first <circle> element using SVGCircleElementBuilder
12    new SVGCircleElementBuilder()
13        .Stroke(Color.DarkRed).Fill(Color.LightGray)
14
15        // The first <circle> element is now updated with new configurations
16        .Build(circle);
17
18    // Save the document
19    document.Save(Path.Combine(OutputDir, "circles-modified.svg"));
20}

Element Builders fournit la méthode Build(T element) pour mettre à jour des éléments SVG existants et modifier leurs attributs ou styles. La figure (a) montre le fichier circles.svg original, et la figure (b) montre circles-modified.svg avec le premier cercle recoloré.

Visualisation du fichier circles.svg original et du fichier circles-modified.svg modifié avec le premier cercle recoloré.

Exemple d’utilisation de Element Builders

L’extrait suivant montre comment utiliser Element Builders pour créer un document SVG contenant différents éléments de forme SVG.

1using Aspose.Svg;
2using Aspose.Svg.Builder;
3using System.Drawing;
4using Aspose.Svg.Dom.Svg;
5using System.IO;
 1// Create all basic SVG shapes programmatically in C# using SVG Builder
 2
 3string svgContent = "<svg xmlns=\"http://www.w3.org/2000/svg\"></svg>";
 4using (SVGDocument document = new SVGDocument(svgContent, "."))
 5{
 6    SVGSVGElement svg = new SVGSVGElementBuilder()
 7        .Width(100, LengthType.Percentage).Height(100, LengthType.Percentage)
 8        .ViewBox(0, 0, 800, 800)
 9
10            .AddG(g => g.FontSize(20).TextAnchor(TextAnchor.End)
11                .AddText("<rect>", y: 30)
12                .AddText("<circle>", y: 70)
13                .AddText("<ellipse>", y: 110)
14                .AddText("<line>", y: 150)
15                .AddText("<polyline>", x: 300, y: 30)
16                .AddText("<polygon>", x: 300, y: 70)
17                .AddText("<path>", x: 300, y: 110)
18                )
19
20            .AddG(gg => gg.Fill(Color.Teal).StrokeWidth(3)
21                .AddRect(r => r.X(35).Y(5).Width(30).Height(30))
22                .AddCircle(c => c.Cx(50).Cy(60).R(17))
23                .AddEllipse(e => e.Cx(50).Cy(100).Rx(25).Ry(12))
24                .AddLine(l => l.X1(30).X2(70).Y1(140).Y2(140).Stroke(Color.Teal))
25                )
26            .AddG(ggg => ggg.Fill(Paint.None).StrokeWidth(3).Stroke(Color.Teal).Transform(t => t.Translate(300, -160))
27                .AddPolygon(points: new double[] { 30, 215, 90, 215, 120, 230, 70, 240, 30, 215 }, fill: Color.Teal)
28                .AddPolyline(points: new double[] { 30, 200, 65, 170, 90, 190, 120, 180 })
29                .AddPath(d: path => path.M(30, 275).Q(55, 250, 70, 250).T(80, 275).T(120, 260))
30                )
31
32        .Build(document.FirstChild as SVGSVGElement);
33    document.Save(Path.Combine(OutputDir, "svg-elements.svg"));
34}

Visualisation du fichier svg-elements.svg avec les noms et images des sept éléments de forme SVG.

Element Builders fournit une syntaxe fluide et expressive pour construire des éléments SVG, ce qui améliore la lisibilité et la maintenabilité du code. Dans cet exemple, SVGSVGElementBuilder construit un élément SVG avec les attributs width, height et viewBox. Le Fluent Builder Pattern est ensuite utilisé pour créer des rectangles, cercles, ellipses, lignes, polylignes, polygones et chemins, chacun étant positionné et stylisé dans des éléments <g>.

Pourquoi utiliser Fluent SVG Builders?

Manipulation DOMBuilder API
Gestion manuelle des attributsMéthodes fortement typées
Code plus verbeuxSyntaxe fluide chaînée
Plus difficile à maintenirPlus facile à lire
Opérations XML répétéesLogique de builder réutilisable

FAQ

1. Pourquoi utiliser Builder APIs au lieu de générer directement du XML?
Builder APIs remplace la construction XML manuelle par des méthodes fluides typées, ce qui rend le code SVG plus lisible, maintenable et extensible.

2. Le SVG généré respecte-t-il les standards?
Oui. Aspose.SVG génère un balisage SVG basé sur les standards et compatible avec les moteurs de rendu SVG modernes.

3. Puis-je générer des graphiques SVG interactifs avec Element Builders?
Oui. Les éléments SVG générés peuvent ensuite être stylisés, animés ou manipulés avec CSS et JavaScript dans des applications web.

4. Les graphiques SVG générés peuvent-ils être intégrés directement dans des pages HTML?
Oui. Les documents SVG créés avec Aspose.SVG peuvent être intégrés en ligne dans HTML ou utilisés comme fichiers SVG autonomes.

Erreurs courantes et corrections

ProblèmeCause possibleCorrection recommandée
L’élément SVG n’est pas visibleRemplissage ou contour manquantAppliquer Fill() ou Stroke()
Les changements SVG ne sont pas enregistrésLe document n’a pas été enregistré après modificationAppeler document.Save() après les mises à jour
Les éléments apparaissent hors du canevasCoordonnées ou viewBox incorrectesVérifier les dimensions et positions SVG
L’élément existant n’est pas mis à jourRéférence d’élément incorrecteVérifier que l’élément cible est bien récupéré
Les formes semblent déforméesProportions viewBox invalidesUtiliser des systèmes de coordonnées SVG cohérents

Ressources connexes

Close
Loading

Analyzing your prompt, please hold on...

An error occurred while retrieving the results. Please refresh the page and try again.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.