COMPARISON

SelectPdf vs IronPDF: Technical Comparison Guide

When .NET developers evaluate HTML-to-PDF conversion libraries, SelectPdf and IronPDF represent different architectural approaches with significantly different platform capabilities. SelectPdf provides a commercial library using an older Blink/WebKit-based rendering engine with Windows-only deployment, while IronPDF offers a modern Chromium-based solution with full cross-platform support. This technical comparison examines both libraries across the dimensions that matter most to professional developers and architects making PDF generation decisions for .NET applications in 2025 and beyond.

Understanding SelectPdf

SelectPdf is a commercial library designed to convert HTML content into PDFs using C#. The library is tailored toward developers who require seamless integration of PDF generation functionality within their applications. SelectPdf's API centers around the HtmlToPdf converter class and PdfDocument object pattern, providing a straightforward approach to HTML-to-PDF conversion.

The strength of SelectPdf lies in its simple API, making it an appealing option for developers new to PDF generation. However, potential users must be aware of critical limitations that affect deployment options and modern web standards support.

Critical Limitation: Despite advertising cross-platform capability, SelectPdf only functions on Windows environments. This presents a substantial barrier when considering cloud-based deployment solutions such as Azure Functions, Docker containers, or Linux-based hosting.

Understanding IronPDF

IronPDF provides a commercially supported PDF generation library that uses an up-to-date Chromium rendering engine. The library converts HTML, CSS, and JavaScript into PDF documents with full browser-level fidelity, supporting modern CSS3 features including CSS Grid, advanced Flexbox, and CSS Variables.

IronPDF operates across Windows, Linux (10+ distributions), macOS, and cloud environments including Azure Functions, AWS Lambda, and Docker containers. The library installs as a NuGet package and provides full support for modern .NET platforms including .NET 10.

The Platform Support Problem

The most significant difference between SelectPdf and IronPDF lies in their platform support. This affects deployment options, CI/CD pipelines, and cloud adoption strategies.

SelectPdf Platform Limitations

SelectPdf explicitly does not support:

  • Linux (any distribution)
  • macOS
  • Docker containers
  • Azure Functions
  • AWS Lambda
  • Google Cloud Functions
  • Any ARM-based systems

This is a fundamental architectural limitation—SelectPdf depends on Windows-specific libraries and cannot be ported to other platforms.

// ❌ SelectPdf - This code FAILS on Linux/Docker
using SelectPdf;

// Deployment to Azure App Service (Linux) - FAILS
// Deployment to Docker container - FAILS
// Deployment to AWS Lambda - FAILS
// GitHub Actions on ubuntu-latest - FAILS

var converter = new HtmlToPdf();
var doc = converter.ConvertHtmlString("<h1>Hello</h1>");
// Exception: SelectPdf only works on Windows
// ❌ SelectPdf - This code FAILS on Linux/Docker
using SelectPdf;

// Deployment to Azure App Service (Linux) - FAILS
// Deployment to Docker container - FAILS
// Deployment to AWS Lambda - FAILS
// GitHub Actions on ubuntu-latest - FAILS

var converter = new HtmlToPdf();
var doc = converter.ConvertHtmlString("<h1>Hello</h1>");
// Exception: SelectPdf only works on Windows
$vbLabelText   $csharpLabel

IronPDF Cross-Platform Support

IronPDF provides comprehensive cross-platform deployment:

// ✅ IronPDF - Works everywhere
using IronPdf;

// Azure App Service (Linux) - WORKS
// Docker container - WORKS
// AWS Lambda - WORKS
// GitHub Actions on ubuntu-latest - WORKS
// macOS development - WORKS

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello</h1>");
pdf.SaveAs("output.pdf");
// ✅ IronPDF - Works everywhere
using IronPdf;

// Azure App Service (Linux) - WORKS
// Docker container - WORKS
// AWS Lambda - WORKS
// GitHub Actions on ubuntu-latest - WORKS
// macOS development - WORKS

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello</h1>");
pdf.SaveAs("output.pdf");
$vbLabelText   $csharpLabel

Platform Support Comparison

PlatformSelectPdfIronPDF
Windows Server 2019+
Windows 10/11
Ubuntu 20.04+
Debian 10+
CentOS 7+
Alpine Linux
Amazon Linux 2
macOS 10.15+
Azure App Service (Linux)
Azure Functions
AWS Lambda
Docker (Linux)
Kubernetes

The Rendering Engine Difference

SelectPdf uses an outdated Blink/WebKit fork that hasn't kept pace with modern web standards. IronPDF uses the latest stable Chromium rendering engine, ensuring compatibility with contemporary CSS and JavaScript.

CSS Feature Support Comparison

CSS FeatureSelectPdfIronPDF
CSS Grid⚠️ Partial/broken✅ Full
Flexbox (basic)
Flexbox (gap property)
CSS Variables
CSS calc()⚠️ Limited
@media print⚠️ Limited
@font-face⚠️ Limited
Web Fonts⚠️ Limited
SVG⚠️ Basic✅ Full
CSS Transforms⚠️ Limited
CSS Animations

Modern CSS Rendering Example

SelectPdf struggles with modern CSS layouts:

<!-- This modern CSS FAILS or renders incorrectly in SelectPdf -->

<!-- CSS Grid - Broken -->
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px;">
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>

<!-- CSS Variables - Not supported -->
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>
<!-- This modern CSS FAILS or renders incorrectly in SelectPdf -->

<!-- CSS Grid - Broken -->
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px;">
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>

<!-- CSS Variables - Not supported -->
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>
HTML

IronPDF handles modern CSS correctly:

// ✅ IronPDF - Uses latest stable Chromium
var renderer = new ChromePdfRenderer();

var html = @"
<style>
    :root { --primary: #007bff; --gap: 20px; }
    .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--gap); }
</style>
<div class='grid'>
    <div style='background: var(--primary); color: white; padding: 1rem;'>Item 1</div>
    <div style='background: var(--primary); color: white; padding: 1rem;'>Item 2</div>
    <div style='background: var(--primary); color: white; padding: 1rem;'>Item 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
// ✅ IronPDF - Uses latest stable Chromium
var renderer = new ChromePdfRenderer();

var html = @"
<style>
    :root { --primary: #007bff; --gap: 20px; }
    .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--gap); }
</style>
<div class='grid'>
    <div style='background: var(--primary); color: white; padding: 1rem;'>Item 1</div>
    <div style='background: var(--primary); color: white; padding: 1rem;'>Item 2</div>
    <div style='background: var(--primary); color: white; padding: 1rem;'>Item 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
$vbLabelText   $csharpLabel

Feature Comparison Overview

FeatureSelectPdfIronPDF
Windows
Linux❌ NOT SUPPORTED✅ 10+ distros
macOS❌ NOT SUPPORTED✅ Supported
Docker❌ NOT SUPPORTED✅ Official images
Azure Functions❌ NOT SUPPORTED✅ Supported
AWS Lambda❌ NOT SUPPORTED✅ Supported
CSS Grid⚠️ Limited✅ Supported
Flexbox⚠️ Limited✅ Supported
CSS Variables❌ Not supported✅ Supported
.NET 10❌ Not supported✅ Supported
Free version limit5 pagesGenerous trial

HTML String to PDF Conversion

The core HTML-to-PDF workflow demonstrates fundamental API differences between the libraries.

SelectPdf HTML String Conversion

SelectPdf uses the HtmlToPdf converter with explicit document lifecycle management:

// NuGet: Install-Package Select.HtmlToPdf
using SelectPdf;
using System;

class Program
{
    static void Main()
    {
        string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

        HtmlToPdf converter = new HtmlToPdf();
        PdfDocument doc = converter.ConvertHtmlString(htmlContent);
        doc.Save("document.pdf");
        doc.Close();

        Console.WriteLine("PDF generated from HTML string");
    }
}
// NuGet: Install-Package Select.HtmlToPdf
using SelectPdf;
using System;

class Program
{
    static void Main()
    {
        string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

        HtmlToPdf converter = new HtmlToPdf();
        PdfDocument doc = converter.ConvertHtmlString(htmlContent);
        doc.Save("document.pdf");
        doc.Close();

        Console.WriteLine("PDF generated from HTML string");
    }
}
$vbLabelText   $csharpLabel

This approach requires:

  • Creating an HtmlToPdf converter instance
  • Calling ConvertHtmlString() to produce a PdfDocument
  • Explicitly calling doc.Close() after saving

IronPDF HTML String Conversion

IronPDF provides the ChromePdfRenderer class with automatic resource management:

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

class Program
{
    static void Main()
    {
        string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("document.pdf");

        Console.WriteLine("PDF generated from HTML string");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("document.pdf");

        Console.WriteLine("PDF generated from HTML string");
    }
}
$vbLabelText   $csharpLabel

The RenderHtmlAsPdf method uses the Chromium rendering engine and handles resource cleanup automatically—no Close() call required.

URL to PDF Conversion

Converting live web pages to PDF follows similar patterns in both libraries.

SelectPdf URL Conversion

// NuGet: Install-Package Select.HtmlToPdf
using SelectPdf;
using System;

class Program
{
    static void Main()
    {
        HtmlToPdf converter = new HtmlToPdf();
        PdfDocument doc = converter.ConvertUrl("https://www.example.com");
        doc.Save("output.pdf");
        doc.Close();

        Console.WriteLine("PDF created successfully");
    }
}
// NuGet: Install-Package Select.HtmlToPdf
using SelectPdf;
using System;

class Program
{
    static void Main()
    {
        HtmlToPdf converter = new HtmlToPdf();
        PdfDocument doc = converter.ConvertUrl("https://www.example.com");
        doc.Save("output.pdf");
        doc.Close();

        Console.WriteLine("PDF created successfully");
    }
}
$vbLabelText   $csharpLabel

IronPDF URL Conversion

// 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("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 pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("output.pdf");

        Console.WriteLine("PDF created successfully");
    }
}
$vbLabelText   $csharpLabel

The RenderUrlAsPdf method navigates to the URL using the Chromium engine, executes JavaScript, applies CSS styling, and captures the fully rendered page.

Custom Page Settings

Page configuration demonstrates different API property naming conventions.

SelectPdf Page Settings

SelectPdf configures settings through converter.Options:

// NuGet: Install-Package Select.HtmlToPdf
using SelectPdf;
using System;

class Program
{
    static void Main()
    {
        HtmlToPdf converter = new HtmlToPdf();

        converter.Options.PdfPageSize = PdfPageSize.A4;
        converter.Options.PdfPageOrientation = PdfPageOrientation.Portrait;
        converter.Options.MarginTop = 20;
        converter.Options.MarginBottom = 20;
        converter.Options.MarginLeft = 20;
        converter.Options.MarginRight = 20;

        string html = "<html><body><h1>Custom Page Settings</h1></body></html>";
        PdfDocument doc = converter.ConvertHtmlString(html);
        doc.Save("custom-settings.pdf");
        doc.Close();

        Console.WriteLine("PDF with custom settings created");
    }
}
// NuGet: Install-Package Select.HtmlToPdf
using SelectPdf;
using System;

class Program
{
    static void Main()
    {
        HtmlToPdf converter = new HtmlToPdf();

        converter.Options.PdfPageSize = PdfPageSize.A4;
        converter.Options.PdfPageOrientation = PdfPageOrientation.Portrait;
        converter.Options.MarginTop = 20;
        converter.Options.MarginBottom = 20;
        converter.Options.MarginLeft = 20;
        converter.Options.MarginRight = 20;

        string html = "<html><body><h1>Custom Page Settings</h1></body></html>";
        PdfDocument doc = converter.ConvertHtmlString(html);
        doc.Save("custom-settings.pdf");
        doc.Close();

        Console.WriteLine("PDF with custom settings created");
    }
}
$vbLabelText   $csharpLabel

IronPDF Page Settings

IronPDF configures settings through renderer.RenderingOptions:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Engines.Chrome;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.MarginLeft = 20;
        renderer.RenderingOptions.MarginRight = 20;

        string html = "<html><body><h1>Custom Page Settings</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("custom-settings.pdf");

        Console.WriteLine("PDF with custom settings created");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Engines.Chrome;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.MarginLeft = 20;
        renderer.RenderingOptions.MarginRight = 20;

        string html = "<html><body><h1>Custom Page Settings</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("custom-settings.pdf");

        Console.WriteLine("PDF with custom settings created");
    }
}
$vbLabelText   $csharpLabel

The RenderingOptions property provides access to paper size, margins, and other PDF settings through strongly-typed properties.

API Mapping Reference

Teams evaluating SelectPdf migration to IronPDF can reference this mapping of equivalent operations:

SelectPdfIronPDF
HtmlToPdfChromePdfRenderer
converter.ConvertHtmlString()renderer.RenderHtmlAsPdf()
converter.ConvertUrl()renderer.RenderUrlAsPdf()
doc.Save()pdf.SaveAs()
doc.Close()Not needed
converter.Options.PdfPageSizerenderer.RenderingOptions.PaperSize
converter.Options.PdfPageOrientationrenderer.RenderingOptions.PaperOrientation
converter.Options.MarginToprenderer.RenderingOptions.MarginTop
PdfPageSize.A4PdfPaperSize.A4
PdfPageOrientation.PortraitPdfPaperOrientation.Portrait
"{page_number} of {total_pages}""{page} of {total-pages}"
converter.Header.Add()renderer.RenderingOptions.HtmlHeader
converter.Footer.Add()renderer.RenderingOptions.HtmlFooter

The 5-Page Free Version Limitation

SelectPdf's free version has severe restrictions that impact evaluation and development:

  • Maximum 5 pages per PDF
  • After 5 pages: aggressive watermarking on every page
  • "Created with SelectPdf" watermarks cannot be removed without purchase
  • Even evaluation workflows are limited

IronPDF provides a more generous trial experience without the same hard page limits during evaluation.

Commercial Pricing Comparison

AspectSelectPdfIronPDF
Starting Price$499$749
Free Trial Pages5 pages maxGenerous trial
Watermark BehaviorAggressive after 5 pagesTrial watermark
License TypeSubscription optionsPerpetual available
Price TransparencyComplex tiersClear pricing

When Teams Consider SelectPdf Migration

Several factors prompt development teams to evaluate alternatives to SelectPdf:

Cloud deployment requirements become blocking when applications need to run on Azure Functions, AWS Lambda, or Linux-based container environments. SelectPdf's Windows-only limitation prevents these deployment scenarios entirely.

Modern CSS rendering failures affect applications using contemporary web designs. CSS Grid layouts break, the Flexbox gap property doesn't work, and CSS Variables are unsupported in SelectPdf's outdated rendering engine.

.NET 10 adoption creates compatibility concerns. Teams planning to target .NET 10 and C# 14 in 2026 need libraries with full modern .NET support. SelectPdf does not support .NET 10, while IronPDF provides full support.

CI/CD pipeline limitations emerge when GitHub Actions, Azure DevOps, or other build systems use Linux-based agents. SelectPdf cannot execute on ubuntu-latest runners, breaking automated testing and deployment workflows.

Docker containerization is blocked entirely. Organizations adopting container-based architectures cannot use SelectPdf in their Docker deployments.

Strengths and Trade-offs

SelectPdf Strengths

  • Simple, straightforward API for basic HTML-to-PDF conversion
  • Lower starting price point ($499)
  • Suitable for Windows-only deployment scenarios with basic CSS requirements

SelectPdf Limitations

  • Windows-only deployment (no Linux, macOS, Docker, or cloud functions)
  • Outdated Blink/WebKit rendering engine
  • Limited CSS Grid, Flexbox gap, and CSS Variables support
  • 5-page limit on free version with aggressive watermarking
  • No .NET 10 support
  • Cannot deploy to Azure Functions, AWS Lambda, or container environments
  • Requires explicit doc.Close() calls

IronPDF Strengths

  • Full cross-platform support (Windows, Linux 10+ distros, macOS, Docker)
  • Modern Chromium rendering with full CSS3 and JavaScript support
  • Cloud-native deployment (Azure Functions, AWS Lambda, Kubernetes)
  • Full .NET 10 support
  • Comprehensive documentation and professional support
  • Automatic resource management (no Close() required)
  • PDF manipulation capabilities (merge, split, watermarks)
  • Digital signatures and security features

IronPDF Considerations

  • Higher starting price ($749)
  • Commercial licensing model

Conclusion

SelectPdf and IronPDF serve different deployment contexts and technical requirements. SelectPdf provides a straightforward option for Windows-only environments with basic CSS requirements and where the 5-page free version limit is acceptable.

For applications requiring cross-platform deployment, modern CSS rendering, cloud function support, or containerized environments, IronPDF provides essential capabilities that SelectPdf cannot deliver. The ability to deploy to Linux, Docker, Azure Functions, and AWS Lambda addresses modern infrastructure requirements that Windows-only libraries cannot satisfy.

When evaluating SelectPdf migration to IronPDF, teams should consider their specific requirements around deployment platforms, CSS complexity, .NET version targets, and cloud adoption strategies. For teams targeting modern cloud-native architectures with .NET 10 in 2026, IronPDF's cross-platform Chromium-based architecture provides a more sustainable foundation than SelectPdf's Windows-only approach.


For implementation guidance, explore the IronPDF HTML-to-PDF tutorial and documentation covering PDF generation patterns for modern .NET applications. For platform-specific deployment, see the Linux deployment guide and Docker documentation.