using IronPdf;
// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from a HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
// Export to a file or Stream
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external html assets: Images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
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)
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:
Para estruturas especializadas, o IronPDF oferece pacotes de extensão dedicados:
Servidor Blazor :
Install-Package IronPdf.Extensions.Blazor
MAUI:
Install-Package IronPdf.Extensions.Maui
Framework MVC:
Install-Package IronPdf.Extensions.Mvc.Framework
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;
// 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;
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"
$vbLabelText $csharpLabel
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 , ,
, etc.
ImageParagraph
tag
ImagensHTMLpadrão
TableParagraph
HTML
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);
}
}
}
// 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);
}
}
}
Imports TallComponents.PDF.Layout
Imports TallComponents.PDF.Layout.Paragraphs
Imports System.IO
Class Program
Shared Sub Main()
Dim document As New Document()
Dim section As Section = document.Sections.Add()
' XhtmlParagraph supports XHTML 1.0/1.1 +CSS 2.1 only.
Dim xhtml As 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 fs As New FileStream("output.pdf", FileMode.Create)
document.Write(fs)
End Using
End Sub
End Class
$vbLabelText $csharpLabel
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");
}
}
// 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");
}
}
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
$vbLabelText $csharpLabel
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);
}
}
}
// 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 Class
$vbLabelText $csharpLabel
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
$vbLabelText $csharpLabel
A 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);
}
}
}
}
// 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 Class
$vbLabelText $csharpLabel
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
$vbLabelText $csharpLabel
A 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);
}
}
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 Using
$vbLabelText $csharpLabel
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")
$vbLabelText $csharpLabel
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:
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.
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:
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 ...