How to Migrate from TallComponents to IronPDF in C#
On May 27, 2025, Apryse acquired TallComponents. New licenses for TallPDF.NET and PDFKit.NET are no longer offered, and Apryse routes new buyers to the iText SDK (also owned by Apryse). Existing customers continue to receive support, but the engine is on maintenance-only. For teams currently shipping on TallComponents, planning a migration now avoids a forced cutover later.
This guide provides a migration path from TallComponents to IronPDF, including step-by-step instructions, API mappings, and code examples for .NET developers planning the transition.
Why Plan a TallComponents Migration
TallComponents (founded 2001) shipped two main .NET PDF products: PDFKit.NET for loading and manipulating PDFs, and TallPDF.NET for layout-oriented document generation. Following the Apryse acquisition, new license sales have ended, which changes the planning horizon for teams relying on the library.
Key TallComponents Limitations Today
Closed to new licenses: Apryse's TallComponents page states it is no longer offering new licenses for TallComponents products, and directs new buyers to the iText SDK. Existing license holders continue to be supported.
XHTML-only HTML pipeline: TallPDF.NET ships an XhtmlParagraph class that parses XHTML 1.0 Strict / XHTML 1.1 + CSS 2.1. PDFKit.NET on its own has no HTML pipeline. Modern HTML5 + CSS3 + JavaScript content does not render reliably — there is no headless-browser engine in the box.
Frozen platform target: TallComponents.PDFKit5 targets .NET Standard 2.0; the older TallComponents.PDFKit (4.x) targets .NET Framework 2.0. There is no .NET 8/9 TFM published.
Maintenance-only road map: With Apryse's development energy focused on Apryse SDK and iText, TallComponents-branded packages receive maintenance updates but no new feature road map.
IronPDF: A Modern TallComponents Alternative
IronPDF addresses the core gaps that affect TallComponents users on current .NET stacks:
| Feature | TallComponents | IronPDF |
|---|---|---|
| Current sale status | Closed to new licenses (Apryse acquired 2025-05-27) | Actively sold |
| HTML-to-PDF support | XHTML 1.0/1.1 + CSS 2.1 via XhtmlParagraph (TallPDF.NET) |
Yes (HTML5/CSS3 with Chromium) |
| JavaScript in HTML | No | Full ES2024 |
| Installation | NuGet (TallComponents.PDFKit5, TallComponents.TallPDF5) |
NuGet (IronPdf) |
| Customer support | Existing customers only; new buyers routed to iText | Active support and community |
| Future investment | Maintenance only | Long-term road map |
TallComponents uses an XML/layout-oriented model rooted in an earlier era of .NET document generation, while IronPDF provides Chromium-powered HTML rendering aligned with how teams build front-end applications today.
Quick Start: TallComponents to IronPDF Migration
Step 1: Replace NuGet Packages
Remove the TallComponents packages your project references. The real package IDs on nuget.org are TallComponents.PDFKit5 (or TallComponents.PDFKit for 4.x) and TallComponents.TallPDF5 / TallPDF6:
# Remove TallComponents packages (whichever your project uses)
dotnet remove package TallComponents.PDFKit5
dotnet remove package TallComponents.TallPDF5
dotnet remove package TallComponents.PDFRasterizer4
# Remove TallComponents packages (whichever your project uses)
dotnet remove package TallComponents.PDFKit5
dotnet remove package TallComponents.TallPDF5
dotnet remove package TallComponents.PDFRasterizer4
Install IronPDF:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
For specialized frameworks, IronPDF offers dedicated extension packages:
Blazor Server:
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
MVC Framework:
PM > Install-Package IronPdf.Extensions.Mvc.Framework
PM > Install-Package IronPdf.Extensions.Mvc.Framework
Step 2: Update Namespaces
Replace TallComponents namespaces with the IronPDF namespace:
// 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;
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 IronPdf
Step 3: Initialize Your License
Add license initialization at application startup:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
TallComponents to IronPDF API Mapping Reference
Understanding how TallComponents concepts map to IronPDF accelerates the migration process:
| TallComponents | IronPDF | Notes |
|---|---|---|
Document (TallPDF.NET: layout) |
ChromePdfRenderer |
Create renderer for PDF generation |
Document (PDFKit.NET: manipulate) |
PdfDocument |
Load/edit existing PDFs |
Section |
Automatic | Sections derived from HTML structure |
TextParagraph |
HTML text elements | Use <p>, <h1>, <div>, etc. |
ImageParagraph |
<img> tag |
Standard HTML images |
TableParagraph |
HTML <table> |
Standard HTML tables |
XhtmlParagraph (XHTML 1.x + CSS 2.1) |
RenderHtmlAsPdf() (HTML5/CSS3 via Chromium) |
Modern HTML works |
Font |
CSS font-family |
Web fonts supported |
document.Write(...) |
pdf.SaveAs() / pdf.BinaryData |
File or byte[] output |
page.Overlay.Add(shape) |
pdf.ApplyStamp(stamper) |
Watermark / overlay |
outputDoc.Pages.Add(page.Clone()) |
PdfDocument.Merge(...) / pdf.AppendPdf(...) |
Merge multiple PDFs |
Document.Security = new PasswordSecurity { ... } |
pdf.SecuritySettings |
PDF security configuration |
PageLayout |
RenderingOptions |
Page settings and margins |
Code Migration Examples
Converting HTML to PDF
TallComponents handles HTML through TallPDF.NET's XhtmlParagraph, which parses XHTML 1.0/1.1 + CSS 2.1 only. Modern HTML5, CSS3, flexbox, grid, and JavaScript-driven content fall outside that grammar:
TallComponents Approach:
// 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.1 only.
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.1 only.
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
IronPDF Approach:
// 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
IronPDF's ChromePdfRenderer uses a genuine Chromium engine, providing full HTML5 and CSS3 support. This means your PDFs render exactly as they would appear in a modern browser. Learn more in the HTML to PDF tutorial.
Merging Multiple PDFs
PDF merging demonstrates the verbosity difference between TallComponents and IronPDF.
TallComponents Approach:
// 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
IronPDF Approach:
// 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
The TallComponents version requires manual page iteration and cloning. IronPDF reduces this to a single PdfDocument.Merge() call. For advanced merging scenarios, see the PDF merging documentation.
Adding Watermarks
Watermarking PDFs reveals another significant difference in developer experience.
TallComponents Approach:
// 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
IronPDF Approach:
// 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
IronPDF's TextStamper class provides intuitive alignment options and automatic page iteration. The stamping and watermarks guide covers additional customization options.
Digital Signatures
Document signing is critical for enterprise applications.
TallComponents Approach:
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
IronPDF Approach:
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")
IronPDF's signature API includes additional metadata properties for contact information, location, and signing reason—important for audit trails. Explore the digital signature documentation for complete implementation details.
Feature Comparison: TallComponents vs IronPDF
| Feature | TallComponents | IronPDF |
|---|---|---|
| Status | Closed to new licenses (Apryse acquired 2025-05-27) | Active |
| Support | Existing customers only | Full |
| Updates | Maintenance only | Regular feature releases |
| Content Creation | ||
| HTML to PDF | XHTML 1.0/1.1 + CSS 2.1 (XhtmlParagraph) |
Full HTML5/CSS3 via Chromium |
| URL to PDF | Yes for XHTML URLs (XhtmlParagraph.Path) |
Yes |
| CSS Support | CSS 2.1 | Full CSS3 |
| JavaScript | No | Full ES2024 |
| XML / Layout DOM Templates | Yes (TallPDF.NET) | Not needed (HTML) |
| PDF Operations | ||
| Merge PDFs | Yes (Pages.Add(page.Clone())) |
Yes (PdfDocument.Merge) |
| Split PDFs | Yes | Yes |
| Watermarks | page.Overlay.Add(TextShape) |
pdf.ApplyStamp(...) |
| Headers/Footers | Layout DOM | HTML/CSS |
| Security | ||
| Password Protection | Yes (PasswordSecurity) |
Yes |
| Digital Signatures | Yes (SignatureField.Sign) |
Yes |
| Encryption | RC4 / AES-128 / AES-256 | AES-128 / AES-256 |
| PDF/A | PDF/A-1, PDF/A-2, PDF/A-3 | Yes |
| Platform | ||
| Target Frameworks | PDFKit5: .NET Standard 2.0; PDFKit (4.x): .NET Framework 2.0 | .NET Framework 4.6.2+, .NET 6/7/8/9 |
| Development | ||
| Learning Curve | XML / layout DOM | HTML |
| Documentation | Frozen at acquisition; new docs route to Apryse / iText | Maintained |
| Community | Quiet (no new sales) | Active |
TallComponents Migration Checklist
Pre-Migration Tasks
Audit your codebase to identify all TallComponents usage:
grep -r "using TallComponents" --include="*.cs" .
grep -rE "XhtmlParagraph|TextParagraph|PasswordSecurity|page\.Overlay" --include="*.cs" .
grep -r "using TallComponents" --include="*.cs" .
grep -rE "XhtmlParagraph|TextParagraph|PasswordSecurity|page\.Overlay" --include="*.cs" .
Document existing XML/layout templates—these will be converted to HTML. Identify security settings currently in use, noting password configurations and digital signature implementations.
Code Update Tasks
- Remove TallComponents packages via NuGet
- Install IronPDF package
- Convert XHTML / layout DOM templates to HTML5
- Replace Section/Paragraph model with HTML elements
- Update table code to use standard HTML tables
- Convert headers/footers to HTML with
HtmlHeaderFooter - Update security settings to use
pdf.SecuritySettings - Add license initialization at startup
Headers and Footers Migration
TallPDF.NET uses a layout DOM (Section.Header / Section.Footer) for page headers. IronPDF provides HTML-based headers with dynamic placeholders:
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
}
Learn more about headers and footers in IronPDF.
Testing Phase
- Compare visual output between TallComponents and IronPDF versions
- Test all document templates
- Validate PDF merging functionality
- Test digital signatures
- Confirm security settings apply correctly
Recommended Migration Timeline
Since TallComponents is closed to new licenses and on maintenance-only support, plan the move at your own pace but do not stall:
Week 1: Audit codebase and identify all TallComponents usage
Week 2: Convert XHTML / layout templates to HTML5
Week 3: Update security, merging, and signing code
Week 4: Testing and production deployment
The longer a stack stays on TallComponents, the further it drifts from current .NET targets and current HTML.

