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

Cómo migrar de Spire.PDF a IronPDF en C#

Migrar de Spire.PDF a IronPDF: Guía completa de migración de C

La migración de Spire.PDF aIronPDFtransforma su flujo de trabajo de generación de PDF de una biblioteca que renderiza texto como imágenes a una que produce texto verdadero, seleccionable y con capacidad de búsqueda utilizando un moderno motor de renderizado Chromium. Esta guía proporciona una ruta de migración completa, paso a paso, que resuelve las limitaciones críticas de renderizado HTML y los problemas de incrustación de fuentes de Spire.PDF.

Por qué migrar de Spire.PDF a IronPDF

Entendiendo Spire.PDF

Spire.PDF es una robusta biblioteca PDF comercial diseñada para que los desarrolladores .NET manejen documentos PDF de forma eficiente. Spire.PDF se ha hecho un hueco en la comunidad de programadores por sus capacidades específicas, especialmente en aplicaciones heredadas, y sus capacidades de integración se alinean a la perfección con otros componentes del conjunto de herramientas E-iceblue.

Sin embargo, Spire.PDF tiene varios problemas fundamentales que afectan a su uso en el mundo real, en particular en torno a la conversión de HTML a PDF y la compatibilidad con los estándares web modernos.

Cuestiones técnicas críticas

ProblemaImpactoSolución IronPDF
Texto renderizado como imágenesLos PDF no permiten búsquedas, no son accesibles, no se puede copiar el textoRepresentación de texto real
Dependencia de Internet ExplorerRenderizado obsoleto, riesgos de seguridadMotor Chromium moderno
Fallos de incrustación de fuentesLos documentos se ven mal en otros sistemasManejo fiable de fuentes
Gran despliegueUso elevado de memoria, inicio lentoDespliegue eficaz
Soporte CSS limitadoLos diseños modernos no se muestran correctamenteCompatibilidad total con CSS3

El problema principal: los PDF basados en imágenes

Un inconveniente importante de Spire.PDF es que tiende a mostrar el texto de los documentos HTML como imágenes. El resultado son PDF en los que el texto no se puede seleccionar ni buscar, lo que puede suponer una grave limitación para las aplicaciones que necesitan funciones de búsqueda o interacción con el texto del documento.

Cuando se utiliza el método LoadFromHTML() de Spire.PDF, a menudo renderiza el texto como imágenes de mapa de bits en lugar de texto real, creando estos problemas:

  • Texto NO seleccionable
  • El texto NO puede buscarse
  • El texto NO puede copiarse
  • Los lectores de pantalla NO PUEDEN leerlo (violación de la accesibilidad)
  • El tamaño del archivo es MUCHO mayor
  • El zoom provoca pixelación

Comparación entre Spire.PDF e IronPDF

CaracterísticaSpire.PDFIronPDF
Traducción de HTML a PDFTexto renderizado como imágenesRepresentación de texto real (seleccionable y con posibilidad de búsqueda)
Motor de renderizadoInternet Explorer depende de algunos sistemasBasado en Chromium, compatible con los estándares web modernos
Manejo de fuentesProblemas conocidos con la incrustación de fuentesManejo de fuentes fiable y sólido
Soporte CSS3LimitadoCompleto
Flexbox/GridNo soportadoSoporte completo
JavaScriptLimitadoES6+ completo
Accesibilidad de PDFPobre (basado en imágenes)Excelente
Diseño de APIComplejoSencillo e intuitivo
Huella de despliegueSitio web de gran tamañoModerado
LicenciasFreemium/ComercialComercial

Para los equipos que planean la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFresuelve los problemas críticos de la conversión de HTML a PDF de Spire.PDF al representar el texto como texto seleccionable real en lugar de imágenes, lo que garantiza que los PDF se puedan buscar y sean accesibles.


Antes de empezar

Prerrequisitos

  1. <Entorno .NET: .NET Framework 4.6.2+ o .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Acceso a NuGet: Capacidad para instalar paquetes NuGet
  3. Licencia IronPDF: Obtenga su clave de licencia en ironpdf.com

Cambios en el paquete NuGet

# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF  # If using free version

# Install IronPDF
dotnet add package IronPdf
# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF  # If using free version

# Install IronPDF
dotnet add package IronPdf
SHELL

Configuración de licencias

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Referencia completa de la API

Cambios en el espacio de nombres

// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;

// After: IronPDF
using IronPdf;
using IronPdf.Editing;
// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;

// After: IronPDF
using IronPdf;
using IronPdf.Editing;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Core API Mappings

Spire.PDFIronPDFNotas
nuevo PdfDocument()<código>new ChromePdfRenderer()</códigoPara la renderización HTML
<código>pdf.LoadFromHTML()</códigorenderer.RenderHtmlAsPdf()Conversión de HTML
<código>pdf.LoadFromFile()</código<código>PdfDocument.FromFile()</códigoCargar PDF existente
<código>pdf.SaveToFile()</código<código>pdf.SaveAs()</códigoGuardar en archivo
<código>pdf.Close()</códigoNo es necesarioUtiliza el patrón dispose
<código>pdf.Pages.Add()</código>renderer.RenderHtmlAsPdf()Crear página a partir de HTML
<código>pdf.InsertPageRange()</códigoPdfDocument.Merge()Fusionar PDF
<código>page.Canvas.DrawString()</código>TextStamper + ApplyStamp()Añadir texto
<código>PdfFont</códigoEstilización CSS en HTMLConfiguración de fuentes
<código>PdfBrush</códigoEstilización CSS en HTMLConfiguración de color/relleno

Ejemplos de migración de código

Ejemplo 1: Conversión de HTML a PDF

Antes (Spire.PDF):

// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        pdf.LoadFromHTML(htmlString, false, true, true);
        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        pdf.LoadFromHTML(htmlString, false, true, true);
        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

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

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

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

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

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(htmlString);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Este ejemplo demuestra la diferencia fundamental en la representación de HTML. Spire.PDF utiliza LoadFromHTML() con un objeto PdfHtmlLayoutFormat, que a menudo representa el texto como imágenes de mapa de bits. El resultado son PDF en los que los usuarios no pueden seleccionar, copiar o buscar texto.

IronPDF utiliza un ChromePdfRenderer con RenderHtmlAsPdf(), produciendo texto verdadero que es totalmente seleccionable, consultable y accesible. No se requiere ninguna llamada a Close():IronPDFutiliza el patrón dispose para la limpieza automática. Consulte la documentación de HTML a PDF para ver ejemplos completos.

Ejemplo 2: Fusión de varios PDF

Antes (Spire.PDF):

// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf1 = new PdfDocument();
        pdf1.LoadFromFile("document1.pdf");

        PdfDocument pdf2 = new PdfDocument();
        pdf2.LoadFromFile("document2.pdf");

        pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);

        pdf1.SaveToFile("merged.pdf");
        pdf1.Close();
        pdf2.Close();
    }
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf1 = new PdfDocument();
        pdf1.LoadFromFile("document1.pdf");

        PdfDocument pdf2 = new PdfDocument();
        pdf2.LoadFromFile("document2.pdf");

        pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);

        pdf1.SaveToFile("merged.pdf");
        pdf1.Close();
        pdf2.Close();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);

        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);

        merged.SaveAs("merged.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Spire.PDF requiere cargar manualmente cada documento con nuevo PdfDocument()+ LoadFromFile(), luego usar InsertPageRange() para especificar qué páginas insertar, y finalmente llamar a Close() en cada documento.

IronPDF utiliza el patrón más sencillo <código>PdfDocument.FromFile()</códigoy un método estático PdfDocument.Merge()que acepta múltiples documentos. No se necesitan llamadas a Close(). Más información en nuestros tutoriales.

Ejemplo 3: Añadir texto a un PDF

Antes (Spire.PDF):

// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfPageBase page = pdf.Pages.Add();

        PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
        PdfBrush brush = new PdfSolidBrush(Color.Black);

        page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));

        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfPageBase page = pdf.Pages.Add();

        PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
        PdfBrush brush = new PdfSolidBrush(Color.Black);

        page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));

        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");

        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalOffset = 50,
            HorizontalOffset = 50
        };

        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");

        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalOffset = 50,
            HorizontalOffset = 50
        };

        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Spire.PDF utiliza un modelo de dibujo basado en lienzo con PdfFont, PdfBrush, y <código>page.Canvas.DrawString()</código>para posicionar texto en coordenadas específicas utilizando PointF.

IronPDF utiliza un objeto TextStamper con propiedades intuitivas como Text, FontSize, VerticalOffset y HorizontalOffset, y luego lo aplica con ApplyStamp(). Este enfoque es más declarativo y fácil de mantener.


El problema del texto como imagen

Por qué es tan importante

Cuando Spire.PDF convierte HTML a PDF utilizando renderización basada en imágenes, sus documentos pierden funcionalidad esencial:

1. Sin búsqueda de texto: Los usuarios no pueden usar Ctrl+F para buscar texto. Los sistemas de gestión de documentos no pueden indexar el contenido.

2. Sin Selección/Copia de Texto: Los usuarios que intentan copiar una cita, referencia o datos no pueden seleccionar texto: es una imagen.

3. Vulneraciones de la accesibilidad: Los PDF basados en imágenes incumplen la normativa WCAG 2.1, la Sección 508 (Gobierno de EE.UU.), los requisitos de la ADA y la compatibilidad con lectores de pantalla.

4. Archivos de gran tamaño: La misma comparación de contenidos muestra que Spire.PDF (basado en imágenes) produce archivos hasta 16 veces más grandes queIronPDF(basado en texto).

Detección: ¿Su PDF está basado en imágenes?

Abra el documento generado con Spire.PDF y realice estas pruebas:

  1. Selección de texto: Haz clic y arrastra sobre el texto. Si no hay nada que destaque → IMAGE-BASED
  2. Ctrl+F Buscar: Busca cualquier palabra en la página. Si "No se han encontrado coincidencias" → IMAGE-BASED
  3. Copiar/Pegar: Seleccionar y copiar texto en el bloc de notas. Si no pega nada → BASE DE IMAGEN

El problema de Internet Explorer

Motor de renderizado de Spire.PDF

Spire.PDF depende de Internet Explorer/Edge Legacy para la representación HTML en algunos entornos. IE quedó obsoleto en 2022, el CSS moderno no funciona, la compatibilidad con JavaScript es limitada y la representación es incoherente entre sistemas.

CSS moderno que falla en Spire.PDF

<!-- This HTML renders incorrectly in Spire.PDF -->
<div style="display: flex; justify-content: space-between; gap: 20px;">
    <div style="flex: 1;">Column 1</div>
    <div style="flex: 1;">Column 2</div>
</div>

<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>

<!-- CSS Variables don't work -->
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>
<!-- This HTML renders incorrectly in Spire.PDF -->
<div style="display: flex; justify-content: space-between; gap: 20px;">
    <div style="flex: 1;">Column 1</div>
    <div style="flex: 1;">Column 2</div>
</div>

<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>

<!-- CSS Variables don't work -->
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>
HTML

IronPDF utiliza el moderno renderizado Chromium, por lo que todas estas características CSS funcionan correctamente.


Nuevas capacidades tras la migración

Tras migrar a IronPDF, obtendrá funciones que Spire.PDF no puede ofrecer:

Texto seleccionable y buscable

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");

// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clear
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");

// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clear
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Soporte CSS moderno

var renderer = new ChromePdfRenderer();

var html = @"
<style>
    :root { --primary: #007bff; }
    .container { display: flex; gap: 20px; }
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
    <div style='flex: 1; color: var(--primary)'>Column 1</div>
    <div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
var renderer = new ChromePdfRenderer();

var html = @"
<style>
    :root { --primary: #007bff; }
    .container { display: flex; gap: 20px; }
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
    <div style='flex: 1; color: var(--primary)'>Column 1</div>
    <div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Marcas de agua basadas en HTML

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
    <div style='
        font-size: 48px;
        color: rgba(255, 0, 0, 0.5);
        transform: rotate(-45deg);
    '>DRAFT</div>");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
    <div style='
        font-size: 48px;
        color: rgba(255, 0, 0, 0.5);
        transform: rotate(-45deg);
    '>DRAFT</div>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Lista de comprobación de la migración

Pre-Migración

  • [ ] Inventario de todos los usos de Spire.PDF en el código base
  • [ ] Comprobar la capacidad de selección de texto de los PDF existentes (detección de problemas críticos)
  • [ ] Llamadas al documento LoadFromHTML() (estas son las prioritarias para corregir)
  • [ ] Obtenga la clave de licencia deIronPDFen ironpdf.com

Actualizaciones de código

  • [ ] Eliminar el paquete NuGet Spire.PDF (y FreeSpire.PDF si se utiliza la versión gratuita)
  • [ ] Instalar IronPdf paquete NuGet
  • [ ] Actualizar las importaciones de espacios de nombres (using Spire.Pdf;using IronPDF;)
  • [ ] Sustituir LoadFromHTML() por RenderHtmlAsPdf() (CORRECCIÓN CRÍTICA)
  • [ ] Sustituya nuevo PdfDocument()+ LoadFromFile() por PdfDocument.FromFile()
  • [ ] Sustituya InsertPageRange() por PdfDocument.Merge()
  • [ ] Sustituya Canvas.DrawString() por TextStamper + ApplyStamp()
  • [Reemplace SaveToFile() por SaveAs()
  • [ ] Eliminar todas las llamadas Close() (no necesarias en IronPDF)
  • [ ] Añadir inicialización de licencia al inicio de la aplicación

Pruebas

  • [ ] Comprobar que el texto se puede seleccionar en los PDF generados (PRUEBA CRÍTICA)
  • [ ] Verificar las mejoras de renderizado CSS (Flexbox/Grid ahora funcionan)
  • [ ] Comprobar que el tamaño de los archivos es menor
  • [ ] Prueba de accesibilidad con lectores de pantalla
  • [Comparación de rendimiento

Conclusión

Aunque Spire.PDF ofrece un conjunto de funcionalidades pertinentes para los desarrolladores atrincherados en aplicaciones heredadas y operaciones basadas en suites, sus limitaciones en la representación de texto, la dependencia de motores de representación obsoletos y los problemas de manejo de fuentes son consideraciones importantes.IronPDFdestaca como una alternativa competitiva, demostrando capacidades superiores de conversión de HTML a PDF a través de sus modernas técnicas de renderizado y un sólido manejo del texto.

Los cambios clave en esta migración son:

  1. Representación del texto: Basado en imágenes (no seleccionable) → Texto verdadero (seleccionable, buscable)
  2. Motor de renderizado: dependiente de Internet Explorer → Modern Chromium
  3. Soporte CSS: Limitada → CSS3 completa (Flexbox, cuadrícula, variables CSS)
  4. Conversión HTML: <código>pdf.LoadFromHTML()</código→ renderer.RenderHtmlAsPdf()
  5. Cargar PDF existente: nuevo PdfDocument()+ LoadFromFile()PdfDocument.FromFile()
  6. Fusionar PDF: InsertPageRange()PdfDocument.Merge()
  7. Añadir texto: Canvas.DrawString() con PdfFont/PdfBrushTextStamper + ApplyStamp()
  8. Guardar: SaveToFile()SaveAs()
  9. Cleanup: Close() necesario → No necesario (patrón dispose)
  10. Tamaño del archivo: Grande (basado en imágenes) → Compacto (PDF auténtico)
  11. Accesibilidad: Pobre → Excelente

A la hora de seleccionar una biblioteca PDF, es fundamental adaptar la elección a las exigencias específicas del proyecto en cuestión, teniendo en cuenta factores como la fidelidad del documento, la capacidad de búsqueda y la compatibilidad con la web moderna. Al comprender esta dinámica, los desarrolladores pueden tomar decisiones informadas que optimicen el manejo de los documentos y la experiencia del usuario.

Explore la documentación completa de IronPDF, tutoriales y referencia de API para acelerar su migración a Spire.PDF.

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