Rule Builder – Crear reglas CSS SVG en C#

Reglas de estilo SVG en C#

Los documentos SVG admiten estilos CSS mediante el elemento <style>, lo que permite aplicar reglas visuales reutilizables a gráficos SVG. Con Aspose.SVG Builder API, puede configurar estilos SVG mediante programación en C# sin escribir cadenas CSS manualmente.

Este artículo explica cómo crear reglas de estilo SVG en C#, aplicar selectores CSS a elementos SVG, configurar fuentes personalizadas y administrar estilos SVG reutilizables mediante programación usando Aspose.SVG for .NET.

¿Qué es RuleBuilder?

RuleBuilder forma parte de Aspose.SVG Builder API y se utiliza para configurar declaraciones CSS para reglas de estilo SVG mediante programación. Junto con SVGStyleElementBuilder, permite a los desarrolladores:

Usar reglas CSS centralizadas simplifica el mantenimiento de SVG y reduce el código de estilo duplicado.

Crear reglas de estilo SVG en C#

Aspose.SVG Builder API ofrece la clase SVGStyleElementBuilder, que es un generador de elementos para construir un elemento SVG <style>. Esta clase facilita la creación y configuración de un elemento SVG <style> con reglas CSS.

Este ejemplo muestra cómo crear un elemento SVG <style>, agregarle una regla CSS @font-face y usar el método AddRule() para definir estilos de fuente para elementos de texto dentro de un documento SVG:

1using Aspose.Svg.Builder;
2using System.Drawing;
3using System.IO;
 1// Configure an SVG document's style with external font-face rules in C# using Rule Builder
 2
 3// Initialize an SVG document
 4using (SVGDocument document = new SVGDocument())
 5{
 6    // Create an <svg> element and use Builder API to add other rules and elements to it
 7    SVGSVGElement svg = new SVGSVGElementBuilder()
 8        
 9       .AddDefs(def => def
10            .AddStyle(st => st
11                .Type("text/css")
12                .AddRule("@font-face", r => r
13                    .FontFamily("VeinlineRegular")
14                    .Attribute("src", "url(https://assets.ithillel.ua/wiki/VeinlineRegular.ttf)")
15                )
16                .AddRule("text", t => t
17                    .FontFamily("VeinlineRegular")
18                    .FontSize(30, LengthType.Pt)
19                )
20            )
21        )
22            .AddText(t => t
23            .X(20).Y(60).Fill(Color.DarkRed).FontWeight(FontWeight.Bold)
24            .AddContent("Configure SVG Style")
25            )
26            .AddText(t => t
27            .X(20).Y(150)
28            .AddContent("Set your SVG style with Rule Builder!")
29            )
30        .Build(document.FirstChild as SVGSVGElement);
31
32    // Save the SVG document
33    document.Save(Path.Combine(OutputDir, "font-face.svg"));
34}

Visualización del archivo font-face.svg

Regla @font-face

La regla CSS @font-face permite especificar fuentes para mostrar texto que pueden descargarse desde un servidor remoto o desde el equipo del usuario. La regla define un nombre de familia de fuentes personalizado y especifica la URL de origen del archivo de fuente.

En el ejemplo anterior, la regla @font-face define una familia de fuentes personalizada llamada "VeinlineRegular". Esta regla garantiza que la fuente se cargue y esté disponible para su uso dentro del documento SVG.

Método AddRule()

El método AddRule() pertenece a SVGStyleElementBuilder y permite crear reglas CSS en documentos SVG. Toma dos parámetros: el nombre del selector CSS y una expresión lambda que define las propiedades del estilo usando RuleBuilder.

En el ejemplo de C# anterior, se agregan dos reglas:

Builders within Builders

SVG Builder API introduce azúcar sintáctico (syntactic sugar) para refinar aún más el proceso de creación и manipulación de SVG. Esto incluye constructores anidados para varios elementos SVG, lo que proporciona una forma más intuitiva и eficiente de definir estructuras SVG complejas. El patrón «builder within a builder» implica el uso de varias clases de constructores, donde uno se anida dentro de otro para facilitar la construcción de objetos o estructuras complejos.

El siguiente fragmento muestra cómo usar RuleBuilder, un ejemplo de builder dentro de otro builder, para crear y aplicar estilos a gráficos SVG mediante programación:

1using Aspose.Svg.Builder;
2using System.Drawing;
3using System.IO;
 1// Create SVG with styled circle and text elements using C# Rule Builder API and fluent syntax
 2
 3// Initialize an SVG document
 4using (SVGDocument document = new SVGDocument())
 5{
 6    // Create an <svg> element and use Builder API to add other rules and elements to it
 7    SVGSVGElement svg = new SVGSVGElementBuilder()
 8       
 9        .AddStyle(st => st
10            .AddRule("circle", r => r
11                .Fill(paint: Paint.None)
12                .Stroke(color: Color.DarkRed)
13                .StrokeWidth(60)
14            )
15            .AddRule("text", t => t
16                .Fill(color: Color.Red)
17                .Stroke(color: Color.Teal)
18                .StrokeWidth(1)
19                .FontFamily("Arial")
20                .FontSize(30, LengthType.Pt)
21            )
22        )
23        .AddG(g => g
24            .AddCircle(circle => circle.Cx(100).Cy(130).R(60).StrokeDashArray(2, 14))
25            .AddText("Rule Builder", x: 230, y: 140)
26        )
27        .Build(document.FirstChild as SVGSVGElement);
28
29    // Save the SVG document
30    document.Save(Path.Combine(OutputDir, "rule-builder.svg"));
31}

Cómo funcionan las reglas de estilo

El método AddRule() crea reglas CSS reutilizables dentro del elemento SVG <style>. En este ejemplo:

Este enfoque separa la lógica de estilo de la estructura SVG y mejora la legibilidad del SVG.

Errores comunes y soluciones

ProblemaPosible causaSolución recomendada
Los estilos SVG no se aplicanSelector CSS incorrectoAsegúrese de que AddRule() apunte al elemento SVG correcto
La fuente personalizada no se muestraURL de fuente no válidaVerifique la ruta y accesibilidad del archivo de fuente
El texto se renderiza distinto entre sistemasLa fuente requerida no está disponibleUse fuentes incrustadas o cargadas desde web
Los elementos SVG ignoran reglas de estiloLos atributos inline sobrescriben CSSQuite estilos inline en conflicto
Faltan estilos de trazo o rellenoConfiguración de propiedad incorrectaVerifique las reglas Fill() y Stroke()

FAQ

1. ¿RuleBuilder es mejor que el estilo SVG inline?
Para gráficos SVG complejos, las reglas CSS reutilizables suelen ser más fáciles de mantener que atributos inline repetidos. Rule Builder ayuda a centralizar la lógica de estilo SVG y reducir código duplicado.

2. ¿Puedo aplicar estilos a clases e IDs SVG con RuleBuilder?
Sí. AddRule() admite selectores CSS estándar, incluidos selectores de elemento, clase e ID.

3. ¿Por qué usar reglas CSS dentro del SVG en lugar de archivos CSS externos?
Los estilos SVG embebidos hacen que los gráficos SVG sean autocontenidos y más fáciles de reutilizar en aplicaciones, exportaciones y archivos SVG independientes.

4. ¿Puedo reutilizar el mismo bloque de estilo SVG para varios elementos?
Sí. Un único bloque SVG <style> puede aplicar reglas reutilizables a varios elementos SVG mediante selectores compartidos.

Recursos relacionados

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.