Skip to footer content
MIGRATION GUIDES

How to Migrate from PDF Duo to IronPDF in C#

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

Aspect PDF Duo .NET IronPDF
Last release v2.4 (December 2010) Active, regular releases
Distribution DLL 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
Documentation One vendor product page Comprehensive docs + API reference
Support None visible Professional support team
Community Negligible 41M+ NuGet downloads (Iron Software stack)
Rendering Engine not disclosed Modern Chromium
Features HTML-to-PDF only HTML-to-PDF, merge, security, signatures, OCR, forms, watermarks
Licensing Per vendor pricing page Commercial, 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
# 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";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Identify PDF Duo Usage

# Find all PDF Duo references
grep -r "DuoDimension\|HtmlToPdf\b\|OpenHTML\|SavePDF" --include="*.cs" .
# 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 .NET IronPDF
using DuoDimension; using IronPdf;
(no documented sub-namespaces) using IronPdf.Rendering;

HTML to PDF Conversion Mappings

PDF Duo .NET IronPDF
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 .NET IronPDF
(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 .NET IronPDF
(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.

Need PDF Duo .NET IronPDF
Load existing PDF not native — pair with iTextSharp 4.x or similar PdfDocument.FromFile(path)
Save PDF conv.SavePDF(path) pdf.SaveAs(path)
Get PDF bytes not native pdf.BinaryData
Merge PDFs not native — pair with iTextSharp 4.x or similar PdfDocument.Merge(pdf1, pdf2)

New Features Not Available in PDF Duo's Documented API

Feature IronPDF
Headers/Footers RenderingOptions.HtmlHeader, HtmlFooter
Page numbers {page}, {total-pages} placeholders
Watermarks pdf.ApplyWatermark(html)
Password protection pdf.SecuritySettings
Form filling pdf.Form.Fields
Digital signatures pdf.SignWithFile()
Text extraction pdf.ExtractAllText()
PDF to Image pdf.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!");
    }
}
// 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!");
    }
}
Imports DuoDimension
Imports System
Imports System.IO

Module Program
    Sub 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.
        Dim tempHtml As String = Path.GetTempFileName() & ".html"
        File.WriteAllText(tempHtml, "<h1>Hello World</h1><p>This is a PDF document.</p>")

        Dim conv As New HtmlToPdf()
        conv.OpenHTML(tempHtml)
        conv.SavePDF("output.pdf")
        Console.WriteLine("PDF created successfully!")
    End Sub
End Module
$vbLabelText   $csharpLabel

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!");
    }
}
// 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!");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>"
        Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
        pdf.SaveAs("output.pdf")
        Console.WriteLine("PDF created successfully!")
    End Sub
End Class
$vbLabelText   $csharpLabel

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!");
    }
}
// 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!");
    }
}
Imports DuoDimension
Imports System

Class Program
    Shared Sub Main()
        Dim conv As New HtmlToPdf()
        conv.OpenHTML("https://www.example.com")
        conv.SavePDF("webpage.pdf")
        Console.WriteLine("Webpage converted to PDF!")
    End Sub
End Class
$vbLabelText   $csharpLabel

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!");
    }
}
// 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!");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
        pdf.SaveAs("webpage.pdf")
        Console.WriteLine("Webpage converted to PDF!")
    End Sub
End Class
$vbLabelText   $csharpLabel

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.");
    }
}
// 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.");
    }
}
Imports DuoDimension
Imports System

Module Program
    Sub Main()
        ' Render each source HTML to its own PDF
        Dim conv As 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.")
    End Sub
End Module
$vbLabelText   $csharpLabel

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!");
    }
}
// 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!");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim pdf1 = PdfDocument.FromFile("document1.pdf")
        Dim pdf2 = PdfDocument.FromFile("document2.pdf")
        Dim merged = PdfDocument.Merge(pdf1, pdf2)
        merged.SaveAs("merged.pdf")
        Console.WriteLine("PDFs merged successfully!")
    End Sub
End Class
$vbLabelText   $csharpLabel

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");
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");
Dim paths = {"document1.pdf", "document2.pdf", "document3.pdf"}
Dim pdfs = paths.Select(AddressOf PdfDocument.FromFile).ToList()
Dim merged = PdfDocument.Merge(pdfs)
merged.SaveAs("merged.pdf")
$vbLabelText   $csharpLabel

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

Dim renderer As New ChromePdfRenderer()

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

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

Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("report.pdf")
$vbLabelText   $csharpLabel

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");
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");
Imports IronPdf
Imports IronPdf.Editing

Dim 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")
$vbLabelText   $csharpLabel

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");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("secured.pdf");
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SecuritySettings.UserPassword = "userpassword"
pdf.SecuritySettings.OwnerPassword = "ownerpassword"
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights
pdf.SaveAs("secured.pdf")
$vbLabelText   $csharpLabel

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

Text Extraction

var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();
Dim pdf = PdfDocument.FromFile("document.pdf")
Dim text As String = pdf.ExtractAllText()
$vbLabelText   $csharpLabel

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;
// 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;
' 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
$vbLabelText   $csharpLabel

Save Method Naming

Different method names for writing the file:

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

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

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

' IronPDF:
pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

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");
// PDF Duo: no equivalent.

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

Dim pdf = PdfDocument.FromFile("document.pdf")
$vbLabelText   $csharpLabel

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");
// 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");
' PDF Duo:
File.WriteAllText("temp.html", html)
Dim conv = New DuoDimension.HtmlToPdf()
conv.OpenHTML("temp.html")
conv.SavePDF("output.pdf")

' IronPDF:
Dim renderer = New ChromePdfRenderer()
renderer.RenderHtmlAsPdf(html).SaveAs("output.pdf")
$vbLabelText   $csharpLabel

Feature Comparison

Feature PDF Duo .NET IronPDF
HTML to PDF Yes (engine not disclosed) Full CSS3, JavaScript
URL to PDF Yes Full with auth support
PDF Merging Not in documented API Yes
Headers/Footers Not in documented API Full HTML support
Page Numbers Not in documented API Built-in placeholders
Watermarks Not in documented API HTML-based
Password Protection Not in documented API Full security options
Form Filling Not in documented API Yes
Digital Signatures Not in documented API Yes
Text Extraction Not in documented API Yes
PDF to Images Not in documented API Yes
Async Support Not in documented API Full async/await
.NET Core/5+ Not in documented runtime list Supported

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 notePDF 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

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me