Como migrar de TallComponents para IronPDF em C#
Quando a Apryse adquiriu a TallComponents, o cenário de PDFs em .NET mudou significativamente. Com o Componentes altos não estando mais disponível para novas licenças e os usuários existentes sendo redirecionados para o iText SDK, os desenvolvedores que utilizam o TallPDF e o PDFKit enfrentam uma decisão inevitável: migrar agora ou correr o risco de executar um software sem suporte e com bugs de renderização conhecidos até 2026 e além.
Este guia fornece um caminho de migração completo do Componentes altos para o IronPDF, incluindo instruções passo a passo, mapeamentos de API e exemplos de código reais para ajudar desenvolvedores .NET profissionais a fazerem a transição de forma eficiente.
Por que a migração para Componentes altos agora é obrigatória
TallComponents já foi um nome respeitado na geração de PDFs em C#. A biblioteca oferecia fluxos de trabalho de documentos baseados em XML e manipulação programática de PDFs. Não entanto, a aquisição pela Apryse pôs fim à venda de novas licenças, alterando fundamentalmente os cálculos das equipes de desenvolvimento.
Limitações críticas de componentes altos
A decisão de migrar não se resume apenas ao suporte do fornecedor — a Componentes altos possui uma dívida técnica significativa:
Descontinuação do produto: Não há novas licenças disponíveis desde a aquisição da Apryse. O site oficial da Componentes altos afirma explicitamente que a venda de novas licenças foi encerrada, orientando os potenciais usuários a adotarem o iText SDK.
Sem suporte para conversão de HTML para PDF: Ao contrário das bibliotecas de PDF modernas, o Componentes altos não oferece suporte a conversões diretas de HTML para PDF. Os desenvolvedores das plataformas de suporte confirmaram essa limitação, apontando soluções de terceiros como o Pechkin como alternativas.
Problemas de renderização documentados: Os registros de alterações revelam extensos problemas de renderização, incluindo renderização de páginas em branco, gráficos ausentes, processamento não confiável de imagens JPEG e exibição incorreta de fontes. Esses erros nunca foram resolvidos antes da descontinuação do produto.
Sem suporte ou atualizações: Sem manutenção ativa, quaisquer vulnerabilidades de segurança ou problemas de compatibilidade com o .NET 10 e o C# 14 permanecerão sem solução.
IronPDF: Uma alternativa moderna ao TallComponents
O IronPDF resolve as principais limitações que tornavam os Componentes altos problemáticos para os fluxos de trabalho de desenvolvimento modernos:
| Recurso | Componentes altos | IronPDF |
|---|---|---|
| Situação atual da venda | Descontinuado para novas vendas | Desenvolvido e vendido ativamente |
| Suporte para conversão de HTML em PDF | Não | Sim (HTML5/CSS3 com Chromium) |
| Fidelidade de renderização | Problemas e erros conhecidos | Confiabilidade comprovada |
| Instalação | Complexo, Manual | Simples com o NuGet |
| Suporte ao Cliente | Transição para o SDK do iText | Apoio ativo e comunidade |
| Usabilidade futura | Fim da vida | Viabilidade a longo prazo |
O contraste é gritante: o Componentes altos oferece uma abordagem baseada em XML, de uma era diferente do desenvolvimento .NET , enquanto o IronPDF fornece renderização HTML com tecnologia Chromium, que se alinha à forma como os desenvolvedores criam aplicativos atualmente.
Guia rápido: Migração do Componentes altos para o IronPDF
Passo 1: Substituir pacotes NuGet
Remova todos os pacotes Componentes altos do seu projeto:
# Remove Componentes altos packages
dotnet remove package TallComponents.PDF.Kit
dotnet remove package TallComponents.PDF.Layout
dotnet remove package TallComponents.PDF.Layout.Drawing
# Remove Componentes altos packages
dotnet remove package TallComponents.PDF.Kit
dotnet remove package TallComponents.PDF.Layout
dotnet remove package TallComponents.PDF.Layout.Drawing
Instale o IronPDF:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
Para estruturas especializadas, o IronPDF oferece pacotes de extensão dedicados:
Servidor Blazor :
PM > Install-Package IronPdf.Extensions.Blazor
PM > Install-Package IronPdf.Extensions.Blazor
MAUI:
PM > Install-Package IronPdf.Extensions.Maui
PM > Install-Package IronPdf.Extensions.Maui
Framework MVC:
PM > Install-Package IronPdf.Extensions.Mvc.Framework
PM > Install-Package IronPdf.Extensions.Mvc.Framework
Etapa 2: Atualizar Namespaces
Substitua os namespaces Componentes altos pelo namespace IronPDF :
// Before (TallComponents)
using TallComponents.PDF.Kit;
using TallComponents.PDF.Layout;
using TallComponents.PDF.Layout.Drawing;
using TallComponents.PDF.Layout.Paragraphs;
// After (IronPDF)
using IronPdf;
// Before (TallComponents)
using TallComponents.PDF.Kit;
using TallComponents.PDF.Layout;
using TallComponents.PDF.Layout.Drawing;
using TallComponents.PDF.Layout.Paragraphs;
// After (IronPDF)
using IronPdf;
Imports IronPdf
Etapa 3: Inicialize sua 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"
Referência de mapeamento da API Componentes altos para IronPDF
Compreender como os conceitos do Componentes altos se relacionam com o IronPDF acelera o processo de migração:
| Componentes altos | IronPDF | Notas |
|---|---|---|
Document |
ChromePdfRenderer |
Criar um renderizador para geração de PDFs |
Section |
Automático | Seções derivadas da estrutura HTML |
TextParagraph |
Elementos de texto HTML | Use <p>, <h1>, <div>, etc. |
ImageParagraph |
<img> tag |
Imagens HTML padrão |
TableParagraph |
HTML <table> |
Tabelas HTML padrão |
Font |
CSS font-family |
Suporte completo para fontes da web |
document.Write() |
pdf.SaveAs() |
Salvar em arquivo |
document.Write(stream) |
pdf.BinaryData ou pdf.Stream |
Saída de fluxo |
Page.Canvas |
Renderização HTML/CSS | Não é necessário manipular manualmente a tela. |
XmlDocument.Generate() |
RenderHtmlAsPdf() |
HTML substitui XML |
PdfKit.Merger.Merge() |
PdfDocument.Merge() |
Mesclar vários PDFs |
Document.Security |
pdf.SecuritySettings |
Configuração de segurança de PDF |
PageLayout |
RenderingOptions |
Configurações de página e margens |
Exemplos de migração de código
Converter HTML para PDF
O Componentes altos não possui suporte nativo para conversão de HTML em PDF. A solução alternativa envolve a criação de fragmentos a partir do texto, o que na verdade não renderiza HTML:
Abordagem TallComponents:
// NuGet: Install-Package TallComponents.PDF.Kit
using TallComponents.PDF.Kit;
using System.IO;
class Program
{
static void Main()
{
// Create a new document
using (Document document = new Document())
{
string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
// Create HTML fragment
Fragment fragment = Fragment.FromText(html);
// Add to document
Section section = document.Sections.Add();
section.Fragments.Add(fragment);
// Save to file
using (FileStream fs = new FileStream("output.pdf", FileMode.Create))
{
document.Write(fs);
}
}
}
}
// NuGet: Install-Package TallComponents.PDF.Kit
using TallComponents.PDF.Kit;
using System.IO;
class Program
{
static void Main()
{
// Create a new document
using (Document document = new Document())
{
string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
// Create HTML fragment
Fragment fragment = Fragment.FromText(html);
// Add to document
Section section = document.Sections.Add();
section.Fragments.Add(fragment);
// Save to file
using (FileStream fs = new FileStream("output.pdf", FileMode.Create))
{
document.Write(fs);
}
}
}
}
Imports TallComponents.PDF.Kit
Imports System.IO
Class Program
Shared Sub Main()
' Create a new document
Using document As New Document()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"
' Create HTML fragment
Dim fragment As Fragment = Fragment.FromText(html)
' Add to document
Dim section As Section = document.Sections.Add()
section.Fragments.Add(fragment)
' Save to file
Using fs As New FileStream("output.pdf", FileMode.Create)
document.Write(fs)
End Using
End Using
End Sub
End Class
Abordagem IronPDF :
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
// Create a PDF from HTML string
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
// Create a PDF from HTML string
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
' Create a PDF from HTML string
Dim renderer As New ChromePdfRenderer()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Class
O ChromePdfRenderer do IronPDF usa um mecanismo Chromium genuíno, fornecendo suporte completo a HTML5 e CSS3. Isso significa que seus PDFs serão exibidos exatamente como apareceriam em um navegador moderno. Saiba mais no tutorial de HTML para PDF .
Unir vários PDFs
A fusão de PDFs demonstra a diferença de verbosidade entre Componentes altos e IronPDF.
Abordagem TallComponents:
// NuGet: Install-Package TallComponents.PDF.Kit
using TallComponents.PDF.Kit;
using System.IO;
class Program
{
static void Main()
{
// Create output document
using (Document outputDoc = new Document())
{
// Load first PDF
using (FileStream fs1 = new FileStream("document1.pdf", FileMode.Open))
using (Document doc1 = new Document(fs1))
{
foreach (Page page in doc1.Pages)
{
outputDoc.Pages.Add(page.Clone());
}
}
// Load second PDF
using (FileStream fs2 = new FileStream("document2.pdf", FileMode.Open))
using (Document doc2 = new Document(fs2))
{
foreach (Page page in doc2.Pages)
{
outputDoc.Pages.Add(page.Clone());
}
}
// Save merged document
using (FileStream output = new FileStream("merged.pdf", FileMode.Create))
{
outputDoc.Write(output);
}
}
}
}
// NuGet: Install-Package TallComponents.PDF.Kit
using TallComponents.PDF.Kit;
using System.IO;
class Program
{
static void Main()
{
// Create output document
using (Document outputDoc = new Document())
{
// Load first PDF
using (FileStream fs1 = new FileStream("document1.pdf", FileMode.Open))
using (Document doc1 = new Document(fs1))
{
foreach (Page page in doc1.Pages)
{
outputDoc.Pages.Add(page.Clone());
}
}
// Load second PDF
using (FileStream fs2 = new FileStream("document2.pdf", FileMode.Open))
using (Document doc2 = new Document(fs2))
{
foreach (Page page in doc2.Pages)
{
outputDoc.Pages.Add(page.Clone());
}
}
// Save merged document
using (FileStream output = new FileStream("merged.pdf", FileMode.Create))
{
outputDoc.Write(output);
}
}
}
}
Imports TallComponents.PDF.Kit
Imports System.IO
Class Program
Shared Sub Main()
' Create output document
Using outputDoc As New Document()
' Load first PDF
Using fs1 As New FileStream("document1.pdf", FileMode.Open)
Using doc1 As New Document(fs1)
For Each page As Page In doc1.Pages
outputDoc.Pages.Add(page.Clone())
Next
End Using
End Using
' Load second PDF
Using fs2 As New FileStream("document2.pdf", FileMode.Open)
Using doc2 As New Document(fs2)
For Each page As Page In doc2.Pages
outputDoc.Pages.Add(page.Clone())
Next
End Using
End Using
' Save merged document
Using output As New FileStream("merged.pdf", FileMode.Create)
outputDoc.Write(output)
End Using
End Using
End Sub
End Class
Abordagem IronPDF :
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
// Load PDFs
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
// Merge PDFs
var merged = PdfDocument.Merge(pdf1, pdf2);
// Save merged document
merged.SaveAs("merged.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
// Load PDFs
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
// Merge PDFs
var merged = PdfDocument.Merge(pdf1, pdf2);
// Save merged document
merged.SaveAs("merged.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
' Load PDFs
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
' Merge PDFs
Dim merged = PdfDocument.Merge(pdf1, pdf2)
' Save merged document
merged.SaveAs("merged.pdf")
End Sub
End Class
A versão Componentes altos requer iteração manual de páginas e clonagem. IronPDF reduz isso a uma única chamada PdfDocument.Merge(). Para cenários de mesclagem avançados, consulte a documentação de mesclagem em PDF .
Adicionando marcas d'água
A inclusão de marcas d'água em PDFs revela outra diferença significativa na experiência do desenvolvedor.
Abordagem TallComponents:
// NuGet: Install-Package TallComponents.PDF.Kit
using TallComponents.PDF.Kit;
using TallComponents.PDF.Layout;
using System.IO;
using System.Drawing;
class Program
{
static void Main()
{
// Load existing PDF
using (FileStream fs = new FileStream("input.pdf", FileMode.Open))
using (Document document = new Document(fs))
{
// Iterate through pages
foreach (Page page in document.Pages)
{
// Create watermark text
TextShape watermark = new TextShape();
watermark.Text = "CONFIDENTIAL";
watermark.Font = new Font("Arial", 60);
watermark.PenColor = Color.FromArgb(128, 255, 0, 0);
watermark.X = 200;
watermark.Y = 400;
watermark.Rotate = 45;
// Add to page
page.Overlay.Shapes.Add(watermark);
}
// Save document
using (FileStream output = new FileStream("watermarked.pdf", FileMode.Create))
{
document.Write(output);
}
}
}
}
// NuGet: Install-Package TallComponents.PDF.Kit
using TallComponents.PDF.Kit;
using TallComponents.PDF.Layout;
using System.IO;
using System.Drawing;
class Program
{
static void Main()
{
// Load existing PDF
using (FileStream fs = new FileStream("input.pdf", FileMode.Open))
using (Document document = new Document(fs))
{
// Iterate through pages
foreach (Page page in document.Pages)
{
// Create watermark text
TextShape watermark = new TextShape();
watermark.Text = "CONFIDENTIAL";
watermark.Font = new Font("Arial", 60);
watermark.PenColor = Color.FromArgb(128, 255, 0, 0);
watermark.X = 200;
watermark.Y = 400;
watermark.Rotate = 45;
// Add to page
page.Overlay.Shapes.Add(watermark);
}
// Save document
using (FileStream output = new FileStream("watermarked.pdf", FileMode.Create))
{
document.Write(output);
}
}
}
}
Imports TallComponents.PDF.Kit
Imports TallComponents.PDF.Layout
Imports System.IO
Imports System.Drawing
Class Program
Shared Sub Main()
' Load existing PDF
Using fs As New FileStream("input.pdf", FileMode.Open)
Using document As New Document(fs)
' Iterate through pages
For Each page As Page In document.Pages
' Create watermark text
Dim watermark As New TextShape()
watermark.Text = "CONFIDENTIAL"
watermark.Font = New Font("Arial", 60)
watermark.PenColor = Color.FromArgb(128, 255, 0, 0)
watermark.X = 200
watermark.Y = 400
watermark.Rotate = 45
' Add to page
page.Overlay.Shapes.Add(watermark)
Next
' Save document
Using output As New FileStream("watermarked.pdf", FileMode.Create)
document.Write(output)
End Using
End Using
End Using
End Sub
End Class
Abordagem IronPDF :
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
class Program
{
static void Main()
{
// Load existing PDF
var pdf = PdfDocument.FromFile("input.pdf");
// Create watermark
var watermark = new TextStamper()
{
Text = "CONFIDENTIAL",
FontSize = 60,
Opacity = 50,
Rotation = 45,
VerticalAlignment = VerticalAlignment.Middle,
HorizontalAlignment = HorizontalAlignment.Center
};
// Apply watermark to all pages
pdf.ApplyStamp(watermark);
// Save watermarked PDF
pdf.SaveAs("watermarked.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
class Program
{
static void Main()
{
// Load existing PDF
var pdf = PdfDocument.FromFile("input.pdf");
// Create watermark
var watermark = new TextStamper()
{
Text = "CONFIDENTIAL",
FontSize = 60,
Opacity = 50,
Rotation = 45,
VerticalAlignment = VerticalAlignment.Middle,
HorizontalAlignment = HorizontalAlignment.Center
};
// Apply watermark to all pages
pdf.ApplyStamp(watermark);
// Save watermarked PDF
pdf.SaveAs("watermarked.pdf");
}
}
Imports IronPdf
Imports IronPdf.Editing
Class Program
Shared Sub Main()
' Load existing PDF
Dim pdf = PdfDocument.FromFile("input.pdf")
' Create watermark
Dim watermark = New TextStamper() With {
.Text = "CONFIDENTIAL",
.FontSize = 60,
.Opacity = 50,
.Rotation = 45,
.VerticalAlignment = VerticalAlignment.Middle,
.HorizontalAlignment = HorizontalAlignment.Center
}
' Apply watermark to all pages
pdf.ApplyStamp(watermark)
' Save watermarked PDF
pdf.SaveAs("watermarked.pdf")
End Sub
End Class
A classe TextStamper do IronPDF oferece opções intuitivas de alinhamento e iteração automática de páginas. O guia de carimbos e marcas d'água abrange opções adicionais de personalização.
Assinaturas digitais
A assinatura de documentos é fundamental para aplicações empresariais.
Abordagem TallComponents:
using TallComponents.PDF.Kit;
using TallComponents.PDF.Kit.Signing;
Document document = new Document("unsigned.pdf");
// Load certificate
X509Certificate2 cert = new X509Certificate2("certificate.pfx", "password");
// Create signature
SignatureHandler handler = new SignatureHandler(cert);
document.Sign(handler);
document.Write("signed.pdf");
using TallComponents.PDF.Kit;
using TallComponents.PDF.Kit.Signing;
Document document = new Document("unsigned.pdf");
// Load certificate
X509Certificate2 cert = new X509Certificate2("certificate.pfx", "password");
// Create signature
SignatureHandler handler = new SignatureHandler(cert);
document.Sign(handler);
document.Write("signed.pdf");
Imports TallComponents.PDF.Kit
Imports TallComponents.PDF.Kit.Signing
Imports System.Security.Cryptography.X509Certificates
Dim document As New Document("unsigned.pdf")
' Load certificate
Dim cert As New X509Certificate2("certificate.pfx", "password")
' Create signature
Dim handler As New SignatureHandler(cert)
document.Sign(handler)
document.Write("signed.pdf")
Abordagem IronPDF :
using IronPdf;
using IronPdf.Signing;
var pdf = PdfDocument.FromFile("unsigned.pdf");
// Sign with certificate
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningContact = "support@company.com",
SigningLocation = "New York",
SigningReason = "Document Approval"
};
pdf.Sign(signature);
pdf.SaveAs("signed.pdf");
using IronPdf;
using IronPdf.Signing;
var pdf = PdfDocument.FromFile("unsigned.pdf");
// Sign with certificate
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningContact = "support@company.com",
SigningLocation = "New York",
SigningReason = "Document Approval"
};
pdf.Sign(signature);
pdf.SaveAs("signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Dim pdf = PdfDocument.FromFile("unsigned.pdf")
' Sign with certificate
Dim signature = New PdfSignature("certificate.pfx", "password") With {
.SigningContact = "support@company.com",
.SigningLocation = "New York",
.SigningReason = "Document Approval"
}
pdf.Sign(signature)
pdf.SaveAs("signed.pdf")
A API de assinatura do IronPDF inclui propriedades de metadados adicionais para informações de contato, localização e motivo da assinatura — importantes para registros de auditoria. Consulte a documentação sobre assinatura digital para obter detalhes completos sobre a implementação.
Comparação de recursos: Componentes altos vs IronPDF
| Recurso | Componentes altos | IronPDF | |||
|---|---|---|---|---|---|
| Status | ❌ DESCONTINUADO | ✅ Ativo | |||
| Apoiar | ❌ Nenhum | ✅ Completo | |||
| Atualizações | ❌ Nenhum | ✅ Regular | |||
| Criação de conteúdo : | HTML para PDF | Não | Cromo completo | ||
| URL para PDF | Não | Sim | |||
| Suporte a CSS | Não | CSS3 completo | |||
| JavaScript | Não | ES2024 completo | |||
| Modelos XML | Sim | Não é necessário | |||
| Operações com PDF : | Mesclar PDFs | Sim | Sim | ||
| Dividir PDFs | Sim | Sim | |||
| Marcas d'água | Manual | Embutido | |||
| Cabeçalhos/Rodapés | baseado em XML | HTML/CSS | |||
| : Segurança : | Proteção por senha | Sim | Sim | ||
| Assinaturas digitais | Sim | Sim | |||
| Criptografia | Sim | Sim | |||
| PDF/A | Limitado | Sim | |||
| Problemas conhecidos : | Páginas em branco | ⚠️ Bug documentado | Nenhum | ||
| Gráficos ausentes | ⚠️ Bug documentado | Nenhum | |||
| Problemas com fontes | ⚠️ Bug documentado | Nenhum | |||
| : Desenvolvimento : | Curva de Aprendizagem | Alto (XML) | Baixo (HTML) | ||
| Documentação | Desatualizado | Extenso | |||
| Comunidade | Nenhum | Ativo |
Lista de verificação para migração de componentes altos
Tarefas pré-migração
Faça uma auditoria em sua base de código para identificar todos os usos de TallComponents:
grep -r "using TallComponents" --include="*.cs" .
grep -r "Document\|Section\|TextParagraph" --include="*.cs" .
grep -r "using TallComponents" --include="*.cs" .
grep -r "Document\|Section\|TextParagraph" --include="*.cs" .
Documente os modelos e layouts XML existentes — eles serão convertidos para HTML. Identificar as configurações de segurança atualmente em uso, observando as configurações de senha e as implementações de assinatura digital.
Tarefas de atualização de código
- Remova os pacotes Componentes altos via NuGet.
- Instale o pacote IronPDF
- Converter layouts XML em modelos HTML
- Substitua o modelo de seção/parágrafo por elementos HTML.
- Atualize o código da tabela para usar tabelas HTML padrão.
- Converter cabeçalhos/rodapés em HTML com
HtmlHeaderFooter - Atualize as configurações de segurança para usar
pdf.SecuritySettings - Adicionar inicialização de licença na inicialização
Migração de cabeçalhos e rodapés
O Componentes altos utiliza cabeçalhos baseados em XML. O IronPDF fornece cabeçalhos baseados em HTML com espaços reservados dinâmicos:
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center;'>Header Text</div>",
MaxHeight = 25
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center;'>Footer Text</div>",
MaxHeight = 25
};
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center;'>Header Text</div>",
MaxHeight = 25
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center;'>Footer Text</div>",
MaxHeight = 25
};
Imports System
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
.HtmlFragment = "<div style='text-align:center;'>Header Text</div>",
.MaxHeight = 25
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter() With {
.HtmlFragment = "<div style='text-align:center;'>Footer Text</div>",
.MaxHeight = 25
}
Saiba mais sobre cabeçalhos e rodapés no IronPDF .
Fase de Testes
- Compare a saída visual entre as versões Componentes altos e IronPDF.
- Verifique se os problemas com páginas em branco foram resolvidos.
- Teste todos os modelos de documento.
- Validar a funcionalidade de mesclagem de PDFs
- Testar assinaturas digitais
- Confirme se as configurações de segurança foram aplicadas corretamente.
Cronograma de migração recomendado
Dado que o Componentes altos foi descontinuado e não recebe mais suporte, a migração deve ser feita com urgência:
Semana 1: Auditar a base de código e identificar todos os usos de TallComponents.
Semana 2: Converter modelos de documentos de XML para HTML
Semana 3: Atualização de segurança, fusão e assinatura de código
Semana 4: Testes e implantação em produção
Adiar significa executar software sem suporte e com bugs de renderização documentados — um risco que nenhuma equipe de desenvolvimento profissional deveria aceitar rumo a 2026.
Principais benefícios da migração
A migração do Componentes altos para o IronPDF oferece vantagens imediatas:
Mecanismo de renderização Chromium moderno: O suporte completo a CSS e JavaScript garante que os PDFs sejam renderizados exatamente como esperado, eliminando os bugs de página em branco e gráficos ausentes documentados no TallComponents.
Manutenção ativa e atualizações de segurança: o IronPDF recebe atualizações regulares, garantindo a compatibilidade com as versões atuais e futuras do .NET , incluindo o .NET 10.
Melhor integração com .NET : suporte nativo async/await e padrões de API modernos estão alinhados com as práticas atuais de desenvolvimento em C#.
Documentação completa: Tutoriais abrangentes e referências de API facilitam a implementação rápida.

