Créer du SVG, charger et lire du SVG en C#

Pour effectuer n’importe quelle tâche, vous devez créer ou charger un document. L’API Aspose.SVG pour .NET vous permet de créer un document SVG à partir de zéro ainsi que de charger un SVG existant à partir de différentes sources. L’API fournit la classe SVGDocument qui possède plusieurs constructeurs vous permettant de produire de nouvelles instances de classe. Le SVGDocument est la racine de la hiérarchie SVG DOM, contient l’intégralité du contenu et est entièrement basé sur les spécifications W3C SVG 2.0 et WHATWG DOM.

Les fichiers SVG peuvent être créés et chargés :

Cet article fournit quelques exemples de création et de chargement de fichiers SVG à l’aide d’Aspose.SVG pour l’API .NET. Le SVGDocument dispose d’un large ensemble de constructeurs surchargés vous permettant de créer un document vierge ou de le charger à partir d’un fichier, d’une URL, d’un flux, etc.

Créer un document SVG vide

Aspose.SVG pour l’API .NET fournit la classe SVGDocument qui peut être utilisée pour créer un document vide à l’aide de son constructeur par défaut. Une fois l’objet document créé, il peut être rempli ultérieurement avec des éléments SVG. L’extrait de code C# suivant montre l’utilisation du constructeur par défaut SVGDocument() pour créer un document SVG.

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    }

Si vous souhaitez enregistrer le document SVG vide créé dans un fichier, utilisez l’extrait de code C# suivant :

 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	}

Plus de détails sur l’enregistrement des fichiers SVG se trouvent dans la section Enregistrer un document SVG. Dans l’article Modifier le fichier SVG, vous apprendrez comment modifier SVG à l’aide de la bibliothèque Aspose.SVG pour .NET et trouverez des exemples détaillés sur la façon d’ajouter de nouveaux éléments aux documents SVG et d’appliquer des filtres SVG aux bitmaps.

Créer SVG à partir d’une chaîne mémoire

Vous pouvez créer du SVG à partir d’un contenu de chaîne en utilisant le constructeur SVGDocument (string, string). Si votre cas est de produire un document à partir d’une chaîne utilisateur directement dans votre code et que vous n’avez pas besoin de l’enregistrer dans un fichier, l’exemple suivant pourrait vous aider : nous produisons un document SVG qui contient un cercle de rayon 40 pixels.

 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	}

Créer du SVG à partir d’un flux

Pour créer du SVG à partir d’un flux, utilisez l’un des constructeurs SVGDocument() :

 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	}

Créer des documents SVG personnalisés à l’aide de l’API SVG Builder

L’API SVG Builder offre un moyen puissant et flexible de construire des documents SVG par programmation. En tirant parti de la classe SVGSVGElementBuilder, les développeurs peuvent facilement créer des graphiques SVG complexes avec des options de personnalisation détaillées. Pour plus d’informations sur l’utilisation de l’API SVG Builder, reportez-vous à l’article de documentation API SVG Builder – Création et modification avancées de SVG.

Voici un exemple montrant comment créer un document SVG personnalisé comportant divers éléments graphiques:

 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    }

Cet extrait de code crée un document SVG avec une conception complexe, démontrant la flexibilité et la puissance de l’API SVG Builder pour générer des graphiques SVG personnalisés par programme. L’image SVG résultante représente un visage souriant (smiley):

Text “Smiley - un visage avec un sourire - rendu du fichier face.svg”

Charger SVG à partir d’un fichier

Pour charger SVG à partir d’un fichier bezier-curves.svg, utilisez le constructeur par défaut de la classe SVGDocument et transmettez-lui le chemin du fichier comme paramètre d’entrée.

 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	}

Charger SVG depuis le Web

Les exemples suivants pourraient vous aider à créer un document à partir d’une URL faisant référence au fichier XML :

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    }

Si vous définissez une mauvaise URL qui n’est pas accessible à ce moment-là, la bibliothèque lève l’exception DOMException avec le code spécialisé «NetworkError» pour vous informer que la ressource sélectionnée est introuvable.

Lire SVG avec des ressources asynchrones

Si SVG contient des ressources externes, le chargement complet de toutes les ressources peut prendre du temps, ce qui peut entraîner le blocage du thread principal de l’application. Dans un modèle asynchrone, les événements Load et ReadyStateChange peuvent être abonnés pour informer l’application de chargement du chargement complet du fichier SVG, comme indiqué dans l’exemple de code suivant. La méthode Navigate(Url) de la classe SVGDocument est utilisée pour le chargement du document à l’URL spécifiée dans l’instance actuelle.

 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

Vous pouvez télécharger les exemples complets et les fichiers de données depuis GitHub. Vous découvrirez le téléchargement depuis GitHub et l’exécution d’exemples dans la section Comment exécuter les exemples.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.