Element Builders – SVG-Elemente in C# mit der Fluent Builder API erstellen

Die Aspose.SVG Builder API ermöglicht Entwicklern, SVG-Elemente in C# mit einer Fluent-Builder-Syntax programmgesteuert zu erstellen und zu bearbeiten. Statt SVG-XML manuell zu erzeugen oder DOM-Attribute direkt zu ändern, bieten Element Builders einen saubereren und besser wartbaren Ansatz für die SVG-Erzeugung.

Die Builder API unterstützt gängige SVG-Elemente wie Rechtecke, Kreise, Pfade, Linien, Polygone, Text und Gruppen. Mit verschachtelten Buildern und verketteten Methoden können Entwickler komplexe SVG-Grafiken mit weniger Boilerplate-Code und besserer Lesbarkeit erzeugen.

In diesem Artikel erfahren Sie, wie Sie SVG-Elemente in C# erstellen, SVG-Grafiken programmgesteuert aufbauen und vorhandene SVG-Dokumente mit Aspose.SVG for .NET ändern. Sie lernen die Basisklasse SVGElementBuilder, die Klasse SVGSVGElementBuilder, spezialisierte Element-Builder und deren Nutzen für die SVG-Programmierung kennen.

Was sind SVG Element Builders?

Element Builders sind spezialisierte Builder-Klassen zum programmgesteuerten Erstellen von SVG-Elementen. Jeder Builder entspricht einem bestimmten SVG-Element und stellt stark typisierte Methoden zum Konfigurieren von SVG-Attributen und Stilen bereit.

Die Builder API unterstützt:

Die Fluent-Syntax vereinfacht die SVG-Erzeugung und verbessert die Wartbarkeit von Code in .NET-Anwendungen.

Unterstützte SVG Element Builders

BuilderSVG-Element
SVGSVGElementBuilder<svg>
SVGRectElementBuilder<rect>
SVGCircleElementBuilder<circle>
SVGLineElementBuilder<line>
SVGPathElementBuilder<path>
SVGTextElementBuilder<text>
SVGGElementBuilder<g>
SVGPolygonElementBuilder<polygon>
SVGPolylineElementBuilder<polyline>

Eine vollständige Liste der SVG Element Builders finden Sie auf der API-Referenzseite Aspose.Svg.Builder.

Neue Elemente erstellen

Die Aspose.SVG SVG Builder API verwendet das Fluent Builder Pattern, eine Entwurfsmethode, die gut zu den Anforderungen an Einfachheit, Klarheit und Vielseitigkeit bei der SVG-Manipulation passt.

Fluent Builder Pattern

In der SVG Builder API wird das Fluent Builder Pattern verwendet, um das Erstellen und Aktualisieren von SVG-Elementen intuitiver und weniger fehleranfällig zu machen. Der Kern dieses Musters sind Methoden, die ein SVG-Element konfigurieren und die Builder-Instanz für Method Chaining zurückgeben.

Lambda-Ausdrücke verbessern dabei die Klarheit und Kürze der Builder-Konfiguration. Sie ermöglichen es, Attribute und Stile von SVG-Elementen detailliert und dennoch kompakt zu definieren:

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    }

Hier ist circle => circle.Cx(100).Cy(100).R(50).Fill(Color.Red).Stroke(Paint.None).StrokeWidth(2) eine kompakte Möglichkeit, Mittelpunkt, Radius, Füllung und Kontur des Kreises zu konfigurieren. Dieser Ansatz vereinfacht die Elementkonfiguration und verbessert die Lesbarkeit sowie Wartbarkeit des Codes.

SVG von Grund auf erstellen

Hier sehen Sie einen kompakten Ansatz zum Erstellen von SVGs von Grund auf mit 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}

Visualisierung der Datei svg-from-scratch.svg

Das Beispiel nutzt das Fluent Builder Pattern in SVGSVGElementBuilder, um SVG-Elemente zu erstellen. Dieses Muster bietet eine ausdrucksstarke und wartbare Möglichkeit, SVG-Dokumente zu generieren, im Vergleich zu dem im Artikel SVG-Datei bearbeiten beschriebenen Ansatz, der stärker auf Low-Level-DOM-Manipulation und explizite Attributsetzung setzt. Dieser Ansatz:

SVG bearbeiten

Eine leistungsfähige Technik zum programmgesteuerten Bearbeiten von SVGs ist die Verwendung von Element Builders.

Neue Elemente hinzufügen

Das Bearbeiten von SVGs mit Element Builders bietet einen flexiblen Ansatz zur programmgesteuerten Manipulation von Vektorgrafiken. Im folgenden Beispiel wird eine vorhandene SVG-Datei geladen, erweitert und gespeichert:

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}

In diesem Beispiel:

Abbildung (a) zeigt die ursprüngliche Datei circles.svg, und Abbildung (b) zeigt die bearbeitete Datei circles-edited.svg mit hinzugefügtem Kreis und Polyline.

Visualisierung der ursprünglichen Datei circles.svg und der bearbeiteten Datei circles-edited.svg mit hinzugefügtem Kreis und Polyline.

Vorhandene Elemente ändern

Im folgenden C#-Beispiel aktualisieren wir ein vorhandenes SVG-Dokument, indem wir Füll- und Konturfarbe des ersten SVG-Elements <circle> im Dokument ändern:

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 bieten die Methode Build(T element), um vorhandene SVG-Elemente zu aktualisieren und deren Attribute oder Stile zu ändern. Abbildung (a) zeigt die ursprüngliche Datei circles.svg, und Abbildung (b) zeigt circles-modified.svg mit dem neu eingefärbten ersten Kreiselement.

Visualisierung der ursprünglichen Datei circles.svg und der geänderten Datei circles-modified.svg mit neu eingefärbtem ersten Kreiselement.

Beispiel für die Verwendung von Element Builders

Der folgende Codeausschnitt zeigt, wie Sie mit Element Builders ein SVG-Dokument mit verschiedenen SVG-Formelementen erstellen.

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}

Visualisierung der Datei svg-elements.svg mit Namen und Bildern der sieben SVG-Formelemente.

Element Builders bieten eine flüssige und ausdrucksstarke Syntax zum Erstellen von SVG-Elementen und verbessern die Lesbarkeit und Wartbarkeit des Codes. In diesem Beispiel erstellt SVGSVGElementBuilder ein SVG-Element mit den Attributen width, height und viewBox. Anschließend werden Rechtecke, Kreise, Ellipsen, Linien, Polylinien, Polygone und Pfade erzeugt und innerhalb von <g>-Elementen positioniert und gestaltet.

Warum Fluent SVG Builders verwenden?

DOM-ManipulationBuilder API
Manuelle AttributverwaltungStark typisierte Methoden
Ausführlicherer CodeFluent Method Chaining
Schwerer zu wartenBesser lesbar
Wiederholte XML-OperationenWiederverwendbare Builder-Logik

FAQ

1. Warum verwenden Entwickler Builder APIs statt direkter XML-Erzeugung?
Builder APIs ersetzen manuelle XML-Erzeugung durch typisierte Fluent-Methoden und machen SVG-Code leichter lesbar, wartbar und erweiterbar.

2. Ist das generierte SVG standardkonform?
Ja. Aspose.SVG erzeugt standardbasiertes SVG-Markup, das mit modernen SVG-Rendering-Engines kompatibel ist.

3. Kann ich mit Element Builders interaktive SVG-Grafiken erzeugen?
Ja. Erzeugte SVG-Elemente können später in Webanwendungen mit CSS und JavaScript gestaltet, animiert oder manipuliert werden.

4. Können generierte SVG-Grafiken direkt in HTML-Seiten eingebettet werden?
Ja. Mit Aspose.SVG erstellte SVG-Dokumente können inline in HTML eingebettet oder als eigenständige SVG-Dateien verwendet werden.

Häufige Fehler und Lösungen

ProblemMögliche UrsacheEmpfohlene Lösung
SVG-Element ist nicht sichtbarFehlende Füllung oder KonturFill() oder Stroke() anwenden
SVG-Änderungen werden nicht gespeichertDokument wurde nach der Änderung nicht gespeichertNach Updates document.Save() aufrufen
Elemente liegen außerhalb der ZeichenflächeFalsche Koordinaten oder falsche viewBoxSVG-Abmessungen und Positionen prüfen
Vorhandenes Element wird nicht aktualisiertFalsche ElementreferenzSicherstellen, dass das Zielelement korrekt abgerufen wurde
Formen erscheinen verzerrtUngültige viewBox-ProportionenKonsistente SVG-Koordinatensysteme verwenden

Verwandte Ressourcen

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.