IRONSOFTWAREHOME
MIGRATION GUIDES

How to Migrate from PDF Duo to IronPDF in C#

Curtis Chau
Curtis Chau
Updated: August 1, 2026

Migrating from PDF Duo .NET to IronPDF moves your .NET PDF workflow from a niche, sparsely documented library with no recent releases to a stable, well-documented, and actively maintained solution. This guide provides a step-by-step migration path that addresses the risks of relying on an inactive component while gaining access to features PDF Duo's documented API does not cover.

Why Migrate from PDF Duo to IronPDF

The PDF Duo Risk Problem

PDF Duo .NET (DuoDimension Software) is a niche HTML-to-PDF component for .NET. While it may have appealed to teams seeking a self-contained DLL, several traits make it a poor fit for current production applications:

  1. Vendor and Provenance: Published by DuoDimension Software (duodimension.com), a small ISV with no public roadmap and no GitHub repository.
  2. Sparse Documentation: One vendor product page, a handful of sample snippets, and a 2010 press release. No API reference site and no meaningful Stack Overflow presence.
  3. Effectively Abandoned: Last public release is v2.4, dated December 10, 2010 - roughly 15 years without a new version.
  4. Narrow Documented Surface: The public API is essentially DuoDimension.HtmlToPdf with OpenHTML(...) and SavePDF(...). There is no documented native API for watermarking, encryption, signing, form filling, text extraction, or PDF merging.
  5. Rendering Engine Not Disclosed: Vendor materials describe a self-contained component with no Office or Acrobat dependency, but do not publish what HTML/CSS engine is used. CSS3, modern JavaScript, web fonts, and flex/grid layout are not claimed.
  6. Pre-modern .NET Targeting: Documented support is .NET Framework 1.1 through 3.5 on Windows XP / Vista / 7 / 2000 / 2003. No documented support for .NET Framework 4.x, .NET Core, .NET 5+, Linux, or Docker.

PDF Duo vs IronPDF Comparison

AspectPDF Duo .NETIronPDF
Last releasev2.4 (December 2010)Active, regular releases
DistributionDLL download from duodimension.com (no NuGet)NuGet IronPdf
Runtime support.NET Framework 1.1 - 3.5, Windows only.NET FX 4.6.2+, .NET 6/7/8/9/10, Linux, macOS, Docker
DocumentationOne vendor product pageComprehensive docs + API reference
SupportNone visibleProfessional support team
CommunityNegligible41M+ NuGet downloads (Iron Software stack)
RenderingEngine not disclosedModern Chromium
FeaturesHTML-to-PDF onlyHTML-to-PDF, merge, security, signatures, OCR, forms, watermarks
LicensingPer vendor pricing pageCommercial, perpetual or subscription

For teams on modern .NET, IronPDF provides a stable foundation with active development and comprehensive documentation in place of a component whose last published release was v2.4 in December 2010.


Before You Start

Prerequisites

  1. .NET Environment: .NET Framework 4.6.2+ or .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet Access: Ability to install NuGet packages
  3. IronPDF License: Obtain your license key from ironpdf.com

Package / Reference Changes

PDF Duo .NET is not distributed via NuGet. Removing it is a manual step:

# In Visual Studio: References -> remove PDFDuo.dll (and any associated
# PDF Duo files) and delete the vendored binary from your /lib folder.

# Install IronPDF
dotnet add package IronPdf
SHELL

License Configuration

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

Identify PDF Duo Usage

# Find all PDF Duo references
grep -r "DuoDimension\|HtmlToPdf\b\|OpenHTML\|SavePDF" --include="*.cs" .
SHELL

API Reference

The vendor's documented root namespace is DuoDimension. The public surface is essentially the HtmlToPdf class with OpenHTML(...) and SavePDF(...). Sub-namespaces shown below for IronPDF reflect IronPDF's structure; PDF Duo .NET does not document sub-namespaces.

Namespace Changes

PDF Duo .NETIronPDF
using DuoDimension;using IronPdf;
(no documented sub-namespaces)using IronPdf.Rendering;

HTML to PDF Conversion Mappings

PDF Duo .NETIronPDF
new DuoDimension.HtmlToPdf()new ChromePdfRenderer()
conv.OpenHTML(htmlFile); conv.SavePDF(path);renderer.RenderHtmlFileAsPdf(htmlFile).SaveAs(path)
conv.OpenHTML(url); conv.SavePDF(path);renderer.RenderUrlAsPdf(url).SaveAs(path)
(write string to temp .html, then OpenHTML)renderer.RenderHtmlAsPdf(html).SaveAs(path)

Page Configuration Mappings

DuoDimension.HtmlToPdf does not document a settings object for paper size, orientation, or margins. The IronPDF column below shows the explicit RenderingOptions equivalents.

PDF Duo .NETIronPDF
(no documented page-size option)RenderingOptions.PaperSize = PdfPaperSize.A4
(no documented page-size option)RenderingOptions.PaperSize = PdfPaperSize.Letter
(no documented orientation option)RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
(no documented margins object)Individual margin properties

Margins Mappings

PDF Duo .NETIronPDF
(no documented margins object)Individual properties
(no equivalent)RenderingOptions.MarginTop
(no equivalent)RenderingOptions.MarginRight
(no equivalent)RenderingOptions.MarginBottom
(no equivalent)RenderingOptions.MarginLeft

Document Operations Mappings

PDF Duo .NET is an HTML-to-PDF converter only. The vendor product page does not document load, byte, or merge APIs on DuoDimension.HtmlToPdf. The rows below show what teams typically reached for in adjacent libraries when using PDF Duo, and the IronPDF call that consolidates that work.

NeedPDF Duo .NETIronPDF
Load existing PDFnot native - pair with iTextSharp 4.x or similarPdfDocument.FromFile(path)
Save PDFconv.SavePDF(path)pdf.SaveAs(path)
Get PDF bytesnot nativepdf.BinaryData
Merge PDFsnot native - pair with iTextSharp 4.x or similarPdfDocument.Merge(pdf1, pdf2)

New Features Not Available in PDF Duo's Documented API

FeatureIronPDF
Headers/FootersRenderingOptions.HtmlHeader, HtmlFooter
Page numbers{page}, {total-pages} placeholders
Watermarkspdf.ApplyWatermark(html)
Password protectionpdf.SecuritySettings
Form fillingpdf.Form.Fields
Digital signaturespdf.SignWithFile()
Text extractionpdf.ExtractAllText()
PDF to Imagepdf.RasterizeToImageFiles()

Code Migration Examples

Example 1: HTML to PDF Conversion

Before (PDF Duo):

// PDF Duo .NET is not on NuGet — reference PDFDuo.dll from the vendor download.
using DuoDimension;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        // OpenHTML accepts a file path, URL, or stream; there is no documented
        // "convert HTML string" call, so write the markup to a temp file first.
        var tempHtml = Path.GetTempFileName() + ".html";
        File.WriteAllText(tempHtml, "<h1>Hello World</h1><p>This is a PDF document.</p>");

        var conv = new HtmlToPdf();
        conv.OpenHTML(tempHtml);
        conv.SavePDF("output.pdf");
        Console.WriteLine("PDF created successfully!");
    }
}

After (IronPDF):

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

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

The fundamental difference here is the API pattern. PDF Duo's HtmlToPdf.OpenHTML(...) accepts a file path, URL, or stream - it does not document a "render this HTML string" call, so teams write the markup to a temp file first and then call SavePDF(path) to write to disk. IronPDF's ChromePdfRenderer.RenderHtmlAsPdf() renders the string directly and returns a PdfDocument object, which you then save with SaveAs().

This object-oriented approach provides additional flexibility: you can manipulate the PDF (add watermarks, merge documents, add security, extract text) before saving - none of which are part of PDF Duo .NET's documented API. See the HTML to PDF documentation for additional rendering options.

Example 2: URL to PDF Conversion

Before (PDF Duo):

// PDF Duo .NET is not on NuGet — reference PDFDuo.dll from the vendor download.
using DuoDimension;
using System;

class Program
{
    static void Main()
    {
        var conv = new HtmlToPdf();
        conv.OpenHTML("https://www.example.com");
        conv.SavePDF("webpage.pdf");
        Console.WriteLine("Webpage converted to PDF!");
    }
}

After (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("Webpage converted to PDF!");
    }
}

PDF Duo uses the same DuoDimension.HtmlToPdf class for URL conversion by passing the URL to OpenHTML(...) followed by SavePDF(path). IronPDF uses ChromePdfRenderer with the dedicated RenderUrlAsPdf(url) method, returning a PdfDocument object.

A key advantage is that IronPDF's Chromium-based rendering engine provides modern CSS3 and JavaScript support, whereas PDF Duo's vendor materials do not disclose which HTML/CSS engine is used. Learn more about URL to PDF conversion.

Example 3: PDF Merging

Before (PDF Duo):

PDF Duo .NET does not provide a native PDF-merge API. The documented surface is HTML-to-PDF only, so teams that needed to merge typically rendered each PDF with PDF Duo and then concatenated them with a separate library (commonly iTextSharp 4.x in 2010-era projects):

// PDF Duo .NET is not on NuGet — reference PDFDuo.dll from the vendor download.
using DuoDimension;
using System;

class Program
{
    static void Main()
    {
        // Render each source HTML to its own PDF
        var conv = new HtmlToPdf();
        conv.OpenHTML("page1.html");
        conv.SavePDF("document1.pdf");

        conv = new HtmlToPdf();
        conv.OpenHTML("page2.html");
        conv.SavePDF("document2.pdf");

        // Merging into a single PDF requires another library (e.g., iTextSharp).
        Console.WriteLine("PDF Duo has no native merge — combine output with another library.");
    }
}

After (IronPDF):

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

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");
        Console.WriteLine("PDFs merged successfully!");
    }
}

This example shows a fundamental architectural difference. PDF Duo .NET has no merge API at all - merging in PDF Duo workflows historically meant pairing it with a second library such as iTextSharp 4.x.

IronPDF consolidates this into a single dependency: load each PDF as a PdfDocument using PdfDocument.FromFile(), then use the static PdfDocument.Merge() method to combine them. This returns a new PdfDocument object that you save separately with SaveAs().

The IronPDF approach also lets you manipulate any of the PDFs before merging, add watermarks to the merged result, apply security settings, and more. For merging many files, you can use LINQ:

var paths = new[] { "document1.pdf", "document2.pdf", "document3.pdf" };
var pdfs = paths.Select(PdfDocument.FromFile).ToList();
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");

Learn more about merging and splitting PDFs.


New Capabilities After Migration

After migrating to IronPDF, you gain capabilities that PDF Duo simply cannot provide:

Headers and Footers with Page Numbers

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:10px;'>Company Report</div>",
    MaxHeight = 25
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:10px;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");

PDF Duo doesn't support headers or footers - there is no equivalent functionality. IronPDF provides full HTML/CSS support with built-in placeholders for dynamic content like page numbers. See the headers and footers guide.

Watermarks

using IronPdf;
using IronPdf.Editing;

var pdf = PdfDocument.FromFile("document.pdf");

pdf.ApplyWatermark(
    "<h1 style='color:red; opacity:0.3;'>CONFIDENTIAL</h1>",
    45,
    VerticalAlignment.Middle,
    HorizontalAlignment.Center);

pdf.SaveAs("watermarked.pdf");

PDF Duo doesn't support watermarks. IronPDF provides HTML-based watermarks with full CSS styling support.

Password Protection

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("secured.pdf");

PDF Duo doesn't support password protection or security settings.

Text Extraction

var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();

PDF Duo doesn't support text extraction.


Critical Migration Notes

No Page-Layout Options on PDF Duo's HtmlToPdf

DuoDimension.HtmlToPdf does not document a settings object covering paper size, orientation, or margins. IronPDF exposes them explicitly on RenderingOptions:

// PDF Duo: no documented per-instance settings — OpenHTML / SavePDF only.

// IronPDF:
renderer.RenderingOptions.PaperSize    = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop    = 20;
renderer.RenderingOptions.MarginRight  = 15;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft   = 15;

Save Method Naming

Different method names for writing the file:

// PDF Duo:
conv.SavePDF("output.pdf");

// IronPDF:
pdf.SaveAs("output.pdf");

Loading Existing PDFs

PDF Duo .NET only writes PDFs - there is no documented "load existing PDF" call. To operate on an existing PDF you must move to IronPDF (or another library):

// PDF Duo: no equivalent.

// IronPDF:
var pdf = PdfDocument.FromFile("document.pdf");

HTML String Input

PDF Duo's OpenHTML does not document a "render this HTML string" call; teams write the markup to a temp file first. IronPDF renders strings directly:

// PDF Duo:
File.WriteAllText("temp.html", html);
var conv = new DuoDimension.HtmlToPdf();
conv.OpenHTML("temp.html");
conv.SavePDF("output.pdf");

// IronPDF:
var renderer = new ChromePdfRenderer();
renderer.RenderHtmlAsPdf(html).SaveAs("output.pdf");

Feature Comparison

FeaturePDF Duo .NETIronPDF
HTML to PDFYes (engine not disclosed)Full CSS3, JavaScript
URL to PDFYesFull with auth support
PDF MergingNot in documented APIYes
Headers/FootersNot in documented APIFull HTML support
Page NumbersNot in documented APIBuilt-in placeholders
WatermarksNot in documented APIHTML-based
Password ProtectionNot in documented APIFull security options
Form FillingNot in documented APIYes
Digital SignaturesNot in documented APIYes
Text ExtractionNot in documented APIYes
PDF to ImagesNot in documented APIYes
Async SupportNot in documented APIFull async/await
.NET Core/5+Not in documented runtime listSupported

Migration Checklist

Pre-Migration

  • Find all PDF Duo references in codebase
  • Document current settings (page size, margins, etc.)
  • List all PDF operations used
  • Identify opportunities for new features (headers, watermarks, security)
  • Obtain IronPDF license key

Package Changes

  • Remove the project reference to PDFDuo.dll (PDF Duo .NET is not on NuGet) and delete the vendored binary
  • Install IronPdf NuGet package: dotnet add package IronPdf
  • Update namespace imports from using DuoDimension; to using IronPdf;

Code Changes

  • Add license key configuration at startup
  • Replace DuoDimension.HtmlToPdf with ChromePdfRenderer
  • Replace OpenHTML(path) + SavePDF(path) with RenderHtmlFileAsPdf(path).SaveAs(path)
  • Replace the temp-file detour for HTML strings with RenderHtmlAsPdf(html).SaveAs(path)
  • Replace OpenHTML(url) + SavePDF(path) with RenderUrlAsPdf(url).SaveAs(path)
  • Replace any external merge step with PdfDocument.Merge()
  • Set page size and margins explicitly via RenderingOptions (no PDF Duo equivalent)
  • Replace SavePDF() with SaveAs()
  • For any "load existing PDF" workflow, use PdfDocument.FromFile() (no PDF Duo equivalent)

Post-Migration

  • Run regression tests comparing PDF output
  • Verify page sizes and margins match
  • Test with complex HTML/CSS (IronPDF's modern engine should handle it better)
  • Add new features (headers, footers, watermarks, security)
  • Update documentation

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