Como migrar de TextControl para IronPDF em C#
O Controle de texto TX se consolidou como um componente abrangente de edição de documentos no ecossistema .NET , oferecendo recursos robustos de edição de DOCX com controles de interface do usuário integrados. No entanto, para equipes de desenvolvimento cuja principal necessidade é a geração de PDFs em vez da edição completa de documentos, a arquitetura do TextControl apresenta custos adicionais significativos em licenciamento, complexidade e dependências de tempo de execução.
Este guia fornece um caminho completo de migração do TextControl para o IronPDF, com instruções passo a passo, comparações de código e exemplos práticos para desenvolvedores .NET profissionais que estejam avaliando essa transição.
Por que migrar do TextControl?
A decisão de migrar do TextControl geralmente se concentra em adequar suas ferramentas às suas necessidades reais. O Controle de texto TX é fundamentalmente um editor de documentos que trata a geração de PDFs como um recurso secundário. Os principais motivos pelos quais as equipes de desenvolvimento consideram a migração incluem:
Licenciamento caro: O TextControl opera com uma licença comercial a um custo mínimo de US$ 3.398 por ano por desenvolvedor. Uma equipe de quatro pessoas pode esperar investir cerca de US$ 6.749 por ano, com custos adicionais para licenças de tempo de execução de implantação de servidor. Os custos de renovação são de 40% ao ano, o que é obrigatório para manter o acesso às atualizações.
PDF como uma reflexão tardia: A arquitetura principal é de processamento de texto, não de PDF. Embora a geração de PDFs esteja disponível, ela é mais um recurso adicional do que o foco principal, resultando em uma qualidade de saída abaixo do ideal.
Problemas de hardware: O bug na placa gráfica Intel Iris Xe afeta a renderização de documentos em processadores Intel mais recentes (11ª geração), exigindo uma solução alternativa no registro do sistema para ser resolvido.
Dependências excessivas: o TextControl inclui componentes de interface de usuário para edição de documentos que podem não ser necessários se o seu foco for exclusivamente a geração de PDFs.
Arquitetura do processador de texto: Não otimizada para fluxos de trabalho de HTML para PDF exigidos por aplicativos web modernos.
API complexa: O modelo de gerenciamento de contexto e seleção do ServerTextControl adiciona complexidade desnecessária a tarefas simples de geração de PDF.
Comparação de custos
| Aspecto | Controle de texto TX | IronPDF |
|---|---|---|
| Licença básica | US$ 3.398+ | Significativamente menor |
| Renovação anual | 40% obrigatório | Suporte opcional |
| Por desenvolvedor | Sim | Sim |
| Componentes de interface do usuário | Pacote (inchaço) | com foco em PDF |
| Custo total em 3 anos | US$ 5.750+ | Muito menor |
IronPDF vs TextControl: Comparação de Recursos
Compreender as diferenças arquitetônicas ajuda os responsáveis pelas decisões técnicas a avaliar o investimento em migração:
| Recurso | Controle de texto TX | IronPDF |
|---|---|---|
| Foco principal | Edição de DOCX | Geração de PDF |
| Custo da licença | US$ 3.398/ano por incorporador | US$ 749, pagamento único por desenvolvedor |
| Qualidade do PDF | Recurso básico e adicional | Funcionalidade essencial de alto nível |
| Compatibilidade de hardware | Problemas conhecidos com o Intel Iris | Estável em todos os dispositivos |
| Integração com a interface do usuário | Requer componentes de interface do usuário | Sem excesso de componentes de interface do usuário |
| Renderização HTML/CSS | Com problemas de compatibilidade com HTML. | HTML5/CSS3 moderno |
| HTML para PDF | Sim (secundário) | Sim (primário) |
| Suporte a CSS | Limitado | CSS3 completo |
| JavaScript | Limitado | ES2024 completo |
| URL para PDF | Configuração complexa | Nativo |
| Cabeçalhos/Rodapés | API complexa | HTML simples |
| Mala direta | Proprietário | Modelos HTML |
| PDF/A | Sim | Sim |
| Proteção por senha | Sim | Sim |
| Assinaturas digitais | Sim | Sim |
| Mesclar PDFs | Limitado | Sim |
| Dividir PDFs | Limitado | Sim |
| Gestão de Contexto | Obrigatório | Não é necessário |
| Multiplataforma | Focado no Windows | Sim |
Guia rápido: Migração do TextControl para o IronPDF
A migração pode começar imediatamente com esses passos fundamentais.
Passo 1: Substituir pacotes NuGet
Remova todos os pacotes 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
Instale o IronPDF:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
Etapa 2: Atualizar Namespaces
Substitua os namespaces TextControl pelo namespace IronPDF :
// Before (TextControl)
using TXTextControl;
using TXTextControl.DocumentServer;
// After (IronPDF)
using IronPdf;
// Before (TextControl)
using TXTextControl;
using TXTextControl.DocumentServer;
// After (IronPDF)
using IronPdf;
Imports TXTextControl
Imports TXTextControl.DocumentServer
' After (IronPDF)
Imports IronPdf
Etapa 3: Inicializar a licença
Adicionar inicialização de licença na inicialização do aplicativo:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Exemplos de migração de código
Converter HTML para PDF
O caso de uso mais comum demonstra a diferença arquitetônica entre essas bibliotecas PDF for .NET .
Abordagem 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);
}
}
}
}
Imports TXTextControl
Imports System.IO
Namespace TextControlExample
Class Program
Shared Sub Main(ByVal args As String())
Using textControl As New ServerTextControl()
textControl.Create()
Dim html As String = "<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)
End Using
End Sub
End Class
End Namespace
Abordagem 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");
}
}
}
Imports IronPdf
Namespace IronPdfExample
Class Program
Shared Sub Main(ByVal args As String())
Dim renderer = New ChromePdfRenderer()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Class
End Namespace
A versão TextControl requer a criação de uma instância ServerTextControl, a chamada de Create() para inicializar o contexto, o carregamento do HTML com StreamType.HTMLFormat e o salvamento com StreamType.AdobePDF. O bloco using é obrigatório para o descarte adequado de recursos.
O IronPDF elimina completamente o gerenciamento de contexto. O ChromePdfRenderer não requer nenhuma cerimônia de inicialização — crie-o, renderize o HTML e salve. Essa simplificação arquitetônica reduz a carga cognitiva e os potenciais problemas de gerenciamento de recursos.
Para cenários avançados de conversão de HTML para PDF, consulte o guia de conversão de HTML para PDF .
Unir vários PDFs
A fusão de PDFs revela outra diferença significativa de complexidade entre essas bibliotecas.
Abordagem 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);
}
}
}
}
Imports TXTextControl
Imports System.IO
Namespace TextControlExample
Class Program
Shared Sub Main(ByVal args As String())
Using textControl As New ServerTextControl()
textControl.Create()
Dim pdf1 As Byte() = File.ReadAllBytes("document1.pdf")
textControl.Load(pdf1, StreamType.AdobePDF)
Dim pdf2 As Byte() = File.ReadAllBytes("document2.pdf")
textControl.Load(pdf2, StreamType.AdobePDF, LoadAppendMode.Append)
textControl.Save("merged.pdf", StreamType.AdobePDF)
End Using
End Sub
End Class
End Namespace
Abordagem 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");
}
}
}
Imports IronPdf
Namespace IronPdfExample
Class Program
Shared Sub Main(ByVal args As String())
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
End Sub
End Class
End Namespace
O TextControl requer a leitura de arquivos em matrizes de bytes, o gerenciamento do contexto e o uso de para mesclar documentos. O método PdfDocument.Merge() do IronPDF lida com tudo com uma única chamada explícita.
Para cenários avançados de mesclagem, incluindo extração seletiva de páginas, consulte o guia de mesclagem e divisão de PDFs .
Adicionando cabeçalhos e rodapés
Cabeçalhos e rodapés com numeração de páginas dinâmica demonstram a diferença na complexidade da API.
Abordagem 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);
}
}
}
}
Imports TXTextControl
Imports System.IO
Namespace TextControlExample
Class Program
Shared Sub Main(ByVal args As String())
Using textControl As New ServerTextControl()
textControl.Create()
Dim html As String = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>"
textControl.Load(html, StreamType.HTMLFormat)
Dim header As New HeaderFooter(HeaderFooterType.Header)
header.Text = "Document Header"
textControl.Sections(0).HeadersAndFooters.Add(header)
Dim footer As New HeaderFooter(HeaderFooterType.Footer)
footer.Text = "Page {page} of {numpages}"
textControl.Sections(0).HeadersAndFooters.Add(footer)
textControl.Save("output.pdf", StreamType.AdobePDF)
End Using
End Sub
End Class
End Namespace
Abordagem 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");
}
}
}
Imports IronPdf
Imports IronPdf.Rendering
Namespace IronPdfExample
Class Program
Shared Sub Main(args As String())
Dim renderer As New ChromePdfRenderer()
Dim html As String = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.AddTextHeader("Document Header")
pdf.AddTextFooter("Page {page} of {total-pages}")
pdf.SaveAs("output.pdf")
End Sub
End Class
End Namespace
O TextControl requer a criação de objetos HeaderFooter com enums HeaderFooterType específicos, o acesso às seções do documento por meio de textControl.Sections[0] e a adição à coleção HeadersAndFooters. IronPDF fornece métodos diretos AddTextHeader e AddTextFooter com sintaxe de marcador de posição simples.
Para cabeçalhos baseados em HTML com controle total de estilo, o IronPDF também oferece suporte a 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
};
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='width: 100%; text-align: center; font-size: 12pt;'>
Company Report
</div>",
.MaxHeight = 30
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='width: 100%; text-align: right; font-size: 10pt;'>
Page {page} of {total-pages}
</div>",
.MaxHeight = 25
}
Saiba mais sobre as opções de cabeçalho e rodapé na documentação de cabeçalhos e rodapés .
Referência de mapeamento da API TextControl para IronPDF
Este mapeamento acelera a migração ao mostrar equivalentes diretos da API:
| Controle de texto TX | IronPDF |
|---|---|
ServerTextControl.Create() |
new ChromePdfRenderer() |
tx.Load(html, StreamType.HTMLFormat) |
renderer.RenderHtmlAsPdf(html) |
tx.Load(url, StreamType.HTMLFormat) |
renderer.RenderUrlAsPdf(url) |
tx.Save(path, StreamType.AdobePDF) |
pdf.SaveAs(path) |
SaveSettings.PDFAConformance |
RenderingOptions.PdfAFormat |
DocumentServer.MailMerge |
Modelos HTML + Razor |
DocumentTarget.HeadersAndFooters |
HtmlHeaderFooter |
LoadSettings |
RenderingOptions |
StreamType.AdobePDF |
Saída padrão |
Problemas e soluções comuns em migrações
Problema 1: Contexto do ServerTextControl
O TextControl requer os blocos Create() e using para cada operação.
Solução: O IronPDF não possui gerenciamento 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);
' Just create and use
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
Problema 2: Conversões de StreamType
O TextControl carrega diferentes formatos e converte para PDF através de enums StreamType.
Solução: O IronPDF renderiza HTML diretamente, sem conversão de formato intermediária:
// No format conversion needed
var pdf = renderer.RenderHtmlAsPdf(html);
// No format conversion needed
var pdf = renderer.RenderHtmlAsPdf(html);
Dim pdf = renderer.RenderHtmlAsPdf(html)
Edição 3: Modelos DOCX
O TextControl utiliza arquivos DOCX para modelos com mala direta.
Solução: Converter para modelos HTML com interpolação de strings em C# ou 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");
Option Strict On
Dim data = New With {Key .CustomerName = "John Doe", Key .InvoiceNumber = "12345", Key .Total = "$1,500.00"}
Dim 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>"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("invoice.pdf")
Problema 4: Bug na placa gráfica Intel Iris Xe
O TextControl possui problemas de renderização documentados com processadores Intel de 11ª geração, que exigem soluções alternativas no registro do sistema.
Solução: O IronPDF usa renderização Chromium — sem necessidade de correções de bugs de aceleração de hardware ou modificações no registro.
Lista de verificação para migração do TextControl
Tarefas pré-migração
Faça uma auditoria em seu código-fonte para identificar todos os usos do controle 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" .
Modelos de mala direta para conversão em HTML. Observe os requisitos de cabeçalho/rodapé para implementação com HtmlHeaderFooter. Identifique qualquer funcionalidade de edição de DOCX que possa exigir soluções alternativas.
Tarefas de atualização de código
- Remova os pacotes NuGet do TX Text Control.
- Instale o pacote NuGet IronPDF
- Remover o gerenciamento de contexto
ServerTextControl(sem mais chamadasCreate()) - Converter cargas
StreamType.HTMLFormatparaRenderHtmlAsPdf - Converter mala direta em modelos HTML com interpolação de strings ou Razor
- Atualize os cabeçalhos/rodapés para usar
HtmlHeaderFooterouAddTextFooter - Simplifique as configurações da página usando
RenderingOptions - Adicionar inicialização de licença na inicialização
Testes pós-migração
Após a migração, verifique os seguintes aspectos:
- Teste se todos os modelos de documento são renderizados corretamente.
- Verificar a conformidade com o padrão PDF/A, se necessário.
- Testar a funcionalidade de proteção por senha
- Verificar se os cabeçalhos/rodapés aparecem em todas as páginas.
- Verifique o hardware Intel de 11ª geração — não são mais necessárias soluções alternativas no registro com o IronPDF.
Principais benefícios da migração para o IronPDF
A migração do TextControl para o IronPDF oferece diversas vantagens para equipes focadas na geração de PDFs:
Arquitetura PDF-First: O IronPDF foi desenvolvido especificamente para a geração de PDFs, oferecendo recursos robustos de criação e renderização de documentos, aproveitando os modernos padrões HTML5 e CSS3.
Relação custo-benefício: O preço único do IronPDF o torna significativamente mais barato a longo prazo, especialmente em comparação com o serviço por assinatura do TextControl, que exige renovações anuais de 40%.
Estabilidade comprovada: Confiabilidade documentada em diversos hardwares, evitando problemas como os enfrentados pelo TextControl com placas gráficas Intel.
Sem gerenciamento de contexto: Elimine a cerimônia de criação e os padrões de descarte de recursos. A renderização sem estado do IronPDF simplifica o código e reduz possíveis vazamentos de memória.
Mecanismo de renderização moderno: Com a crescente adoção do .NET 10 e do C# 14 até 2026, a renderização baseada no Chromium do IronPDF garante compatibilidade com os padrões da web atuais e futuros.

