Saltar al pie de página
GUíAS DE MIGRACIóN

Cómo migrar de VectSharp a IronPDF en C#

VectSharp se ha consolidado como una potente biblioteca de gráficos vectoriales en el ecosistema .NET, especialmente valorada para la visualización científica y las ilustraciones técnicas. Sin embargo, cuando los equipos de desarrollo necesitan generar documentos comerciales, informes, facturas o cualquier contenido basado en HTML, el paradigma de VectSharp, que da prioridad a los gráficos, crea una fricción significativa. La biblioteca está diseñada para científicos que crean figuras y gráficos, no para desarrolladores que generan documentos.

Esta guía proporciona una ruta de migración completa de VectSharpa IronPDF, con instrucciones paso a paso, comparaciones de código y ejemplos prácticos para desarrolladores .NET profesionales que estén evaluando esta transición.

Por qué migrar de VectSharp

VectSharp es una biblioteca de visualización científica y gráficos vectoriales diseñada para crear diagramas, gráficos e ilustraciones técnicas. No está diseñado para generar documentos, sino que es una biblioteca de dibujo que produce PDF. Entre las principales razones por las que los equipos de desarrollo se plantean la migración se incluyen:

Enfoque científico únicamente: VectSharpestá diseñado para la visualización y el trazado de datos, no para documentos comerciales como facturas, informes o certificados.

Sin soporte HTML: VectSharpno puede convertir HTML o CSS a PDF. Cada elemento debe dibujarse manualmente utilizando comandos de gráficos vectoriales.

API basada en coordenadas: cada elemento debe estar posicionado con coordenadas X,Y exactas. No hay maquetación automática, flujo ni ajuste de texto.

Sin estilo CSS: todo el estilo es programático a través de llamadas a métodos. Los desarrolladores web no pueden aprovechar sus conocimientos de CSS.

Sin JavaScript: VectSharpno puede representar contenido web dinámico, gráficos interactivos o visualizaciones basadas en JavaScript.

Sin diseño de texto: el ajuste automático de texto, la paginación y el diseño de flujo no están disponibles. Los desarrolladores deben calcular manualmente las posiciones del texto y los saltos de página.

Paradigma Graphics-First: La biblioteca está diseñada para diagramas, no para informes o facturas. La generación de documentos requiere mucho trabajo manual.

El problema principal: biblioteca de gráficos frente a generador de documentos

VectSharp requiere el dibujo manual de vectores para cada elemento:

// VectSharp: Manualvector drawing for every element
Page page = new Page(595, 842);
Graphics graphics = page.Graphics;
graphics.FillRectangle(50, 50, 200, 100, Colour.FromRgb(0, 0, 255));
graphics.FillText(60, 70, "Invoice", new Font(new FontFamily("Arial"), 20), Colours.White);
// ... continue drawing every single element manually
// VectSharp: Manualvector drawing for every element
Page page = new Page(595, 842);
Graphics graphics = page.Graphics;
graphics.FillRectangle(50, 50, 200, 100, Colour.FromRgb(0, 0, 255));
graphics.FillText(60, 70, "Invoice", new Font(new FontFamily("Arial"), 20), Colours.White);
// ... continue drawing every single element manually
$vbLabelText   $csharpLabel

IronPDF utiliza HTML, el formato de documento universal:

// IronPDF: Declarative HTML for document creation
var html = "<h1>Invoice</h1><p>Customer: Acme Corp</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
// IronPDF: Declarative HTML for document creation
var html = "<h1>Invoice</h1><p>Customer: Acme Corp</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
$vbLabelText   $csharpLabel

IronPDFvs VectSharp: Comparación de características

Comprender las diferencias arquitectónicas ayuda a los responsables técnicos a evaluar la inversión en migración:

Característica VectSharp IronPDF
Uso principal Gráficos vectoriales Creación de documentos
Resultado PDF
Soporte HTML No
Licencias LGPL Comercial
Código abierto Parcialmente (características comerciales)
Mejor para Visualizaciones científicas Documentos PDF generales
Personalización Limitado a gráficos Amplia documentación
HTML a PDF No Chromium completo
URL a PDF No
Soporte CSS No CSS3 completo
JavaScript No ES2024 completo
Diseño automático No
Saltos de página automáticos No
Envoltura de texto Manual Automático
Fusionar PDF No
Dividir PDF No
Protección de contraseñas No
Firmas digitales No
Curva de aprendizaje Alto (coordenadas) Bajo (HTML/CSS)
Verbosidad del código Muy alto Bajo

Inicio rápido: Migración de VectSharpa IronPDF

La migración puede comenzar inmediatamente con estos pasos básicos.

Paso 1: Sustituir paquetes NuGet

Eliminar todos los paquetes de VectSharp:

# Remove VectSharppackages
dotnet remove package VectSharp
dotnet remove package VectSharp.PDF
# Remove VectSharppackages
dotnet remove package VectSharp
dotnet remove package VectSharp.PDF
SHELL

Instalar IronPDF:

# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
SHELL

Paso 2: Actualizar los espacios de nombres

Sustituya los espacios de nombres VectSharppor el espacio de nombres IronPdf:

// Before (VectSharp)
using VectSharp;
using VectSharp.PDF;

// After (IronPDF)
using IronPdf;
// Before (VectSharp)
using VectSharp;
using VectSharp.PDF;

// After (IronPDF)
using IronPdf;
$vbLabelText   $csharpLabel

Paso 3: Inicializar licencia

Añadir inicialización de licencia al inicio de la aplicación:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

Ejemplos de migración de código

Convertir HTML a PDF

VectSharp no admite la conversión de HTML a PDF. Esta diferencia fundamental de capacidades impulsa muchas decisiones de migración.

Enfoque de VectSharp:

// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using VectSharp.SVG;
using System.IO;

class Program
{
    static void Main()
    {
        // VectSharpdoesn't directly support HTML to PDF
        // It requires manual creation of graphics objects
        Document doc = new Document();
        Page page = new Page(595, 842); // A4 size
        Graphics graphics = page.Graphics;

        graphics.FillText(100, 100, "Hello from VectSharp", 
            new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));

        doc.Pages.Add(page);
        doc.SaveAsPDF("output.pdf");
    }
}
// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using VectSharp.SVG;
using System.IO;

class Program
{
    static void Main()
    {
        // VectSharpdoesn't directly support HTML to PDF
        // It requires manual creation of graphics objects
        Document doc = new Document();
        Page page = new Page(595, 842); // A4 size
        Graphics graphics = page.Graphics;

        graphics.FillText(100, 100, "Hello from VectSharp", 
            new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));

        doc.Pages.Add(page);
        doc.SaveAsPDF("output.pdf");
    }
}
$vbLabelText   $csharpLabel

Enfoque IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF</h1><p>This is HTML content.</p>");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF</h1><p>This is HTML content.</p>");
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

VectSharp requiere la creación de un objeto Document, <código>PáginayGráficos`y, a continuación, el posicionamiento manual del texto con coordenadas exactas y objetos de fuente.IronPDFrenderiza HTML directamente con soporte completo de estilos CSS.

Para situaciones avanzadas de conversión de HTML a PDF, consulte la Guía de conversión de HTML a PDF.

Creación de documentos de varias páginas

Los documentos de varias páginas revelan las diferencias arquitectónicas entre estas bibliotecas .NET PDF.

Enfoque de VectSharp:

// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using System;

class Program
{
    static void Main()
    {
        Document doc = new Document();

        // Page 1
        Page page1 = new Page(595, 842);
        Graphics g1 = page1.Graphics;
        g1.FillText(50, 50, "Page 1", 
            new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));
        g1.FillText(50, 100, "First page content", 
            new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 14));
        doc.Pages.Add(page1);

        // Page 2
        Page page2 = new Page(595, 842);
        Graphics g2 = page2.Graphics;
        g2.FillText(50, 50, "Page 2", 
            new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));
        g2.FillText(50, 100, "Second page content", 
            new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 14));
        doc.Pages.Add(page2);

        doc.SaveAsPDF("multipage.pdf");
    }
}
// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using System;

class Program
{
    static void Main()
    {
        Document doc = new Document();

        // Page 1
        Page page1 = new Page(595, 842);
        Graphics g1 = page1.Graphics;
        g1.FillText(50, 50, "Page 1", 
            new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));
        g1.FillText(50, 100, "First page content", 
            new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 14));
        doc.Pages.Add(page1);

        // Page 2
        Page page2 = new Page(595, 842);
        Graphics g2 = page2.Graphics;
        g2.FillText(50, 50, "Page 2", 
            new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));
        g2.FillText(50, 100, "Second page content", 
            new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 14));
        doc.Pages.Add(page2);

        doc.SaveAsPDF("multipage.pdf");
    }
}
$vbLabelText   $csharpLabel

Enfoque IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = @"
            <h1>Page 1</h1>
            <p>First page content</p>
            <div style='page-break-after: always;'></div>
            <h1>Page 2</h1>
            <p>Second page content</p>
        ";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("multipage.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = @"
            <h1>Page 1</h1>
            <p>First page content</p>
            <div style='page-break-after: always;'></div>
            <h1>Page 2</h1>
            <p>Second page content</p>
        ";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("multipage.pdf");
    }
}
$vbLabelText   $csharpLabel

VectSharp requiere crear objetos <código>Páginaindependientes, contextosGráficosindependientes y posicionar manualmente cada elemento de texto con coordenadas y objetos de fuente para cada página.IronPDFutiliza una única cadena HTML con CSSpage-break-after: always` para crear automáticamente documentos de varias páginas.

Dibujar formas y texto

Las capacidades gráficas muestran dónde sobresale VectSharp, pero también dónde los estándares web proporcionan una funcionalidad equivalente con menos código.

Enfoque de VectSharp:

// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using System;

class Program
{
    static void Main()
    {
        Document doc = new Document();
        Page page = new Page(595, 842);
        Graphics graphics = page.Graphics;

        // Draw rectangle
        graphics.FillRectangle(50, 50, 200, 100, Colour.FromRgb(0, 0, 255));

        // Draw circle
        GraphicsPath circle = new GraphicsPath();
        circle.Arc(400, 100, 50, 0, 2 * Math.PI);
        graphics.FillPath(circle, Colour.FromRgb(255, 0, 0));

        // Add text
        graphics.FillText(50, 200, "VectSharp Graphics", 
            new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 20));

        doc.Pages.Add(page);
        doc.SaveAsPDF("shapes.pdf");
    }
}
// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using System;

class Program
{
    static void Main()
    {
        Document doc = new Document();
        Page page = new Page(595, 842);
        Graphics graphics = page.Graphics;

        // Draw rectangle
        graphics.FillRectangle(50, 50, 200, 100, Colour.FromRgb(0, 0, 255));

        // Draw circle
        GraphicsPath circle = new GraphicsPath();
        circle.Arc(400, 100, 50, 0, 2 * Math.PI);
        graphics.FillPath(circle, Colour.FromRgb(255, 0, 0));

        // Add text
        graphics.FillText(50, 200, "VectSharp Graphics", 
            new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 20));

        doc.Pages.Add(page);
        doc.SaveAsPDF("shapes.pdf");
    }
}
$vbLabelText   $csharpLabel

Enfoque IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = @"
            <div style='width: 200px; height: 100px; background-color: blue; margin: 50px;'></div>
            <div style='width: 100px; height: 100px; background-color: red; 
                        border-radius: 50%; margin-left: 350px; margin-top: -50px;'></div>
            <h2>IronPDF Graphics</h2>
        ";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("shapes.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = @"
            <div style='width: 200px; height: 100px; background-color: blue; margin: 50px;'></div>
            <div style='width: 100px; height: 100px; background-color: red; 
                        border-radius: 50%; margin-left: 350px; margin-top: -50px;'></div>
            <h2>IronPDF Graphics</h2>
        ";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("shapes.pdf");
    }
}
$vbLabelText   $csharpLabel

VectSharp requiere crear objetos GraphicsPath, llamar a Arc() con parámetros matemáticos precisos y gestionar colores mediante Colour.FromRgb().IronPDFutiliza propiedades CSS conocidas: color de fondo, borde-radio: 50% para los círculos y márgenes estándar.

Referencia de la API de VectSharpa IronPDF

Este mapeo acelera la migración al mostrar los equivalentes directos de las API:

VectSharp IronPDF Notas
Documento <código>ChromePdfRenderer` Crear renderizador
<código>Página Automático Páginas creadas a partir de HTML
Gráficos HTML/CSS Marcado declarativo
<código>graphics.FillRectangle()| CSScolor de fondoen
`
Cuadros HTML
<código>graphics.StrokeRectangle()| CSSborderen
`
Fronteras
<código>graphics.FillText()| Elementos de texto HTML|

,

,`

<código>graphics.StrokePath()` Bordes SVG o CSS Trazados vectoriales
RutaGráfica Elemento SVG <path> Formas complejas
Color.FromRgb() Valores de color CSS rgb(), #hex, named
Font / FamiliaFont CSS family Fuentes web compatibles
<código>doc.SaveAsPDF()` <código>pdf.SaveAs() Guardar en archivo
Tamaño de página manual <código>RenderingOptions.PaperSize O CSS @page

Estrategias de migración

Estrategia 1: Convertir el código de dibujo a HTML/CSS

Sustituir el dibujo basado en coordenadas por elementos HTML:

// VectSharp
graphics.FillRectangle(100, 50, 300, 80, Colour.FromRgb(0, 102, 204));
graphics.FillText(110, 80, "Header", font, Colours.White);

//IronPDFHTML equivalent
<div style="
    position: absolute;
    left: 100px;
    top: 50px;
    width: 300px;
    height: 80px;
    background: rgb(0, 102, 204);
    color: white;
    padding: 10px;
">Header</div>
// VectSharp
graphics.FillRectangle(100, 50, 300, 80, Colour.FromRgb(0, 102, 204));
graphics.FillText(110, 80, "Header", font, Colours.White);

//IronPDFHTML equivalent
<div style="
    position: absolute;
    left: 100px;
    top: 50px;
    width: 300px;
    height: 80px;
    background: rgb(0, 102, 204);
    color: white;
    padding: 10px;
">Header</div>
$vbLabelText   $csharpLabel

Estrategia 2: Utilizar SVG para gráficos vectoriales

Para formas complejas, utilice SVG en línea en su HTML:

// VectSharppath
GraphicsPath path = new GraphicsPath();
path.MoveTo(100, 100);
path.LineTo(200, 50);
path.LineTo(300, 100);
path.Close();
graphics.FillPath(path, Colours.Blue);

//IronPDFSVG equivalent
<svg><polygon points="100,100 200,50 300,100" fill="blue"/></svg>
// VectSharppath
GraphicsPath path = new GraphicsPath();
path.MoveTo(100, 100);
path.LineTo(200, 50);
path.LineTo(300, 100);
path.Close();
graphics.FillPath(path, Colours.Blue);

//IronPDFSVG equivalent
<svg><polygon points="100,100 200,50 300,100" fill="blue"/></svg>
$vbLabelText   $csharpLabel

Estrategia 3: Utilizar bibliotecas de gráficos JavaScript

Para las visualizaciones científicas, la especialidad de VectSharp,IronPDFpuede aprovechar potentes bibliotecas de JavaScript como Chart.js, D3.js o Plotly:

var html = @"
<script src='https://cdn.plot.ly/plotly-latest.min.js'></script>
<div id='chart'></div>
<script>
    Plotly.newPlot('chart', [{
        x: [1, 2, 3, 4],
        y: [10, 15, 13, 17],
        type: 'scatter'
    }]);
</script>";

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
var pdf = renderer.RenderHtmlAsPdf(html);
var html = @"
<script src='https://cdn.plot.ly/plotly-latest.min.js'></script>
<div id='chart'></div>
<script>
    Plotly.newPlot('chart', [{
        x: [1, 2, 3, 4],
        y: [10, 15, 13, 17],
        type: 'scatter'
    }]);
</script>";

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
var pdf = renderer.RenderHtmlAsPdf(html);
$vbLabelText   $csharpLabel

Problemas comunes de migración y soluciones

Tema 1: Diferencias en los sistemas de coordenadas

VectSharp utiliza puntos desde el origen superior izquierdo con posicionamiento manual.

Solución: Utilizar posicionamiento CSS:

.element {
    position: absolute;
    top: 50px;
    left: 100px;
}

Número 2: Objetos de fuentes

VectSharp crea objetos Font y FontFamily mediante programación.

Solución: Utilizar CSS font-family:

<style>
    body { font-family: Arial, sans-serif; font-size: 12pt; }
</style>
<style>
    body { font-family: Arial, sans-serif; font-size: 12pt; }
</style>
HTML

Número 3: Manejo del color

VectSharp utiliza llamadas al método Colour.FromRgb().

Solución: Utilizar colores CSS:

.header { color: rgb(0, 102, 204); background-color: #f0f0f0; }

Número 4: Trayectorias gráficas

VectSharp utiliza la compleja API RutaGráficacon los métodos MoveTo, LineTo, Arc.

Solución: Utilizar SVG para gráficos vectoriales:

<svg>
    <path d="M 100 100 L 200 50 L 300 100 Z" fill="blue"/>
</svg>
<svg>
    <path d="M 100 100 L 200 50 L 300 100 Z" fill="blue"/>
</svg>
HTML

Lista de comprobación de la migración a VectSharp

Tareas previas a la migración

Audite su código base para identificar todo el uso de VectSharp:

grep -r "using VectSharp" --include="*.cs" .
grep -r "Graphics\|FillRectangle\|FillText" --include="*.cs" .
grep -r "using VectSharp" --include="*.cs" .
grep -r "Graphics\|FillRectangle\|FillText" --include="*.cs" .
SHELL

Tamaños de página de documentos (los patrones new Page(595, 842)). Tenga en cuenta los esquemas de color utilizando Colour.FromRgb(). Identificar las configuraciones de fuentes. Mapear gráficos vectoriales complejos utilizando RutaGráficapara la conversión a SVG.

Tareas de actualización de código

  1. Eliminar paquetes NuGet de VectSharp
  2. Instalación del paquete IronPdf NuGet
  3. Actualización de las sentencias de uso de VectSharp a IronPDF
  4. Convertir las llamadas de FillRectangle en cuadros CSS con background-color
  5. Convertir llamadas FillText en elementos de texto HTML con estilo CSS
  6. Convertir operaciones RutaGráficaen elementos SVG <path>
  7. Sustituya la gestión manual de páginas por RenderingOptions.PaperSize
  8. Añadir inicialización de licencia al inicio

Pruebas posteriores a la migración

Tras la migración, verifique estos aspectos:

  • Comparar el resultado visual entre las versiones de VectSharpy IronPDF
  • Verificar que los colores coinciden utilizando los equivalentes CSS de los valores Colour.FromRgb()
  • Comprobar la precisión de posicionamiento de los elementos convertidos a partir de la colocación basada en coordenadas
  • Prueba de saltos de página en documentos de varias páginas
  • Verificar que los gráficos vectoriales se renderizan correctamente mediante SVG

Beneficios clave de migrar a IronPDF

El paso de VectSharpaIronPDFofrece varias ventajas para la generación de documentos:

Contenido basado en HTML: los desarrolladores web pueden aprovechar las habilidades existentes en HTML y CSS. No es necesario aprender las API de dibujo basadas en coordenadas.

Diseño automático: el ajuste de texto, la paginación y el diseño de flujo se realizan automáticamente. Sin cálculo manual de las posiciones de los elementos.

Compatibilidad con CSS moderno: CSS3 completo, incluidos diseños Flexbox y Grid. Los diseños responsivos se traducen directamente a PDF.

Ejecución de JavaScript: los gráficos interactivos con Chart.js, D3.js o Plotly se representan correctamente. El contenido dinámico funciona como se espera.

URL a PDF: captura cualquier página web como PDF (funcionalidad que no es posible con VectSharp).

Operaciones PDF: Fusionar, dividir, agregar marcas de agua, protección con contraseña y firmas digitales son funciones integradas.

Menor verbosidad del código: HTML/CSSes declarativo y legible. El mismo documento requiere mucho menos código que el enfoque de dibujo imperativo de VectSharp.

Desarrollo activo: a medida que aumenta la adopción de .NET 10 y C# 14 hasta 2026, las actualizaciones periódicas deIronPDFgarantizan la compatibilidad con las versiones actuales y futuras de .NET.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más