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

Cómo migrar de TextControl a IronPDF en C#

Migración de TextControl a IronPDF: Una guía completa para desarrolladores de C

TX Text Control se ha consolidado como un completo componente editor de documentos en el ecosistema .NET, ofreciendo sólidas capacidades de edición DOCX con controles de interfaz de usuario integrados. Sin embargo, para los equipos de desarrollo cuyo principal requisito es la generación de PDF en lugar de la edición completa de documentos, la arquitectura de TextControl presenta una sobrecarga significativa en costes de licencia, complejidad y dependencias de tiempo de ejecución.

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

Por qué migrar de TextControl

La decisión de migrar de TextControl suele centrarse en adaptar las herramientas a las necesidades reales. Control de texto TXes fundamentalmente un editor de documentos que trata la generación de PDF como una función secundaria. Entre las principales razones por las que los equipos de desarrollo se plantean la migración se incluyen:

Licencia cara: TextControl funciona con una licencia comercial a un mínimo de 3.398 dólares al año por desarrollador. Un equipo de cuatro personas puede esperar invertir alrededor de 6.749 dólares al año, con costes adicionales por licencias de tiempo de ejecución de implementación en servidor. Los costes de renovación ascienden al 40% anual, lo que es obligatorio para mantener el acceso a las actualizaciones.

PDF como ocurrencia tardía: La arquitectura principal es el procesamiento de textos, no el PDF. Aunque existe la posibilidad de generar archivos PDF, se trata más de una función añadida que del objetivo principal, por lo que la calidad del resultado no es óptima.

Bugs de hardware: El bug Intel Iris Xe Graphics afecta a la renderización de documentos en los procesadores Intel más recientes (11ª generación), requiriendo una solución de registro para resolverlo.

Dependencias flotantes: TextControl incluye componentes de interfaz de usuario de edición de documentos que puede que no necesite si su enfoque es puramente la generación de PDF.

Arquitectura del procesador de palabras: No está optimizada para los flujos de trabajo de HTML a PDF que exigen las aplicaciones web modernas.

API compleja: La gestión del contexto y el modelo de selección de ServerTextControl añaden una complejidad innecesaria a las tareas sencillas de generación de PDF.

Comparación de costes

AspectoControl de texto TXIronPDF
Licencia base$3,398+Reducción significativa
Renovación anual40% obligatorioAsistencia opcional
Por desarrollador
Componentes de interfaz de usuarioPaquete (bloat)Enfocado a PDF
Coste total de 3 años$5,750+Mucho más bajo

IronPDFfrente a TextControl: 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ísticaControl de texto TXIronPDF
Enfoque principalEdición DOCXGeneración de PDF
Coste de la licencia3.398 $/año por desarrollador749 $ una sola vez por desarrollador
Calidad PDFFunción básica y complementariaFunciones principales
Compatibilidad de hardwareProblemas conocidos con Intel IrisEstable en todos los dispositivos
Integración con la interfaz de usuarioRequiere componentes de interfaz de usuarioSin sobrecarga de componentes de interfaz de usuario
Renderización HTML/CSSBuggy con HTMLHTML5/CSS3 moderno
HTML a PDFSí (secundario)Sí (principal)
Soporte CSSLimitadoCSS3 completo
JavaScriptLimitadoES2024 completo
URL a PDFConfiguración complejaNativo
Encabezados/pies de páginaAPI complejasHTML sencillo
Combinación de correspondenciaPropietarioPlantillas HTML
PDF/A
Protección por contraseña
Firmas digitales
Fusionar PDFLimitado
Dividir PDFLimitado
Gestión del contextoRequeridoNo es necesario
MultiplataformaCentrado en Windows

Inicio rápido: Migración de TextControl a IronPDF

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

Paso 1: Sustituir paquetes NuGet

Elimine todos los paquetes de TextControl:

# Remove TX Text Control
dotnet remove package TXTextControl.TextControl
dotnet remove package TXTextControl.DocumentServer
# Remove TX Text Control
dotnet remove package TXTextControl.TextControl
dotnet remove package TXTextControl.DocumentServer
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 TextControl por el espacio de nombres IronPdf:

// Before (TextControl)
using TXTextControl;
using TXTextControl.DocumentServer;

// After (IronPDF)
using IronPdf;
// Before (TextControl)
using TXTextControl;
using TXTextControl.DocumentServer;

// After (IronPDF)
using IronPdf;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Ejemplos de migración de código

Convertir HTML a PDF

El caso de uso más común demuestra la diferencia arquitectónica entre estas bibliotecas PDF .NET.

Enfoque de TextControl:

// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

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

                textControl.Load(html, StreamType.HTMLFormat);
                textControl.Save("output.pdf", StreamType.AdobePDF);
            }
        }
    }
}
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

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

                textControl.Load(html, StreamType.HTMLFormat);
                textControl.Save("output.pdf", StreamType.AdobePDF);
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Enfoque IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

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

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

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

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

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

La versión TextControl requiere crear una instancia ServerTextControl, llamar a Create() para inicializar el contexto, cargar HTML con StreamType.HTMLFormat y guardar con StreamType.AdobePDF. El bloque using es obligatorio para la correcta disposición de los recursos.

IronPDF elimina por completo la gestión del contexto. El ChromePdfRenderer no requiere ninguna ceremonia de inicialización: créalo, renderiza HTML y guárdalo. Esta simplificación arquitectónica reduce la carga cognitiva y los posibles errores de gestión de recursos.

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

Fusión de varios PDF

La fusión de PDF revela otra importante diferencia de complejidad entre estas bibliotecas.

Enfoque de TextControl:

// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                byte[] pdf1 = File.ReadAllBytes("document1.pdf");
                textControl.Load(pdf1, StreamType.AdobePDF);

                byte[] pdf2 = File.ReadAllBytes("document2.pdf");
                textControl.Load(pdf2, StreamType.AdobePDF, LoadAppendMode.Append);

                textControl.Save("merged.pdf", StreamType.AdobePDF);
            }
        }
    }
}
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                byte[] pdf1 = File.ReadAllBytes("document1.pdf");
                textControl.Load(pdf1, StreamType.AdobePDF);

                byte[] pdf2 = File.ReadAllBytes("document2.pdf");
                textControl.Load(pdf2, StreamType.AdobePDF, LoadAppendMode.Append);

                textControl.Save("merged.pdf", StreamType.AdobePDF);
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Enfoque IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            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;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            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

TextControl requiere la lectura de archivos en matrices de bytes, la gestión del contexto ServerTextControl y el uso de LoadAppendMode.Append para combinar documentos. El método PdfDocument.Merge() deIronPDFse encarga de todo con una única llamada explícita.

Para situaciones de fusión avanzadas, incluida la extracción selectiva de páginas, consulte la guía de fusión y división de PDF.

Añadir encabezados y pies de página

Los encabezados y pies de página con números de página dinámicos demuestran la diferencia de complejidad de las API.

Enfoque de TextControl:

// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";
                textControl.Load(html, StreamType.HTMLFormat);

                HeaderFooter header = new HeaderFooter(HeaderFooterType.Header);
                header.Text = "Document Header";
                textControl.Sections[0].HeadersAndFooters.Add(header);

                HeaderFooter footer = new HeaderFooter(HeaderFooterType.Footer);
                footer.Text = "Page {page} of {numpages}";
                textControl.Sections[0].HeadersAndFooters.Add(footer);

                textControl.Save("output.pdf", StreamType.AdobePDF);
            }
        }
    }
}
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";
                textControl.Load(html, StreamType.HTMLFormat);

                HeaderFooter header = new HeaderFooter(HeaderFooterType.Header);
                header.Text = "Document Header";
                textControl.Sections[0].HeadersAndFooters.Add(header);

                HeaderFooter footer = new HeaderFooter(HeaderFooterType.Footer);
                footer.Text = "Page {page} of {numpages}";
                textControl.Sections[0].HeadersAndFooters.Add(footer);

                textControl.Save("output.pdf", StreamType.AdobePDF);
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Enfoque IronPDF:

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

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";

            var pdf = renderer.RenderHtmlAsPdf(html);

            pdf.AddTextHeader("Document Header");
            pdf.AddTextFooter("Page {page} of {total-pages}");

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

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";

            var pdf = renderer.RenderHtmlAsPdf(html);

            pdf.AddTextHeader("Document Header");
            pdf.AddTextFooter("Page {page} of {total-pages}");

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

TextControl requiere la creación de objetos HeaderFooter con enums HeaderFooterType específicos, el acceso a las secciones del documento a través de textControl.Sections[0] y la adición a la colección HeadersAndFooters.IronPDFproporciona métodos directos AddTextHeader y AddTextFooter con una sintaxis sencilla de marcador de posición.

Para cabeceras basadas en HTML con control total del estilo,IronPDFtambién admite HtmlHeaderFooter:

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: center; font-size: 12pt;'>
            Company Report
        </div>",
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: right; font-size: 10pt;'>
            Page {page} of {total-pages}
        </div>",
    MaxHeight = 25
};
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: center; font-size: 12pt;'>
            Company Report
        </div>",
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: right; font-size: 10pt;'>
            Page {page} of {total-pages}
        </div>",
    MaxHeight = 25
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Más información sobre las opciones de encabezado y pie de página en documentación sobre encabezados y pies de página.

Referencia de mapeo de TextControl API a IronPDF

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

Control de texto TXIronPDFNotas
<código>ServerTextControl.Create()</código<código>new ChromePdfRenderer()</códigoSin gestión de contexto
<código>tx.Load(html, StreamType.HTMLFormat)</códigorenderer.RenderHtmlAsPdf(html)Traducción directa
<código>tx.Load(url, StreamType.HTMLFormat)</código<código>renderer.RenderUrlAsPdf(url)</códigoSoporte de URL
<código>tx.Save(path, StreamType.AdobePDF)</código<código>pdf.SaveAs(ruta)</códigoGuardar simple
<código>SaveSettings.PDFAConformance</código<código>RenderingOptions.PdfAFormat</códigoPDF/A
<código>DocumentServer.MailMerge</códigoPlantillas HTML + RazorFusión de plantillas
<código>DocumentTarget.HeadersAndFooters</código<código>HtmlHeaderFooter</códigoEncabezados/pies de página
Configuración de carga<código>RenderingOptions</códigoConfiguración
Tipo de flujo.AdobePDFResultados por defectoEl PDF es primordial

Problemas comunes de migración y soluciones

Edición 1: Contexto de ServerTextControl

TextControl requiere Create() y using block para cada operación.

Solución:IronPDFno tiene gestión de contexto:

// Just create and use
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Just create and use
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Número 2: Conversiones StreamType

TextControl carga diferentes formatos y convierte a PDF a través de los enums StreamType.

Solución:IronPDFrenderiza HTML directamente sin conversión de formatos intermedios:

// No format conversion needed
var pdf = renderer.RenderHtmlAsPdf(html);
// No format conversion needed
var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Edición 3: Plantillas DOCX

TextControl utiliza archivos DOCX para plantillas con combinación de correspondencia.

Solución: Convertir a plantillas HTML con interpolación de cadenas de C# o Razor:

var data = new { CustomerName = "John Doe", InvoiceNumber = "12345", Total = "$1,500.00" };

var html = $@"
<html>
<head>
    <style>
        body {{ font-family: Arial; padding: 40px; }}
        h1 {{ color: #333; }}
        .total {{ font-size: 24px; color: green; }}
    </style>
</head>
<body>
    <h1>Invoice #{data.InvoiceNumber}</h1>
    <p>Customer: {data.CustomerName}</p>
    <p class='total'>Total: {data.Total}</p>
</body>
</html>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("invoice.pdf");
var data = new { CustomerName = "John Doe", InvoiceNumber = "12345", Total = "$1,500.00" };

var html = $@"
<html>
<head>
    <style>
        body {{ font-family: Arial; padding: 40px; }}
        h1 {{ color: #333; }}
        .total {{ font-size: 24px; color: green; }}
    </style>
</head>
<body>
    <h1>Invoice #{data.InvoiceNumber}</h1>
    <p>Customer: {data.CustomerName}</p>
    <p class='total'>Total: {data.Total}</p>
</body>
</html>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("invoice.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Número 4: Intel Iris Xe Graphics Bug

TextControl ha documentado problemas de renderizado con procesadores Intel de 11ª generación, que requieren soluciones de registro.

Solución:IronPDFutiliza el renderizado Chromium, por lo que no se requieren errores de aceleración de hardware ni modificaciones en el registro.

Lista de migración de TextControl

Tareas previas a la migración

Audite su código base para identificar todos los usos de TextControl:

grep -r "using TXTextControl" --include="*.cs" .
grep -r "ServerTextControl\|Load\|Save" --include="*.cs" .
grep -r "using TXTextControl" --include="*.cs" .
grep -r "ServerTextControl\|Load\|Save" --include="*.cs" .
SHELL

Plantillas de combinación de correspondencia de documentos para su conversión a HTML. Tenga en cuenta los requisitos de encabezado/pie de página para la implementación con HtmlHeaderFooter. Identifique cualquier funcionalidad de edición de DOCX que pueda requerir soluciones alternativas.

Tareas de actualización de código

  1. Eliminar paquetes NuGet de TX Text Control
  2. Instalación del paquete IronPdf NuGet
  3. Eliminar la gestión de contexto ServerTextControl (no más llamadas a Create())
  4. Convertir cargas StreamType.HTMLFormat a RenderHtmlAsPdf
  5. Convertir combinación de correspondencia en plantillas HTML con interpolación de cadenas o Razor
  6. Actualice los encabezados/pies de página para utilizar <código>HtmlHeaderFooter</códigoo AddTextHeader/AddTextFooter
  7. Simplificar la configuración de páginas mediante RenderingOptions
  8. Añadir inicialización de licencia al inicio

Pruebas posteriores a la migración

Tras la migración, verifique estos aspectos:

  • Prueba de que todas las plantillas de documentos se visualizan correctamente
  • Verificar el cumplimiento de PDF/Asi es necesario
  • Probar la funcionalidad de la protección por contraseña
  • Comprobar que los encabezados/pies de página aparecen en todas las páginas
  • Comprobación en hardware Intel de 11ª generación: ya no se necesitan más soluciones de registro con IronPDF

Beneficios clave de migrar a IronPDF

Pasar de TextControl aIronPDFofrece varias ventajas a los equipos centrados en la generación de PDF:

Arquitectura PDF-First:IronPDFestá diseñado específicamente para la generación de PDF, ofreciendo sólidas capacidades de creación y representación de documentos mediante el aprovechamiento de los modernos estándares HTML5 y CSS3.

Eficiencia de costes: el precio único deIronPDFlo hace significativamente más barato con el tiempo, especialmente en comparación con el servicio basado en suscripción de TextControl con renovaciones anuales obligatorias del 40%.

Estabilidad probada: Fiabilidad documentada en distintos tipos de hardware, evitando problemas como los de TextControl con gráficos Intel.

Sin gestión de contextos: Elimina la ceremonia de creación ServerTextControl y los patrones de eliminación de recursos. El renderizado sin estado deIronPDFsimplifica el código y reduce las posibles fugas de memoria.

Motor de renderizado moderno: A medida que aumenta la adopción de .NET 10 y C# 14 hasta 2026, el renderizado basado en Chromium deIronPDFgarantiza la compatibilidad con los estándares web actuales y futuros.

Conclusión

TX Text Control destaca como un completo componente editor de documentos con funciones completas de edición DOCX y controles de interfaz de usuario integrados. Sin embargo, para los equipos de desarrollo cuyo principal requisito es generar PDF a partir de HTML, URL o datos, la infraestructura de edición de documentos representa una complejidad y un coste innecesarios.

IronPDF ofrece una generación de PDF centrada en una API más sencilla, un moderno renderizado HTML5/CSS3 y un coste total de propiedad significativamente menor. La ruta de migración es sencilla: sustituir los paquetes NuGet, eliminar la gestión de contextos y convertir las operaciones StreamType en llamadas directas a la renderización.

Comience su migración hoy mismo con una prueba gratuita de IronPDF y evalúe la diferencia que supone la generación de PDF específicos para su flujo de trabajo de desarrollo.

Para una guía de implementación completa, explore la documentación de IronPDF y tutoriales.

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