IRONSOFTWAREHOME
MIGRATION GUIDES

How to Migrate from ExpertPdf to IronPDF in C#

Curtis Chau
Curtis Chau
Updated: May 18, 2026

ExpertPdf is a commercial HTML-to-PDF converter for .NET published by Outside Software Inc. The latest release on nuget.org is v20.1.0 (April 2025), so the suite is still actively shipping - the friction is in the product shape, not abandonment. ExpertPdf relies on a Trident (IE) engine plus a "WebKit2" engine added in v12.2; modern Chromium is not the default. Public ComponentSource listings have historically shown the HtmlToPdf Converter at roughly $550-$1,200 per tier (verify directly with the vendor). The toolkit is also split across separate NuGet packages - HtmlToPdf, MergePdf, PdfSecurity, SplitPdf, PdfToImage, PdfCreator - each typically licensed separately. This guide provides a step-by-step migration path from ExpertPdf to IronPDF, a .NET PDF library with the latest Chromium rendering, frequent releases, and an all-in-one package.

Why Migrate from ExpertPdf to IronPDF?

ExpertPdf presents several challenges that drive development teams to evaluate modern alternatives. Understanding these issues is essential for planning your migration strategy.

The ExpertPdf Problems

  1. Sparse documentation, slow cadence: Reference docs exist on html-to-pdf.net, but tutorials, feature articles, and changelog entries are infrequent. Release notes for v20.1 (April 2025) list "bug fixes and performance improvements" - no headline features.
  2. Older rendering pipelines: ExpertPdf ships a Trident (IE) engine plus a "WebKit2" engine added in v12.2; modern Chromium is not the default. CSS3 features such as Flexbox, Grid, and CSS variables render best on the WebKit2 engine - verify against your target HTML before migrating large estates.
  3. Premium pricing for an aging stack: Public ComponentSource listings have historically shown the HtmlToPdf Converter at roughly $550-$1,200 per tier (verify directly with the vendor - the order page on expertpdf.net was inaccessible at the time of writing).
  4. Fragmented product suite: ExpertPdf sells separate packages - ExpertPdf.HtmlToPdf.NetCore / ExpertPdfHtmlToPdf, ExpertPdf.MergePdf, ExpertPdf.PdfSecurity, ExpertPdf.SplitPdf, ExpertPdf.PdfToImage, ExpertPdf.PdfCreator - each typically licensed separately.
  5. No native modern .NET targets: The .NetCore packages target .NET Standard 2.0 / .NET Framework 4.6.1, so they run on .NET 5/6/7/8/9 - but you do not get native multi-target builds, trimming-friendly assemblies, or async-first APIs.

Architecture Comparison

AspectExpertPdfIronPDF
VendorOutside Software Inc.Iron Software
Latest release (nuget.org)v20.1.0 (Apr 2025)Continuously updated
DocumentationReference docs only, sparse tutorialsContinuously updated
Rendering EngineTrident (IE) + "WebKit2" (added v12.2)Latest Chromium
CSS SupportCSS3 best on WebKit2; partial on legacyFull CSS3 (Flexbox, Grid)
Price~$550-$1,200 (verify with vendor)See ironpdf.com/pricing
Product ModelFragmented (6+ NuGet packages)All-in-one library
Modern .NET.NET Standard 2.0 (runs on .NET 5-9).NET 6/7/8/9+ multi-targeted
Async SupportLimitedFull async/await

Key Migration Benefits

  1. Modern Rendering: Latest Chromium engine for pixel-perfect output
  2. All-in-One Package: PDF generation, merging, security, extraction in one NuGet
  3. Active Development: Monthly updates with new features and security patches
  4. Better Documentation: Comprehensive tutorials and examples
  5. True Cross-Platform: Windows, Linux, macOS, Docker support

Pre-Migration Preparation

Prerequisites

Ensure your environment meets these requirements:

  • .NET Framework 4.6.2+ or .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ or VS Code with C# extension
  • NuGet Package Manager access
  • IronPDF license key (free trial available at ironpdf.com)

Audit ExpertPdf Usage

Run these commands in your solution directory to identify all ExpertPdf references:

# Find all ExpertPdf references
grep -r "ExpertPdf\|PdfConverter\|PDFMerge\|PdfSecurityManager" --include="*.cs" .

# Check NuGet packages
dotnet list package | grep -i "ExpertPdf"
SHELL

Common ExpertPdf packages to look for (verify exact name on nuget.org - the suite uses inconsistent casing):

  • ExpertPdfHtmlToPdf (.NET Framework) / ExpertPdf.HtmlToPdf.NetCore (.NET Core / 5-9) - HTML to PDF
  • ExpertPdf.MergePdf - PDF merging
  • ExpertPdf.PdfSecurity - encryption and passwords
  • ExpertPdf.SplitPdf - PDF splitting
  • ExpertPdf.PdfToImage - PDF to image conversion
  • ExpertPdf.PdfCreator - full PDF SDK (drawing, forms, signatures)

Understanding the Core Pattern Change

ExpertPdf uses PdfConverter with direct byte-array return methods. IronPDF uses ChromePdfRenderer returning PdfDocument objects that provide additional manipulation capabilities before saving.

Step-by-Step Migration Process

Step 1: Update NuGet Packages

Remove all ExpertPdf packages and install IronPDF:

# Remove all ExpertPdf packages (use whichever variants you have installed)
dotnet remove package ExpertPdfHtmlToPdf
dotnet remove package ExpertPdf.HtmlToPdf.NetCore
dotnet remove package ExpertPdf.MergePdf
dotnet remove package ExpertPdf.PdfSecurity
dotnet remove package ExpertPdf.SplitPdf
dotnet remove package ExpertPdf.PdfToImage
dotnet remove package ExpertPdf.PdfCreator

# Install IronPDF (includes all features)
dotnet add package IronPdf
SHELL

Step 2: Update Namespace References

Replace ExpertPdf namespaces with IronPDF:

// Remove these
using ExpertPdf.HtmlToPdf;

// Add this
using IronPdf;

Step 3: Configure License

ExpertPdf uses per-converter licensing. IronPDF uses a single global license:

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Complete API Migration Reference

Core Class Mapping

ExpertPdf ClassIronPDF Equivalent
PdfConverterChromePdfRenderer
PdfDocumentOptionsChromePdfRenderOptions
PdfHeaderOptionsTextHeaderFooter or HtmlHeaderFooter
PdfFooterOptionsTextHeaderFooter or HtmlHeaderFooter
PDFMergePdfDocument.Merge()

Method Mapping

ExpertPdf MethodIronPDF Method
pdfConverter.GetPdfBytesFromHtmlString(html)renderer.RenderHtmlAsPdf(html).BinaryData
pdfConverter.GetPdfBytesFromUrl(url)renderer.RenderUrlAsPdf(url).BinaryData
pdfConverter.GetPdfBytesFromHtmlFile(path)renderer.RenderHtmlFileAsPdf(path).BinaryData
pdfConverter.SavePdfFromUrlToFile(url, path)renderer.RenderUrlAsPdf(url).SaveAs(path)

Options Mapping

ExpertPdf OptionIronPDF RenderingOptions
PdfDocumentOptions.PdfPageSize = PdfPageSize.A4PaperSize = PdfPaperSize.A4
PdfDocumentOptions.PdfPageOrientation = PortraitPaperOrientation = PdfPaperOrientation.Portrait
PdfDocumentOptions.MarginTopMarginTop
PdfHeaderOptions.HeaderTextTextHeader.CenterText
PdfFooterOptions.FooterTextTextFooter.RightText

Page Numbering Token Conversion

ExpertPdf and IronPDF use different placeholder syntax for page numbers:

ExpertPdfIronPDF
&p;{page}
&P;{total-pages}

Code Migration Examples

HTML to PDF Conversion

The fundamental HTML to PDF conversion demonstrates the shift from ExpertPdf's byte-array pattern to IronPDF's document-object approach.

ExpertPdf Implementation:

// NuGet: Install-Package ExpertPdf.HtmlToPdf
using ExpertPdf.HtmlToPdf;
using System;

class Program
{
    static void Main()
    {
        // Create the PDF converter
        PdfConverter pdfConverter = new PdfConverter();
        
        // Convert HTML string to PDF
        byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlString("<h1>Hello World</h1><p>This is a PDF document.</p>");
        
        // Save to file
        System.IO.File.WriteAllBytes("output.pdf", pdfBytes);
        
        Console.WriteLine("PDF created successfully!");
    }
}

IronPDF Implementation:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Create a PDF from HTML string
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>");
        
        // Save to file
        pdf.SaveAs("output.pdf");
        
        Console.WriteLine("PDF created successfully!");
    }
}

IronPDF's approach returns a PdfDocument object, enabling additional manipulation (merging, watermarking, security) before saving. For more options, see the HTML to PDF documentation.

URL to PDF with Page Settings

ExpertPdf Implementation:

// NuGet: Install-Package ExpertPdf.HtmlToPdf
using ExpertPdf.HtmlToPdf;
using System;

class Program
{
    static void Main()
    {
        // Create the PDF converter
        PdfConverter pdfConverter = new PdfConverter();
        
        // Set page size and orientation
        pdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
        pdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait;
        
        // Convert URL to PDF
        byte[] pdfBytes = pdfConverter.GetPdfBytesFromUrl("https://www.example.com");
        
        // Save to file
        System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes);
        
        Console.WriteLine("PDF from URL created successfully!");
    }
}

IronPDF Implementation:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Create a PDF renderer
        var renderer = new ChromePdfRenderer();
        
        // Set page size and orientation
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;
        
        // Convert URL to PDF
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        
        // Save to file
        pdf.SaveAs("webpage.pdf");
        
        Console.WriteLine("PDF from URL created successfully!");
    }
}

IronPDF's RenderingOptions provides direct property access for page configuration. For more options, see the URL to PDF documentation.

Headers and Footers with Page Numbers

This example demonstrates the critical difference in header/footer configuration - ExpertPdf uses separate PdfHeaderOptions and PdfFooterOptions classes with &p;/&P; tokens, while IronPDF uses TextHeaderFooter with {page}/{total-pages} placeholders.

ExpertPdf Implementation:

// NuGet: Install-Package ExpertPdf.HtmlToPdf
using ExpertPdf.HtmlToPdf;
using System;

class Program
{
    static void Main()
    {
        // Create the PDF converter
        PdfConverter pdfConverter = new PdfConverter();
        
        // Enable header
        pdfConverter.PdfHeaderOptions.ShowHeader = true;
        pdfConverter.PdfHeaderOptions.HeaderText = "Document Header";
        pdfConverter.PdfHeaderOptions.HeaderTextAlignment = HorizontalTextAlign.Center;
        
        // Enable footer with page numbers
        pdfConverter.PdfFooterOptions.ShowFooter = true;
        pdfConverter.PdfFooterOptions.FooterText = "Page &p; of &P;";
        pdfConverter.PdfFooterOptions.FooterTextAlignment = HorizontalTextAlign.Right;
        
        // Convert HTML file to PDF
        byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlFile("input.html");
        
        // Save to file
        System.IO.File.WriteAllBytes("output-with-header-footer.pdf", pdfBytes);
        
        Console.WriteLine("PDF with headers and footers created successfully!");
    }
}

IronPDF Implementation:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Create a PDF renderer
        var renderer = new ChromePdfRenderer();
        
        // Configure header
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Document Header",
            DrawDividerLine = true
        };
        
        // Configure footer with page numbers
        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            RightText = "Page {page} of {total-pages}",
            DrawDividerLine = true
        };
        
        // Convert HTML file to PDF
        var pdf = renderer.RenderHtmlFileAsPdf("input.html");
        
        // Save to file
        pdf.SaveAs("output-with-header-footer.pdf");
        
        Console.WriteLine("PDF with headers and footers created successfully!");
    }
}

IronPDF's TextHeaderFooter provides LeftText, CenterText, and RightText properties with optional divider lines. For HTML-based headers, use HtmlHeaderFooter. For more options, see the headers and footers documentation.

Critical Migration Notes

License Key Location

ExpertPdf uses per-converter licensing. IronPDF uses a single global license set once at startup:

// ExpertPdf - per converter
pdfConverter.LicenseKey = "EXPERTPDF-LICENSE";

// IronPDF - global, set once
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Page Numbering Token Conversion

Replace ExpertPdf tokens with IronPDF placeholders:

// ExpertPdf
"Page &p; of &P;"

// IronPDF
"Page {page} of {total-pages}"

Fragmented Packages Consolidated

ExpertPdf's separate packages (PDFMerge, PDFSecurity, PDFSplit, PdfToImage) are all included in IronPDF's single package:

// ExpertPdf - requires separate ExpertPdf.MergePdf package
PDFMerge merger = new PDFMerge();
merger.AppendPDFFile("file1.pdf");
merger.AppendPDFFile("file2.pdf");
merger.SaveMergedPDFToFile("merged.pdf");

// IronPDF - included in main package
var pdf1 = PdfDocument.FromFile("file1.pdf");
var pdf2 = PdfDocument.FromFile("file2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");

For more merging options, see the PDF merging documentation.

Custom Page Sizes

ExpertPdf uses points. IronPDF uses millimeters. Convert: points / 72 * 25.4 = mm

Post-Migration Checklist

After completing the code migration, verify the following:

  • Visual comparison of generated PDFs
  • Verify headers/footers and page numbers
  • Test security/encryption settings
  • Validate merging operations
  • Check custom page sizes
  • Performance benchmarking
  • Cross-platform testing
  • Remove ExpertPdf license files
  • Update documentation

Additional Resources


Migrating from ExpertPdf to IronPDF replaces sparse documentation, legacy rendering pipelines, and fragmented product licensing with an actively maintained library on the latest Chromium engine - keeping your PDF generation aligned with current web standards and modern .NET targets.

Please note: ExpertPDF is a registered trademark of its respective owner (Outside Software Inc.). This site is not affiliated with, endorsed by, or sponsored by Outside Software Inc. 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