SVG erstellen, SVG laden und lesen in C#

Um eine Aufgabe auszuführen, müssen Sie ein Dokument erstellen oder laden. Mit der Aspose.SVG für .NET-API können Sie ein SVG-Dokument von Grund auf erstellen und ein vorhandenes SVG aus verschiedenen Quellen laden. Die API stellt die Klasse SVGDocument bereit, die über mehrere Konstruktoren verfügt, mit denen Sie neue Klasseninstanzen erstellen können. Das SVGDocument ist die Wurzel der SVG-DOM-Hierarchie, enthält den gesamten Inhalt und basiert vollständig auf den Spezifikationen W3C SVG 2.0 und WHATWG DOM.

SVG-Dateien können erstellt und geladen werden:

Dieser Artikel enthält einige Beispiele für das Erstellen und Laden von SVG-Dateien mit Aspose.SVG für die .NET-API. Das SVGDocument verfügt über eine Vielzahl überladener Konstruktoren, mit denen Sie ein leeres Dokument erstellen oder es aus einer Datei, URL, einem Stream usw. laden können.

Erstellen Sie ein leeres SVG-Dokument

Aspose.SVG für .NET API stellt die Klasse SVGDocument bereit, die zum Erstellen eines leeren Dokuments mit ihrem Standardkonstruktor verwendet werden kann. Sobald das Dokumentobjekt erstellt ist, kann es später mit SVG-Elementen gefüllt werden. Der folgende C#-Codeausschnitt zeigt die Verwendung des Standardkonstruktors SVGDocument() zum Erstellen eines SVG-Dokuments.

1using Aspose.Svg;
2...
3
4    // Initialize an empty SVG document
5    using (var document = new SVGDocument())
6    {
7        // Work with the SVG document here...
8    }

Wenn Sie ein erstelltes leeres SVG-Dokument in einer Datei speichern möchten, verwenden Sie den folgenden C#-Codeausschnitt:

 1using Aspose.Svg;
 2using System.IO;
 3...
 4
 5    // Prepare output path for a document saving
 6    string documentPath = Path.Combine(OutputDir, "empty.svg");
 7
 8	// Initialize an empty SVG document
 9	using (var document = new SVGDocument())
10	{
11	    // Work with the SVG document here...
12
13	    // Save the document to a file
14	    document.Save(documentPath);
15	}

Weitere Einzelheiten zum Speichern von SVG-Dateien finden Sie im Abschnitt SVG-Dokument speichern. Im Artikel SVG-Datei bearbeiten erfahren Sie, wie Sie SVG mit der Aspose.SVG für .NET-Bibliothek bearbeiten und finden detaillierte Beispiele, wie Sie neue Elemente zu SVG-Dokumenten hinzufügen und SVG-Filter auf Bitmaps anwenden.

Erstellen Sie SVG aus einem Speicherstring

Sie können SVG aus einem String-Inhalt mit dem Konstruktor SVGDocument (string, string) erstellen. Wenn Sie ein Dokument aus einer Benutzerzeichenfolge direkt in Ihrem Code erstellen möchten und es nicht in einer Datei speichern müssen, könnte Ihnen das folgende Beispiel helfen: Wir erstellen ein SVG-Dokument, das einen Kreis mit einem Radius von 40 enthält Pixel.

 1using Aspose.Svg;
 2...
 3
 4    // Prepare SVG code
 5    var documentContent = "<svg xmlns=\"https://www.w3.org/2000/svg\"><circle cx=\"50\" cy=\"50\" r=\"40\" /></svg>";	
 6
 7	// Initialize an SVG document from a string content
 8	using (var document = new SVGDocument(documentContent, "."))
 9	{
10	    // Work with the document here...
11	}

Erstellen Sie SVG aus einem Stream

Um SVG aus einem Stream zu erstellen, verwenden Sie einen der SVGDocument()-Konstruktoren:

 1using Aspose.Svg;
 2using System.IO;
 3...
 4
 5    //Prepare a path to a file required for a FileStream object creating
 6    string documentPath = Path.Combine(DataDir, "bezier-curves.svg");
 7
 8	// Create a FileStream object
 9	using (var stream = new FileStream(documentPath, FileMode.Open, FileAccess.Read))
10	{
11	    // Initialize an SVG document from the stream
12		using (var document = new SVGDocument(stream, "."))
13	    {
14	        // Work with the document
15	    }
16	}

Erstellen Sie benutzerdefinierte SVG-Dokumente mit der SVG Builder-API

Die SVG Builder-API bietet eine leistungsstarke und flexible Möglichkeit, SVG-Dokumente programmgesteuert zu erstellen. Durch die Nutzung der Klasse SVGSVGElementBuilder können Entwickler problemlos komplexe SVG-Grafiken mit detaillierten Anpassungsoptionen erstellen. Weitere Informationen zur Verwendung der SVG Builder-API finden Sie im Dokumentationsartikel SVG Builder API – Erweiterte SVG-Erstellung und -Änderung.

Hier ist ein Beispiel, das zeigt, wie man ein benutzerdefiniertes SVG-Dokument mit verschiedenen grafischen Elementen erstellt:

 1using Aspose.Svg;
 2using Aspose.Svg.Builder;
 3using System.Drawing;
 4...
 5
 6    // Initialize an SVG document
 7    using (var document = new SVGDocument())
 8    {
 9        // Create an <svg> element with specified width, height and viewBox, and add into it other required elements
10        var svg = new SVGSVGElementBuilder()
11            .Width(100).Height(100)
12            .ViewBox(-21, -21, 42, 42)
13            .AddDefs(def => def
14                .AddRadialGradient(id: "b", cx: .2, cy: .2, r: .5, fx: .2, fy: .2, extend: ev => ev
15                    .AddStop(offset: 0, stopColor: Color.FromArgb(0xff, 0xff, 0xFF), stopOpacity: .7)
16                    .AddStop(offset: 1, stopColor: Color.FromArgb(0xff, 0xff, 0xFF), stopOpacity: 0)
17                )
18                .AddRadialGradient(id: "a", cx: .5, cy: .5, r: .5, extend: ev => ev
19                    .AddStop(offset: 0, stopColor: Color.FromArgb(0xff, 0xff, 0x00))
20                    .AddStop(offset: .75, stopColor: Color.FromArgb(0xff, 0xff, 0x00))
21                    .AddStop(offset: .95, stopColor: Color.FromArgb(0xee, 0xee, 0x00))
22                    .AddStop(offset: 1, stopColor: Color.FromArgb(0xe8, 0xe8, 0x00))
23                )
24            )
25            .AddCircle(r: 20, fill: "url( #a)", stroke: Color.FromArgb(0, 0, 0), extend: c => c.StrokeWidth(.15))
26            .AddCircle(r: 20, fill: "b")
27            .AddG(g => g.Id("c")
28                .AddEllipse(cx: -6, cy: -7, rx: 2.5, ry: 4)
29                .AddPath(fill: Paint.None, stroke: Color.FromArgb(0, 0, 0), d: "M10.6 2.7a4 4 0 0 0 4 3", extend: e => e.StrokeWidth(.5).StrokeLineCap(StrokeLineCap.Round))
30            )
31            .AddUse(href: "#c", extend: e => e.Transform(t => t.Scale(-1, 1)))
32            .AddPath(d: "M-12 5a13.5 13.5 0 0 0 24 0 13 13 0 0 1-24 0", fill:Paint.None, stroke: Color.FromArgb(0,0,0), extend: e => e.StrokeWidth(.75))
33            .Build(document.FirstChild as SVGSVGElement);
34
35        // Save the SVG document
36        document.Save(OutputFolder + "face.svg");
37    }

Dieses Code-Snippet erstellt ein SVG-Dokument mit einem komplexen Design und demonstriert die Flexibilität und Leistungsfähigkeit der SVG Builder-API zum programmgesteuerten Generieren benutzerdefinierter SVG-Grafiken. Im obigen C#-Code erstellen wir ein SVG-Dokument mit Elementen wie Kreisen, Ellipsen, Pfaden und Farbverläufen. Das resultierende SVG-Bild stellt ein lächelndes Gesicht (Smiley) dar:

Text “Smiley – ein Gesicht mit einem Lächeln – Darstellung der Datei face.svg”

Laden Sie SVG aus einer Datei

Um SVG aus einer Datei bezier-curves.svg zu laden, verwenden Sie den Standardkonstruktor der Klasse SVGDocument und übergeben Sie ihm den Dateipfad als Eingabeparameter.

 1using Aspose.Svg;
 2using System.IO;
 3...
 4    
 5    // Prepare a path to a file loading
 6    string documentPath = Path.Combine(DataDir, "bezier-curves.svg"); 
 7	
 8	// Load an SVG document from the file
 9	using (var document = new SVGDocument(documentPath))
10	{
11	    // Work with the document 
12	}

Laden Sie SVG aus dem Web

Die folgenden Beispiele könnten Ihnen dabei helfen, ein Dokument aus einer URL zu erstellen, die auf die XML-Datei verweist:

1using Aspose.Svg;
2...
3
4    // Load SVG from the Web at its URL
5    var documentUrl = new Url("https://docs.aspose.com/svg/files/owl.svg");
6    using (var document = new SVGDocument(documentUrl))
7    {
8        // Work with the SVG document here...
9    }
1using Aspose.Svg;
2...
3
4    // Load SVG from the Web at its URL
5    using (var document = new SVGDocument(new Url("https://docs.aspose.com/svg/files/basic-shapes.svg")))
6    {
7        // Work with the SVG document here...
8    }

Wenn Sie eine falsche URL festlegen, die derzeit nicht erreichbar ist, löst die Bibliothek die DOMException mit dem speziellen Code „NetworkError“ aus, um Sie darüber zu informieren, dass die ausgewählte Ressource nicht gefunden werden kann.

Lesen Sie SVG mit Resources Async

Wenn SVG externe Ressourcen enthält, kann es einige Zeit dauern, bis alle Ressourcen vollständig geladen sind, was zu einer Blockierung des Hauptanwendungsthreads führen kann. In einem asynchronen Modell können die Ereignisse „Load“ und „ReadyStateChange“ abonniert werden, um die ladende Anwendung über das vollständige Laden der SVG-Datei zu benachrichtigen, wie im folgenden Codebeispiel gezeigt. Die Methode Navigate(Url) der Klasse SVGDocument wird zum Laden des Dokuments unter der angegebenen URL in die aktuelle Instanz verwendet.

 1using Aspose.Svg;
 2using System.Threading;
 3...
 4
 5    var documentUrl = new Url("https://docs.aspose.com/svg/files/owl.svg");
 6	var document = new SVGDocument();
 7	var documentEvent = new ManualResetEvent(false);
 8
 9	// Subscribe to the event 'OnReadyStateChange' that will be fired once the document is completely loaded
10	document.OnReadyStateChange += (sender, ev) =>
11	{
12	    if (document.ReadyState == "complete")
13	    {
14	        // Sets the state of the event to signaled to unblock the main thread
15	        documentEvent.Set();
16	    }
17	};
18	// Load the SVG document Async
19	document.Navigate(documentUrl);
20
21	// Blocks the current thread while the document is loading
22	documentEvent.WaitOne();
23
24	// Work with the document

Sie können die vollständigen Beispiele und Datendateien von GitHub herunterladen. Informationen zum Herunterladen von GitHub und zum Ausführen von Beispielen finden Sie im Abschnitt So führen Sie die Beispiele aus.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.