Como usar o mecanismo IronPDF no Docker | IronPDF
Em 27 de maio de 2025, Apryse adquiriu a TallComponents. Novas licenças para TallPDF.NET e PDFKit.NET não são mais oferecidas, e a Apryse direciona novos compradores para o iText SDK (também de propriedade da Apryse). Clientes existentes continuam recebendo suporte, mas o motor está apenas em manutenção. Para equipes que atualmente utilizam o TallComponents, planejar uma migração agora evita uma troca forçada mais tarde.
Este guia fornece um caminho de migração do Componentes altos para o IronPDF, incluindo instruções passo a passo, mapeamentos de API e exemplos de código para desenvolvedores .NET planejando a transição.
Por Que Planejar uma Migração do TallComponents
A Componentes altos (fundada em 2001) lançou dois principais produtos PDF for .NET: PDFKit.NET para carregamento e manipulação de PDFs, e TallPDF.NET para geração de documentos orientados ao layout. Após a aquisição da Apryse, as vendas de novas licenças foram encerradas, o que altera o horizonte de planejamento para equipes que dependem da biblioteca.
Principais Limitações do Componentes altos Hoje
Fechado para novas licenças: A página da Componentes altos na Apryse afirma que não está mais oferecendo novas licenças para os produtos TallComponents, e direciona novos compradores para o iText SDK. Os detentores de licença existentes continuam sendo suportados.
Pipeline deHTMLapenas XHTML: TallPDF.NET fornece uma classe XhtmlParagraph que interpreta XHTML 1.0 Strict / XHTML 1.1 + CSS 2.1. PDFKit.NET por si só não possui um pipeline de HTML. Conteúdo moderno em HTML5 + CSS3 +JavaScriptnão é renderizado de forma confiável — não há um motor de navegador sem cabeça incluído.
Plataforma alvo congelada: TallComponents.PDFKit5 tem como alvo o .NET Standard 2.0; o antigo TallComponents.PDFKit (4.x) tem como alvo o .NET Framework 2.0. Não há um TFM for .NET 8/9 publicado.
Roteiro apenas de manutenção: Com a energia de desenvolvimento da Apryse focada no Apryse SDK e iText, os pacotes com marca Componentes altos recebem atualizações de manutenção, mas sem novo roteiro de recursos.
IronPDF: Uma alternativa moderna ao TallComponents
O IronPDF aborda as lacunas centrais que afetam os usuários do Componentes altos nas pilhas atuais do .NET:
| Recurso | Componentes altos | IronPDF |
|---|---|---|
| Status de venda atual | Fechado para novas licenças (Apryse adquiriu 2025-05-27) | Ativamente vendido |
| Suporte HTML-para-PDF | XHTML 1.0/1.1 +CSS 2.1via XhtmlParagraph (TallPDF.NET) | Sim (HTML5/CSS3 com Chromium) |
| JavaScriptemHTML | Não | ES2024 completo |
| Instalação | NuGet (TallComponents.PDFKit5, TallComponents.TallPDF5) | NuGet (IronPdf) |
| Suporte ao cliente | Apenas para clientes existentes; novos compradores direcionados para o iText | Suporte ativo e comunidade |
| Investimento futuro | Apenas manutenção | Roteiro de longo prazo |
TallComponents utiliza um modelo orientado a XML/layout enraizado em uma era anterior de geração de documentos .NET, enquanto o IronPDF fornece renderizaçãoHTMLalimentada por Chromium alinhada com a forma como as equipes constroem aplicativos front-end hoje.
Guia rápido: Migração do Componentes altos para o IronPDF
Passo 1: Substituir pacotes NuGet
Remover os pacotes Componentes altos que seu projeto referencia. Os IDs reais dos pacotes no nuget.org são TallComponents.PDFKit5 (ou TallComponents.PDFKit para 4.x) e TallComponents.TallPDF5 / TallPDF6:
# Remove Componentes altos packages (whichever your project uses)
dotnet remove package TallComponents.PDFKit5
dotnet remove package TallComponents.TallPDF5
dotnet remove package TallComponents.PDFRasterizer4
Instale o IronPDF:
Para estruturas especializadas, o IronPDF oferece pacotes de extensão dedicados:
Servidor Blazor :
MAUI:
Framework MVC:
Etapa 2: Atualizar Namespaces
Substituir namespaces do Componentes altos pelo namespace IronPDF:
// Before (TallComponents — real namespaces)
using TallComponents.PDF; // Document, Page (PDFKit.NET)
using TallComponents.PDF.Shapes; // TextShape, ImageShape (PDFKit)
using TallComponents.PDF.Security; // PasswordSecurity
using TallComponents.PDF.Layout; // Document, Section (TallPDF.NET)
using TallComponents.PDF.Layout.Paragraphs; // TextParagraph, XhtmlParagraph
// After (IronPDF)
using IronPdf;Imports IronPdf
' Before (TallComponents — real namespaces)
' Imports TallComponents.PDF ' Document, Page (PDFKit.NET)
' Imports TallComponents.PDF.Shapes ' TextShape, ImageShape (PDFKit)
' Imports TallComponents.PDF.Security ' PasswordSecurity
' Imports TallComponents.PDF.Layout ' Document, Section (TallPDF.NET)
' Imports TallComponents.PDF.Layout.Paragraphs ' TextParagraph, XhtmlParagraph
' After (IronPDF)
Imports IronPdfEtapa 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"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 (TallPDF.NET: layout) | ChromePdfRenderer | Criar um renderizador para geração de PDFs |
Document (PDFKit.NET: manipular) | PdfDocument | Carregar/editar PDFs existentes |
Section | Automático | Seções derivadas da estruturaHTML |
TextParagraph | Elementos de textoHTML | Use <p>, <h1>, <div>, etc. |
ImageParagraph | tag <img> | ImagensHTMLpadrão |
TableParagraph | HTML <table> | TabelasHTMLpadrão |
XhtmlParagraph (XHTML 1.x + CSS 2.1) | RenderHtmlAsPdf() (HTML5/CSS3 via Chromium) | HTML moderno funciona |
Font | CSS font-family | Fontes da web suportadas |
document.Write(...) | pdf.SaveAs() / pdf.BinaryData | Saída em arquivo ou byte[] |
page.Overlay.Add(shape) | pdf.ApplyStamp(stamper) | Marca d'água / sobreposição |
outputDoc.Pages.Add(page.Clone()) | PdfDocument.Merge(...) / pdf.AppendPdf(...) | Mesclar vários PDFs |
Document.Security = new PasswordSecurity { ... } | 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
ConverterHTMLpara PDF
TallComponents lida comHTMLatravés de XhtmlParagraph do TallPDF.NET, que interpreta apenas XHTML 1.0/1.1 + CSS 2.1. HTML5 moderno, CSS3, flexbox, grid e conteúdo conduzido porJavaScriptestão fora dessa gramática:
Abordagem TallComponents:
// NuGet: Install-Package TallComponents.TallPDF5
// (HTML/XHTML conversion lives in TallPDF.NET, not in PDFKit.NET.)
using TallComponents.PDF.Layout;
using TallComponents.PDF.Layout.Paragraphs;
using System.IO;
class Program
{
static void Main()
{
Document document = new Document();
Section section = document.Sections.Add();
// XhtmlParagraph supports XHTML 1.0/1.1 +CSS 2.1only.
XhtmlParagraph xhtml = new XhtmlParagraph();
xhtml.Text = "<html><body><h1>Hello World</h1><p>This is a PDF from XHTML.</p></body></html>";
section.Paragraphs.Add(xhtml);
using (FileStream fs = new FileStream("output.pdf", FileMode.Create))
{
document.Write(fs);
}
}
}
Abordagem IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
// Create a PDF fromHTMLstring
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");
}
}
A ChromePdfRenderer do IronPDF usa um motor Chromium genuíno, oferecendo 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 deHTMLpara 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.PDFKit5
using TallComponents.PDF;
using System.IO;
class Program
{
static void Main()
{
// Create target document
Document outputDoc = new Document();
// Load first PDF and clone each page into the target
using (FileStream fs1 = new FileStream("document1.pdf", FileMode.Open, FileAccess.Read))
{
Document doc1 = new Document(fs1);
foreach (Page page in doc1.Pages)
{
outputDoc.Pages.Add(page.Clone()); // clone is required across documents
}
}
// Load second PDF and append the whole page collection
using (FileStream fs2 = new FileStream("document2.pdf", FileMode.Open, FileAccess.Read))
{
Document doc2 = new Document(fs2);
outputDoc.Pages.AddRange(doc2.Pages.CloneToArray());
}
// Save merged document
using (FileStream output = new FileStream("merged.pdf", FileMode.Create))
{
outputDoc.Write(output);
}
}
}Imports TallComponents.PDF
Imports System.IO
Class Program
Shared Sub Main()
' Create target document
Dim outputDoc As New Document()
' Load first PDF and clone each page into the target
Using fs1 As New FileStream("document1.pdf", FileMode.Open, FileAccess.Read)
Dim doc1 As New Document(fs1)
For Each page As Page In doc1.Pages
outputDoc.Pages.Add(page.Clone()) ' clone is required across documents
Next
End Using
' Load second PDF and append the whole page collection
Using fs2 As New FileStream("document2.pdf", FileMode.Open, FileAccess.Read)
Dim doc2 As New Document(fs2)
outputDoc.Pages.AddRange(doc2.Pages.CloneToArray())
End Using
' Save merged document
Using output As New FileStream("merged.pdf", FileMode.Create)
outputDoc.Write(output)
End Using
End Sub
End ClassAbordagem 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
Imports IronPdf
Module Program
Sub Main()
' Load PDFs
Dim pdf1 As PdfDocument = PdfDocument.FromFile("document1.pdf")
Dim pdf2 As PdfDocument = PdfDocument.FromFile("document2.pdf")
' Merge PDFs
Dim merged As PdfDocument = PdfDocument.Merge(pdf1, pdf2)
' Save merged document
merged.SaveAs("merged.pdf")
End Sub
End ModuleA versão Componentes altos requer iteração manual de páginas e clonagem.IronPDF reduz isso para 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.PDFKit5
using TallComponents.PDF;
using TallComponents.PDF.Shapes;
using System.IO;
using System.Drawing;
class Program
{
static void Main()
{
// Load existing PDF
using (FileStream fs = new FileStream("input.pdf", FileMode.Open, FileAccess.Read))
{
Document document = new Document(fs);
foreach (Page page in document.Pages)
{
TextShape watermark = new TextShape();
watermark.Text = "CONFIDENTIAL";
watermark.Font = new Font("Arial", 60);
watermark.Pen = new Pen(Color.FromArgb(128, 255, 0, 0));
watermark.X = 200;
watermark.Y = 400;
// Rotation is applied via a transform on PDFKit.NET
// (TextShape has no Rotate property in the PDFKit API).
watermark.Transform = new RotateTransform(45);
page.Overlay.Add(watermark);
}
using (FileStream output = new FileStream("watermarked.pdf", FileMode.Create))
{
document.Write(output);
}
}
}
}Imports TallComponents.PDF
Imports TallComponents.PDF.Shapes
Imports System.IO
Imports System.Drawing
Class Program
Shared Sub Main()
' Load existing PDF
Using fs As New FileStream("input.pdf", FileMode.Open, FileAccess.Read)
Dim document As New Document(fs)
For Each page As Page In document.Pages
Dim watermark As New TextShape()
watermark.Text = "CONFIDENTIAL"
watermark.Font = New Font("Arial", 60)
watermark.Pen = New Pen(Color.FromArgb(128, 255, 0, 0))
watermark.X = 200
watermark.Y = 400
' Rotation is applied via a transform on PDFKit.NET
' (TextShape has no Rotate property in the PDFKit API).
watermark.Transform = New RotateTransform(45)
page.Overlay.Add(watermark)
Next
Using output As New FileStream("watermarked.pdf", FileMode.Create)
document.Write(output)
End Using
End Using
End Sub
End ClassAbordagem 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
Imports IronPdf
Imports IronPdf.Editing
Module Program
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 ModuleA classe TextStamper do IronPDF fornece 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;
using TallComponents.PDF.Signing;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using (FileStream fs = new FileStream("unsigned.pdf", FileMode.Open, FileAccess.Read))
{
Document document = new Document(fs);
X509Certificate2 cert = new X509Certificate2("certificate.pfx", "password");
SignatureField field = new SignatureField("Signature1");
field.Sign(cert);
document.Fields.Add(field);
using (FileStream output = new FileStream("signed.pdf", FileMode.Create))
{
document.Write(output);
}
}Imports TallComponents.PDF
Imports TallComponents.PDF.Signing
Imports System.IO
Imports System.Security.Cryptography.X509Certificates
Using fs As New FileStream("unsigned.pdf", FileMode.Open, FileAccess.Read)
Dim document As New Document(fs)
Dim cert As New X509Certificate2("certificate.pfx", "password")
Dim field As New SignatureField("Signature1")
field.Sign(cert)
document.Fields.Add(field)
Using output As New FileStream("signed.pdf", FileMode.Create)
document.Write(output)
End Using
End UsingAbordagem 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");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 | Fechado para novas licenças (Apryse adquiriu 2025-05-27) | Ativo |
| Apoiar | Apenas para clientes existentes | Completo |
| Atualizações | Apenas manutenção | Lançamentos regulares de recursos |
| Criação de Conteúdo | ||
| HTMLpara PDF | XHTML 1.0/1.1 +CSS 2.1(XhtmlParagraph) | HTML5/CSS3 completo via Chromium |
| URL para PDF | Sim para URLs XHTML (XhtmlParagraph.Path) | Sim |
| Suporte a CSS | CSS 2.1 | CSS3 completo |
| JavaScript | Não | ES2024 completo |
| XML / Modelos de Layout DOM | Sim (TallPDF.NET) | Não necessário (HTML) |
| Operações PDF | ||
| Mesclar PDFs | Sim (Pages.Add(page.Clone())) | Sim (PdfDocument.Merge) |
| Dividir PDFs | Sim | Sim |
| Marcas d'água | page.Overlay.Add(TextShape) | pdf.ApplyStamp(...) |
| Cabeçalhos/Rodapés | Layout DOM | HTML/CSS |
| Segurança | ||
| Proteção por senha | Sim (PasswordSecurity) | Sim |
| Assinaturas digitais | Sim (SignatureField.Sign) | Sim |
| Criptografia | RC4 / AES-128 / AES-256 | AES-128 / AES-256 |
| PDF/A | PDF/A-1, PDF/A-2, PDF/A-3 | Sim |
| Plataforma | ||
| Frameworks Alvo | PDFKit5: .NET Standard 2.0; PDFKit (4.x): .NET Framework 2.0 | .NET Framework 4.6.2+, .NET 6/7/8/9 |
| Desenvolvimento | ||
| Curva de Aprendizagem | XML / layout DOM | HTML |
| Documentação | Congelado na aquisição; novas documentações direcionadas para Apryse / iText | Mantido |
| Comunidade | Silencioso (sem novas vendas) | 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 -rE "XhtmlParagraph|TextParagraph|PasswordSecurity|page\.Overlay" --include="*.cs" .
Documentar modelos de XML/layout existentes - esses 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
- Converta modelos XHTML / layout DOM para HTML5
- Substitua o modelo de seção/parágrafo por elementos HTML.
- Atualize o código da tabela para usar tabelasHTMLpadrão.
- Converta cabeçalhos/rodapés paraHTMLcom
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
TallPDF.NET usa um DOM de layout (Section.Header / Section.Footer) para cabeçalhos de página. O IronPDF fornece cabeçalhos baseados emHTMLcom 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
};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.
- Teste todos os modelos de documentos
- Valide a funcionalidade de mesclagem de PDFs
- Teste assinaturas digitais
- Confirme que as configurações de segurança são aplicadas corretamente
Cronograma de migração recomendado
Como Componentes altos está fechado para novas licenças e com suporte apenas de manutenção, planeje a transição no seu próprio ritmo, mas não adie:
Semana 1: Auditar a base de código e identificar todos os usos de TallComponents.
Semana 2: Converta modelos XHTML / layout para HTML5
Semana 3: Atualização de segurança, fusão e assinatura de código
Semana 4: Testes e implantação em produção
Quanto mais tempo uma stack permanecer no TallComponents, mais ela se afastará dos atuais alvos .NET e HTML.
[{i: (Apryse, PDFKit, Tall Components, e iText são marcas registradas de seus respectivos proprietários. Este site não é afiliado, endossado ou patrocinado por Apryse, PDFKit, PDFTron, Componentes altos ou iText Group. Todos os nomes de produtos, logotipos e marcas são propriedade de seus respectivos proprietários. As comparações são apenas para fins informativos e refletem informações disponíveis publicamente no momento da redação.

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.