IRONSOFTWAREHOME
MIGRATION GUIDES

How to Migrate from DynamicPDF to IronPDF in C#

Curtis Chau
Curtis Chau
Updated: August 1, 2026

Why Migrate from DynamicPDF to IronPDF?

DynamicPDF's product fragmentation is a common driver for migration. Understanding the licensing model helps evaluate the true cost of your current implementation.

The Product Fragmentation Problem

DynamicPDF (ceTe Software) ships PDF functionality as separately licensed packages:

  1. DynamicPDF Core Suite (ceTe.DynamicPDF.CoreSuite.NET, v12.43.0): Bundles Generator, Merger, and ReportWriter
  2. DynamicPDF HTML Converter (ceTe.DynamicPDF.HtmlConverter.NET, v3.3.0): HTML-to-PDF as a separate add-on
  3. DynamicPDF Converter (ceTe.DynamicPDF.Converter.NET, v3.32.0): Office and 50+ file-format conversion
  4. DynamicPDF PrintManager (ceTe.DynamicPDF.Printing.NET): Programmatic printing
  5. DynamicPDF Rasterizer (ceTe.DynamicPDF.Rasterizer.NET): PDF-to-image
  6. DynamicPDF Viewer (ceTe.DynamicPDF.Viewer.NET): WinForms/WPF viewer control

Generator, Merger, and ReportWriter are folded into Core Suite, but HTML rendering, rasterization, printing, and viewing each still require a separate purchase. IronPDF bundles these capabilities into a single library and license.

Architecture Comparison

AspectDynamicPDFIronPDF
Product ModelFragmented (5+ products)All-in-one library
LicensingMultiple licenses requiredSingle license
HTML to PDFSeparate add-on purchaseBuilt-in, Chromium-based
CSS SupportLimited (requires add-on)Full CSS3 with Flexbox/Grid
API StyleCoordinate-based positioningHTML/CSS + manipulation API
Learning CurveSteep (multiple APIs)Gentle (web technologies)
Modern .NET.NET Standard 2.0 / .NET 6 / .NET 8 / .NET Framework 4.6.2.NET 6/7/8/9+ native

Key Migration Benefits

  1. Single Package: One NuGet package replaces 3-5 DynamicPDF packages
  2. Modern Rendering: Chromium engine versus legacy rendering
  3. Web Technologies: Use HTML/CSS instead of coordinate-based positioning
  4. Simpler API: Less code, more readable, easier maintenance
  5. No Add-On Purchases: HTML, merging, security all included

Pre-Migration Preparation

Prerequisites

Ensure your environment meets these requirements:

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

Audit DynamicPDF Usage

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

# Find all DynamicPDF references
grep -r "ceTe.DynamicPDF\|DynamicPDF" --include="*.cs" --include="*.csproj" .

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

Common packages to look for:

  • ceTe.DynamicPDF.CoreSuite.NET (Generator + Merger + ReportWriter)
  • ceTe.DynamicPDF.HtmlConverter.NET (HTML-to-PDF add-on)
  • ceTe.DynamicPDF.Converter.NET (Office / multi-format to PDF)
  • ceTe.DynamicPDF.Rasterizer.NET, ceTe.DynamicPDF.Printing.NET, ceTe.DynamicPDF.Viewer.NET

Understanding the Paradigm Shift

The most significant change when migrating from DynamicPDF to IronPDF is the fundamental approach to document creation. DynamicPDF uses coordinate-based positioning where you place elements at specific X,Y coordinates on a page. IronPDF uses HTML/CSS rendering where you design with web technologies.

This paradigm shift means converting Label, TextArea, and Table2 elements to their HTML equivalents - a change that typically results in more readable, maintainable code.

Step-by-Step Migration Process

Step 1: Update NuGet Packages

Remove the DynamicPDF packages you actually have installed and add IronPDF:

# Remove DynamicPDF packages (only those you actually have)
dotnet remove package ceTe.DynamicPDF.CoreSuite.NET
dotnet remove package ceTe.DynamicPDF.HtmlConverter.NET
dotnet remove package ceTe.DynamicPDF.Converter.NET
dotnet remove package ceTe.DynamicPDF.Rasterizer.NET
dotnet remove package ceTe.DynamicPDF.Printing.NET

# Install IronPDF
dotnet add package IronPdf
SHELL

Step 2: Update Namespace References

Replace DynamicPDF namespaces with IronPDF:

// Remove these
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;
using ceTe.DynamicPDF.Conversion;

// Add this
using IronPdf;

Step 3: Configure License

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

Complete API Migration Reference

Core Class Mapping

DynamicPDF ClassIronPDF Equivalent
DocumentChromePdfRenderer
DocumentPdfDocument
PageHTML <div> with page-break
MergeDocumentPdfDocument.Merge()
HtmlConverterChromePdfRenderer

Page Elements to HTML Mapping

DynamicPDF PageElementIronPDF/HTML Equivalent
Label<p>, <span>, <div>
TextArea<div>, <p> with CSS
Image<img> tag
Table2HTML <table>
PageNumberingLabel{page} / {total-pages} placeholders

Key API Mappings

DynamicPDFIronPDF
Document + PageChromePdfRenderer
Label, TextAreaHTML <p>, <div>
Table2HTML <table>
MergeDocumentPdfDocument.Merge()
HtmlConverterChromePdfRenderer
document.Draw()pdf.SaveAs() / pdf.BinaryData
PageNumberingLabel %%CP%%{page} placeholder

Code Migration Examples

HTML to PDF Conversion

The HTML to PDF conversion demonstrates DynamicPDF's requirement for a separate HtmlConverter add-on versus IronPDF's built-in Chromium rendering.

DynamicPDF Implementation:

// NuGet: Install-Package ceTe.DynamicPDF.Converter.NET
// HTML-to-PDF is a separate add-on; CoreSuite alone does not include it.
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Conversion;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        HtmlConverter converter = new HtmlConverter(html);
        converter.Convert("output.pdf");
    }
}

IronPDF Implementation:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}

IronPDF's ChromePdfRenderer provides Chromium-based rendering with full CSS3 support, with no separate add-on purchase. For more options, see the HTML to PDF documentation.

Merging Multiple PDFs

PDF merging demonstrates the difference between DynamicPDF's MergeDocument class (requiring the Merger product license) and IronPDF's built-in static Merge method.

DynamicPDF Implementation:

// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Merger;

class Program
{
    static void Main()
    {
        MergeDocument document = new MergeDocument("document1.pdf");
        document.Append("document2.pdf");
        document.Draw("merged.pdf");
    }
}

IronPDF Implementation:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}

IronPDF's static Merge method accepts multiple PdfDocument objects directly. For more options, see the PDF merging documentation.

Adding Text to PDFs

Text placement demonstrates the paradigm shift from DynamicPDF's coordinate-based Label elements to IronPDF's HTML-based TextStamper.

DynamicPDF Implementation:

// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;

class Program
{
    static void Main()
    {
        Document document = new Document();
        Page page = new Page(PageSize.Letter);
        Label label = new Label("Hello from DynamicPDF!", 0, 0, 504, 100);
        page.Elements.Add(label);
        document.Pages.Add(page);
        document.Draw("output.pdf");
    }
}

IronPDF Implementation:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalAlignment = VerticalAlignment.Top
        };
        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}

IronPDF's TextStamper provides alignment-based positioning rather than coordinate-based placement, making layouts more adaptable across different page sizes. For more options, see the watermarks and stamping documentation.

Complete Document Generation Example

This comprehensive example shows converting a DynamicPDF document with multiple elements to IronPDF's HTML approach.

DynamicPDF Implementation:

using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;

// Generation (requires Generator license)
Document document = new Document();
Page page = new Page(PageSize.A4);
Label title = new Label("Invoice Report", 0, 0, 595, 30, Font.HelveticaBold, 18);
title.Align = TextAlign.Center;
page.Elements.Add(title);

Table2 table = new Table2(40, 60, 515, 500);
// ... complex table setup with columns, rows, cells...
page.Elements.Add(table);
document.Pages.Add(page);
document.Draw("invoice.pdf");

// Merging (requires Merger license)
MergeDocument mergeDoc = new MergeDocument("cover.pdf");
mergeDoc.Append("invoice.pdf");
mergeDoc.Draw("final.pdf");

IronPDF Implementation:

using IronPdf;

var renderer = new ChromePdfRenderer();

// All features in one library
var html = @"
<html>
<head>
    <style>
        body { font-family: Helvetica, sans-serif; padding: 40px; }
        h1 { text-align: center; font-size: 18pt; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ccc; padding: 8px; }
    </style>
</head>
<body>
    <h1>Invoice Report</h1>
    <table>
        <tr><th>Product</th><th>Qty</th><th>Price</th></tr>
        <tr><td>Widget</td><td>10</td><td>$99.99</td></tr>
    </table>
</body>
</html>";

var invoice = renderer.RenderHtmlAsPdf(html);

// Merging included - no separate license
var cover = PdfDocument.FromFile("cover.pdf");
var final = PdfDocument.Merge(cover, invoice);
final.SaveAs("final.pdf");

Critical Migration Notes

Coordinate-Based to HTML/CSS Positioning

The fundamental paradigm shift requires converting X,Y coordinate positioning to CSS-based layouts:

// DynamicPDF - coordinate-based
var label = new Label("Hello World", 100, 200, 300, 50);

// IronPDF - CSS positioning (if absolute positioning needed)
var html = "<div style='position:absolute; left:100px; top:200px; width:300px;'>Hello World</div>";

// IronPDF - preferred approach (flow-based)
var html = "<div style='margin-left:100px; margin-top:200px;'>Hello World</div>";
C#

Page Numbering Syntax

DynamicPDF and IronPDF use different placeholder syntax for page numbers:

// DynamicPDF placeholders
"Page %%CP%% of %%TP%%"

// IronPDF placeholders
"Page {page} of {total-pages}"
C#

Headers and Footers

Convert DynamicPDF Template elements to IronPDF HtmlHeaderFooter:

// IronPDF header/footer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};
C#

For more header/footer options, see the headers and footers documentation.

Security Settings

// IronPDF security
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.UserPassword = "userPassword";
C#

For comprehensive security options, see the encryption documentation.

Post-Migration Checklist

After completing the code migration, verify the following:

  • Visual comparison of generated PDFs
  • Verify text positioning and layout
  • Test table rendering and overflow
  • Verify headers/footers on all pages
  • Test form filling functionality
  • Verify security/encryption
  • Performance benchmarking
  • Remove unused DynamicPDF license files
  • Update documentation

Additional Resources


Migrating from DynamicPDF to IronPDF consolidates multiple product licenses into a single library and replaces coordinate-based positioning with HTML/CSS rendering on Chromium. Teams already comfortable with web technologies usually find the resulting code easier to maintain.

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