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 WindowsIronPDF 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");Platform Support Comparison
| Platform | SelectPdf | IronPDF |
|---|---|---|
| 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 Feature | SelectPdf | IronPDF |
|---|---|---|
| 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>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!Feature Comparison Overview
| Feature | SelectPdf | IronPDF |
|---|---|---|
| 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 limit | 5 pages | Generous 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");
}
}This approach requires:
- Creating an
HtmlToPdfconverter instance - Calling
ConvertHtmlString()to produce aPdfDocument - 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");
}
}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");
}
}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");
}
}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");
}
}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");
}
}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:
| SelectPdf | IronPDF |
|---|---|
HtmlToPdf | ChromePdfRenderer |
converter.ConvertHtmlString() | renderer.RenderHtmlAsPdf() |
converter.ConvertUrl() | renderer.RenderUrlAsPdf() |
doc.Save() | pdf.SaveAs() |
doc.Close() | Not needed |
converter.Options.PdfPageSize | renderer.RenderingOptions.PaperSize |
converter.Options.PdfPageOrientation | renderer.RenderingOptions.PaperOrientation |
converter.Options.MarginTop | renderer.RenderingOptions.MarginTop |
PdfPageSize.A4 | PdfPaperSize.A4 |
PdfPageOrientation.Portrait | PdfPaperOrientation.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
| Aspect | SelectPdf | IronPDF |
|---|---|---|
| Starting Price | $499 | $749 |
| Free Trial Pages | 5 pages max | Generous trial |
| Watermark Behavior | Aggressive after 5 pages | Trial watermark |
| License Type | Subscription options | Perpetual available |
| Price Transparency | Complex tiers | Clear 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.