Crear SVG, cargar y leer SVG en C#

Para realizar cualquier tarea, debe crear o cargar un documento. Aspose.SVG for .NET API le permite crear un documento SVG desde cero, así como cargar un SVG existente desde diferentes fuentes. La API proporciona la clase SVGDocument que tiene varios constructores que le permiten producir nuevas instancias de clase. El SVGDocument es la raíz de la jerarquía SVG DOM, contiene todo el contenido y se basa completamente en las especificaciones W3C SVG 2.0 y WHATWG DOM.

Los archivos SVG se pueden crear y cargar:

Este artículo proporciona algunos ejemplos de creación y carga de archivos SVG utilizando Aspose.SVG for .NET API. SVGDocument tiene un amplio conjunto de constructores sobrecargados que le permiten crear un documento en blanco o cargarlo desde un archivo, URL, secuencia, etc.

Crear un documento SVG vacío

Aspose.SVG for .NET API proporciona la clase SVGDocument que se puede utilizar para crear un documento vacío utilizando su constructor predeterminado. Una vez creado el objeto del documento, se puede rellenar más adelante con elementos SVG. El siguiente fragmento de código C# muestra el uso del constructor predeterminado SVGDocument() para crear un documento 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 desea guardar el documento SVG vacío creado en un archivo, utilice el siguiente fragmento de código C#:

 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	}

Más detalles sobre cómo guardar archivos SVG se encuentran en la sección Guardar un documento SVG. En el artículo Editar archivo SVG, aprenderá cómo editar SVG usando Aspose.SVG para la biblioteca .NET y encontrará ejemplos detallados de cómo agregar nuevos elementos a documentos SVG y aplicar filtros SVG a mapas de bits.

Crear SVG a partir de una cadena de memoria

Puede crear SVG a partir de un contenido de cadena usando el constructor SVGDocument (string, string). Si su caso es producir un documento a partir de una cadena de usuario directamente en su código y no necesita guardarlo en un archivo, el siguiente ejemplo podría ayudarle: producimos un documento SVG que contiene un círculo con un radio de 40 píxeles.

 1using Aspose.Svg;
 2...
 3
 4    // Prepare SVG code
 5    var documentContent = "<svg xmlns=\"http://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	}

Crear SVG a partir de una secuencia

Para crear SVG a partir de una secuencia, utilice uno de los constructores 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	}

Cree documentos SVG personalizados utilizando la API SVG Builder

La API SVG Builder ofrece una forma potente y flexible de construir documentos SVG mediante programación. Al aprovechar la clase SVGSVGElementBuilder, los desarrolladores pueden crear fácilmente gráficos SVG complejos con opciones de personalización detalladas. Para obtener más información sobre cómo utilizar la API SVG Builder, consulte el artículo de documentación Creación y modificación avanzada de SVG con Aspose.SVG Builder API.

A continuación se muestra un ejemplo que demuestra cómo crear un documento SVG personalizado con varios elementos gráficos:

 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    }

Este fragmento de código crea un documento SVG con un diseño complejo, lo que demuestra la flexibilidad y el poder de la API SVG Builder para generar gráficos SVG personalizados mediante programación. En el código C# anterior, creamos un documento SVG con elementos como círculos, elipses, trazados y degradados. La imagen SVG generada representa una cara con una sonrisa (cara sonriente):

Texto “Smiley - una cara con una sonrisa - representación del archivo face.svg”

Cargar SVG desde un archivo

Para cargar SVG desde un archivo bezier-curves.svg, utilice el constructor predeterminado de la clase SVGDocument y pásele la ruta del archivo como parámetro de entrada.

 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	}

Cargar SVG desde la Web

Los siguientes ejemplos podrían ayudarle a crear un documento a partir de una URL que haga referencia al archivo 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 configura una URL incorrecta a la que no se puede acceder en este momento, la biblioteca genera DOMException con el código especializado ‘NetworkError’ para informarle que no se puede encontrar el recurso seleccionado.

Leer SVG con recursos asíncronos

Si SVG contiene recursos externos, puede llevar tiempo cargar todos los recursos por completo y, por lo tanto, provocar el bloqueo del subproceso principal de la aplicación. En un modelo asíncrono, los eventos Load y ReadyStateChange se pueden suscribir para notificar a la aplicación de carga la carga completa del archivo SVG, como se muestra en el siguiente ejemplo de código. El método Navigate(Url) de la clase SVGDocument se utiliza para cargar el documento en la URL especificada en la instancia actual.

 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

Puede descargar los ejemplos completos y los archivos de datos desde GitHub. Encontrará información sobre cómo descargar desde GitHub y ejecutar ejemplos en la sección Cómo ejecutar los ejemplos.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.