EggPdf 1.1.4

There is a newer version of this package available.
See the version list below for details.
dotnet add package EggPdf --version 1.1.4
                    
NuGet\Install-Package EggPdf -Version 1.1.4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EggPdf" Version="1.1.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EggPdf" Version="1.1.4" />
                    
Directory.Packages.props
<PackageReference Include="EggPdf" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add EggPdf --version 1.1.4
                    
#r "nuget: EggPdf, 1.1.4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package EggPdf@1.1.4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=EggPdf&version=1.1.4
                    
Install as a Cake Addin
#tool nuget:?package=EggPdf&version=1.1.4
                    
Install as a Cake Tool

EggPdf

CI NuGet NuGet Downloads License: MIT

Pure C# HTML/CSS to PDF rendering engine. Zero dependencies. Chrome-quality output.

Write normal HTML and CSS. Get a perfect PDF. No WebKit, no Chromium, no native binaries.

Why EggPdf?

Feature EggPdf SelectPdf wkhtmltopdf Puppeteer
Pure C# Yes No No No
Dependencies Zero ~50MB WebKit ~40MB Qt ~300MB Chrome
.NET Framework 4.6.2+ Limited N/A N/A
.NET Core/5+ All Some N/A Yes
CSS Flexbox Yes Yes No Yes
CSS Grid Yes Yes No Yes
SVG Support Yes (vector) Yes Partial Yes
PDF/A Yes No No No
PDF/UA Yes No No No
Tagged PDF Yes No No No
Digital Signatures Yes No No No
License MIT Commercial LGPL Apache 2

Quick Start

dotnet add package EggPdf
// One-liner
byte[] pdf = await EggPdf.HtmlToPdf.RenderAsync("<h1>Hello World</h1>");
File.WriteAllBytes("output.pdf", pdf);

Standard Usage

var converter = new HtmlToPdfConverter(new PdfOptions
{
    PageSize = PageSize.A4,
    Orientation = PageOrientation.Portrait,
    Margins = new PageMargins(top: 20, right: 15, bottom: 20, left: 15, unit: Unit.Mm),
    DefaultFont = "Arial",
    Title = "My Document"
});

// To byte[]
byte[] pdf = await converter.RenderAsync(htmlString);

// To file
await converter.RenderToFileAsync(htmlString, "report.pdf");

// To HTTP response (streaming, no buffering)
await converter.RenderAsync(htmlString, Response.Body, HttpContext.RequestAborted);

ASP.NET Core Integration

dotnet add package EggPdf.AspNetCore
// DI Registration
services.AddEggPdf(options =>
{
    options.PageSize = PageSize.A4;
    options.DefaultFont = "Arial";
});

// Controller
[HttpGet("invoice/{id}/pdf")]
public async Task<IActionResult> GetInvoice(int id)
{
    var model = await _invoiceService.GetAsync(id);
    string html = await _viewRenderer.RenderAsync("Invoice", model);
    return new PdfResult(html) { FileName = $"invoice-{id}.pdf" };
}

Razor Templates

dotnet add package EggPdf.Razor
services.AddEggPdfRazor();

// Render .cshtml template directly to PDF
public class InvoiceService(IRazorToPdfConverter pdf)
{
    public async Task<byte[]> Generate(InvoiceModel model)
        => await pdf.RenderViewAsync("Invoice", model);
}

Features

HTML & CSS

  • Full HTML5 parsing (WHATWG spec-compliant)
  • CSS 2.1 complete + CSS3 (Flexbox, Grid, Multi-column)
  • CSS Custom Properties (var())
  • @media print support
  • @font-face with WOFF/WOFF2
  • SVG rendering (vector output, not rasterized)
  • All image formats (JPEG, PNG, GIF, WebP, SVG, Base64)

PDF

  • PDF 1.4 / 1.5 / 1.7 / 2.0
  • Clickable hyperlinks and internal links
  • Auto-generated bookmarks from headings
  • Table of contents with page numbers
  • Running headers/footers
  • Page numbers (Page X of Y)
  • Repeating table headers across pages
  • Mixed page orientations (portrait + landscape)
  • Watermarks

Typography

  • TrueType/OpenType font embedding with subsetting
  • Font fallback chain
  • CJK support (Chinese, Japanese, Korean)
  • Vietnamese, Thai, Arabic, Hebrew
  • Emoji rendering (color emoji)
  • Automatic hyphenation
  • Variable font support

Business

  • PDF/A (archival: 1b, 2b, 3b)
  • PDF/UA (accessibility)
  • Digital signatures (PAdES)
  • AcroForm fields
  • QR codes and barcodes
  • File attachments (ZUGFeRD/Factur-X e-invoicing)
  • PDF merging
  • AES-256 encryption

Performance

  • Streaming output (constant memory for large documents)
  • Font caching across renders
  • Thread-safe converter (one instance per app)
  • Streaming table layout for 10,000+ row tables
Scenario Mean Memory
Simple page (h1 + p) 13 µs 20 KB
Invoice (table + styles) 86 µs 85 KB
Large table (100 rows) 1.2 ms 939 KB

Benchmarks run on every PR (results posted as comment) and on every merge to main (artifacts uploaded). Targets: simple < 50ms, invoice < 100ms, large table < 5s.

Target Frameworks

Target Coverage
netstandard2.0 .NET Framework 4.6.2+, .NET Core 2.0+, Mono, Xamarin, Unity
netstandard2.1 .NET Core 3.0+
net6.0 .NET 6+
net8.0 .NET 8+
net9.0 .NET 9+
net10.0 .NET 10+

Use EggPdf Your Way

NuGet (for .NET developers)

Package Description Dependencies
EggPdf Core library None
EggPdf.Razor Razor template integration ASP.NET Core
EggPdf.AspNetCore ASP.NET Core middleware ASP.NET Core

Docker (for any language / DevOps)

# REST API service (with Web UI)
docker run -p 8080:8080 eggspot/eggpdf:latest
# Open http://localhost:8080 for Web UI, or call REST API from any language

# CLI (convert files)
docker run -v $(pwd):/work eggspot/eggpdf:latest eggpdf /work/input.html -o /work/output.pdf

CLI Binary (standalone, no .NET needed)

Download a single executable for your platform -- no installation required:

Platform Download
Windows x64 eggpdf-win-x64.exe
Windows ARM64 eggpdf-win-arm64.exe
Linux x64 eggpdf-linux-x64
Linux ARM64 eggpdf-linux-arm64
macOS x64 (Intel) eggpdf-osx-x64
macOS ARM64 (Apple Silicon) eggpdf-osx-arm64
./eggpdf input.html -o output.pdf
./eggpdf input.html -o output.png --format png
./eggpdf input.html --watch    # live reload
./eggpdf --serve               # start REST API server

Web UI (for anyone)

Open http://localhost:8080 after starting the Docker service. Paste HTML, get PDF. No coding required.

Documentation

See the Wiki for full documentation:

Contributing

Contributions are welcome! We follow strict TDD — write the test before the code:

  1. Fork the repository
  2. Create a feature branch: git checkout -b feat/my-feature
  3. Write the failing test first — run it, confirm it fails
  4. Write minimal code to make the test pass
  5. Run the test — if it fails, fix code and run again; repeat until it passes
  6. Run ALL tests — fix any regressions and repeat until the full suite passes
  7. Check performance if touching hot paths
  8. Commit with conventional prefixes: feat:, fix:, perf:, test:
  9. Push and create a PR

See CLAUDE.md for detailed development guidelines.

Sponsoring

EggPdf is free and open source. If you find it useful, please consider sponsoring:

Sponsor

Your sponsorship helps us:

  • Maintain and improve the library
  • Add new CSS features and PDF capabilities
  • Keep the documentation up to date
  • Respond to issues and PRs

License

MIT License. See LICENSE for details.

Copyright (c) 2025 Eggspot

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 is compatible. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.
  • .NETStandard 2.1

    • No dependencies.
  • net10.0

    • No dependencies.
  • net6.0

    • No dependencies.
  • net8.0

    • No dependencies.
  • net9.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.2.0 3 4/16/2026
1.1.4 36 4/15/2026
1.1.3 88 4/7/2026
1.1.2 84 4/7/2026
1.1.1 83 4/7/2026
1.1.0 78 4/7/2026
1.0.2 79 4/7/2026
1.0.1 80 4/7/2026
1.0.0 82 4/7/2026
0.5.0 92 4/5/2026
0.4.0 80 4/5/2026
0.3.1 86 4/5/2026
0.3.0 96 4/5/2026
0.2.0 81 4/5/2026
0.1.6 91 4/5/2026
0.1.5 79 4/5/2026
0.1.4 84 4/5/2026
0.1.3 83 4/5/2026
0.1.2 84 4/3/2026
0.1.1 83 4/3/2026
Loading failed