IRONSOFTWAREHOME
MIGRATION GUIDES

How to Migrate from TallComponents to IronPDF in C#

Curtis Chau
Curtis Chau
Updated: August 1, 2026

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:

FeatureTallComponentsIronPDF
Current sale statusClosed to new licenses (Apryse acquired 2025-05-27)Actively sold
HTML-to-PDF supportXHTML 1.0/1.1 + CSS 2.1 via XhtmlParagraph (TallPDF.NET)Yes (HTML5/CSS3 with Chromium)
JavaScript in HTMLNoFull ES2024
InstallationNuGet (TallComponents.PDFKit5, TallComponents.TallPDF5)NuGet (IronPdf)
Customer supportExisting customers only; new buyers routed to iTextActive support and community
Future investmentMaintenance onlyLong-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
SHELL

Install IronPDF:

dotnet add package IronPdf

For specialized frameworks, IronPDF offers dedicated extension packages:

Blazor Server:

PM > Install-Package IronPdf.Extensions.Blazor

MAUI:

PM > Install-Package IronPdf.Extensions.Maui

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;

Step 3: Initialize Your License

Add license initialization at application startup:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

TallComponents to IronPDF API Mapping Reference

Understanding how TallComponents concepts map to IronPDF accelerates the migration process:

TallComponentsIronPDFNotes
Document (TallPDF.NET: layout)ChromePdfRendererCreate renderer for PDF generation
Document (PDFKit.NET: manipulate)PdfDocumentLoad/edit existing PDFs
SectionAutomaticSections derived from HTML structure
TextParagraphHTML text elementsUse <p>, <h1>, <div>, etc.
ImageParagraph<img> tagStandard HTML images
TableParagraphHTML <table>Standard HTML tables
XhtmlParagraph (XHTML 1.x + CSS 2.1)RenderHtmlAsPdf() (HTML5/CSS3 via Chromium)Modern HTML works
FontCSS font-familyWeb fonts supported
document.Write(...)pdf.SaveAs() / pdf.BinaryDataFile 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.SecuritySettingsPDF security configuration
PageLayoutRenderingOptionsPage 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);
        }
    }
}

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");
    }
}

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);
        }
    }
}

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");
    }
}

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);
            }
        }
    }
}

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");
    }
}

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);
    }
}

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");

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

FeatureTallComponentsIronPDF
StatusClosed to new licenses (Apryse acquired 2025-05-27)Active
SupportExisting customers onlyFull
UpdatesMaintenance onlyRegular feature releases
Content Creation
HTML to PDFXHTML 1.0/1.1 + CSS 2.1 (XhtmlParagraph)Full HTML5/CSS3 via Chromium
URL to PDFYes for XHTML URLs (XhtmlParagraph.Path)Yes
CSS SupportCSS 2.1Full CSS3
JavaScriptNoFull ES2024
XML / Layout DOM TemplatesYes (TallPDF.NET)Not needed (HTML)
PDF Operations
Merge PDFsYes (Pages.Add(page.Clone()))Yes (PdfDocument.Merge)
Split PDFsYesYes
Watermarkspage.Overlay.Add(TextShape)pdf.ApplyStamp(...)
Headers/FootersLayout DOMHTML/CSS
Security
Password ProtectionYes (PasswordSecurity)Yes
Digital SignaturesYes (SignatureField.Sign)Yes
EncryptionRC4 / AES-128 / AES-256AES-128 / AES-256
PDF/APDF/A-1, PDF/A-2, PDF/A-3Yes
Platform
Target FrameworksPDFKit5: .NET Standard 2.0; PDFKit (4.x): .NET Framework 2.0.NET Framework 4.6.2+, .NET 6/7/8/9
Development
Learning CurveXML / layout DOMHTML
DocumentationFrozen at acquisition; new docs route to Apryse / iTextMaintained
CommunityQuiet (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" .
SHELL

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

  1. Remove TallComponents packages via NuGet
  2. Install IronPDF package
  3. Convert XHTML / layout DOM templates to HTML5
  4. Replace Section/Paragraph model with HTML elements
  5. Update table code to use standard HTML tables
  6. Convert headers/footers to HTML with HtmlHeaderFooter
  7. Update security settings to use pdf.SecuritySettings
  8. 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
};

Learn more about headers and footers in IronPDF.

Testing Phase

  1. Compare visual output between TallComponents and IronPDF versions
  2. Test all document templates
  3. Validate PDF merging functionality
  4. Test digital signatures
  5. Confirm security settings apply correctly

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.

Please note: Apryse, PDFKit, Tall Components, and iText are registered trademarks of their respective owners. This site is not affiliated with, endorsed by, or sponsored by Apryse, PDFKit, PDFTron, TallComponents, or iText Group. All product names, logos, and brands are property of their respective owners. Comparisons are for informational purposes only and reflect publicly available information at the time of writing.
Curtis Chau
Technical Writer

Curtis Chau holds a Bachelor’s degree in Computer Science (Carleton University) and specializes in front-end development with expertise in Node.js, TypeScript, JavaScript, and React. Passionate about crafting intuitive and aesthetically pleasing user interfaces, Curtis enjoys working with modern frameworks and creating well-structured, visually appealing manuals.

...
Read More

Related Articles

Key in blue circle

Get your free 30-day Trial Key instantly.

Your trial license will be sent to your email address

No limitations. 100% unlocked. No credit card.

bullet_checkedNo credit card or account creation requiredNo limitations. 100% unlocked. No credit card.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Book your free Live Demo
Booking Badge

Trusted by Millions of Engineers Worldwide

Iron Software's customer logos
Get Your No-Obligation Consult
Complete the form below or email sales@ironsoftware.com
Your details will always be kept confidential.
Trusted by Millions of Engineers Worldwide
Iron Software's customer logos
Get your free 30-day Trial Key instantly.
No credit card or account creation required