Cargando fuentes SVG | .NET
Cargando fuentes SVG con Aspose.Font para .NET
Por qué fuentes SVG?
- Descripción vectorial escalable – cada glifo se define mediante un elemento XML
<glyph>(caminos, transformaciones, asignación Unicode). - Formato orientado a la web – las fuentes SVG pueden incrustarse directamente en HTML/CSS (
@font-face) y son compatibles con la mayoría de los navegadores modernos. - Editable – como los datos son XML puro, puede ajustar programáticamente los contornos de los glifos o los metadatos antes de renderizar o convertir a otro formato (TTF/WOFF/OTF).
Aspose.Font proporciona una API única y unificada para cargar cualquier tipo de fuente compatible (TTF, OTF, WOFF, WOFF2, SVG, …) y trabajar con ella como un objeto fuertemente tipado Aspose.Font.Font.
Qué se necesita
| Elemento | Descripción | Cómo obtener |
|---|---|---|
| Aspose.Font for .NET | Biblioteca central que lee/escribe todos los formatos de fuente compatibles (incluido SVG). | dotnet add package Aspose.Fonto mediante la UI de NuGet: https://www.nuget.org/packages/Aspose.Font/ |
| Target framework | .NET Framework 4.x / .NET Core 3.x / .NET 5/6/7 – cualquier plataforma compatible con Aspose.Font. | No se necesita tiempo de ejecución adicional. |
| Importaciones de espacio de nombres | csharp<br>using Aspose.Font;<br>using Aspose.Font.Sources;<br>using System.IO;<br> | — |
Añadir el paquete NuGet
1dotnet add package Aspose.FontConceptos clave de la API
| Clase / Enumeración | Propósito |
|---|---|
FontDefinition | Describe qué se quiere cargar (tipo de fuente + origen). |
FontFileDefinition | Asocia una fuente de flujo (FileSystemStreamSource, ByteContentStreamSource, etc.) con la extensión de archivo ("svg"). |
FileSystemStreamSource / ByteContentStreamSource | Proporciona un flujo legible de los bytes subyacentes – ya sea desde un archivo en disco o desde un búfer en memoria. |
Font.Open(FontDefinition) | Método de fábrica que analiza el origen y devuelve una implementación concreta de Aspose.Font.Font (SvgFont). |
Lo único que cambia entre formatos es el valor del enum FontType (Svg) y la cadena de extensión de archivo ("svg").
Cargando una fuente SVG – tres escenarios comunes
Cargando desde el sistema de archivos
1using System;
2using System.IO;
3using Aspose.Font;
4using Aspose.Font.Sources;
5
6class LoadSvgFromFile
7{
8 static void Main()
9 {
10 // 1️⃣ Ruta al archivo *.svg*
11 string svgPath = @"C:\Fonts\MyWebFont.svg";
12
13 // Verificar que el archivo exista
14 if (!File.Exists(svgPath))
15 throw new FileNotFoundException($"SVG file not found: {svgPath}");
16
17 // 2️⃣ Fuente de flujo que lee directamente del archivo
18 FileSystemStreamSource streamSrc = new FileSystemStreamSource(svgPath);
19
20 // 3️⃣ FontFileDefinition – indicamos a Aspose que la extensión es "svg"
21 FontFileDefinition fileDef = new FontFileDefinition("svg", streamSrc);
22
23 // 4️⃣ FontDefinition – especificamos el tipo exacto de fuente
24 FontDefinition fontDef = new FontDefinition(FontType.Svg, fileDef);
25
26 // 5️⃣ Cargar la fuente
27 Font svgFont = Font.Open(fontDef);
28
29 Console.WriteLine($"Loaded font: {svgFont.GetType().Name}"); // → SvgFont
30 }
31}Resultado:
svgFontes una instancia deAspose.Font.Svg.SvgFont. Desde aquí puede consultar glifos, métricas o convertirla a otro formato.
Cargando desde una matriz de bytes
1using System;
2using System.IO;
3using Aspose.Font;
4using Aspose.Font.Sources;
5
6class LoadSvgFromBytes
7{
8 static void Main()
9 {
10 // Supongamos que la fuente SVG se incluyó como recurso incrustado
11 byte[] svgBytes = File.ReadAllBytes(@"C:\Fonts\MyWebFont.svg");
12
13 // Envolver los bytes sin procesar en una fuente de flujo
14 ByteContentStreamSource byteSrc = new ByteContentStreamSource(svgBytes);
15
16 // Construir la definición – la extensión sigue siendo “svg”
17 FontDefinition fd = new FontDefinition(
18 FontType.Svg,
19 "svg",
20 byteSrc);
21
22 // Cargar
23 Font svgFont = Font.Open(fd);
24
25 Console.WriteLine($"Glyph count: {((Aspose.Font.Svg.SvgFont)svgFont).Glyphs.Count}");
26 }
27}Cuándo usar:
- La fuente se almacena dentro de su ensamblado como recurso.
- Ha descargado la fuente vía HTTP y ya la tiene en memoria.
Cargando directamente desde un flujo abierto
1using System;
2using System.IO;
3using Aspose.Font;
4using Aspose.Font.Sources;
5
6class LoadSvgFromOpenStream
7{
8 static void Main()
9 {
10 using (FileStream fs = File.OpenRead(@"C:\Fonts\MyWebFont.svg"))
11 {
12 // La fuente de flujo puede construirse a partir de cualquier objeto Stream
13 FileSystemStreamSource src = new FileSystemStreamSource(fs);
14
15 // Pasar la fuente de flujo + extensión directamente a FontDefinition
16 FontDefinition fd = new FontDefinition(
17 FontType.Svg,
18 "svg",
19 src);
20
21 Font svgFont = Font.Open(fd);
22 Console.WriteLine($"Family name: {((Aspose.Font.Svg.SvgFont)svgFont).FamilyNames[0]}");
23 }
24 }
25}Por qué es importante:
Si ya posee un Stream (por ejemplo, desde una carga en ASP.NET) no necesita escribirlo en disco primero – simplemente envuélvalo y ábralo.
Todos estos escenarios se demuestran en el repositorio oficial de ejemplos:
Conclusión
Con solo tres líneas de código puede obtener una fuente SVG desde disco, memoria o cualquier flujo personalizado y obtener de inmediato acceso programático completo a sus rutas de glifos, métricas y capacidades de conversión—gracias al modelo unificado de Aspose.Font. Combínelo con el motor de renderizado de Aspose.SVG si necesita rasterizar texto directamente en una imagen o PDF, y tendrá una canalización completa para tipografía web‑centrada moderna en .NET.