EggPdf 1.9.0
dotnet add package EggPdf --version 1.9.0
NuGet\Install-Package EggPdf -Version 1.9.0
<PackageReference Include="EggPdf" Version="1.9.0" />
<PackageVersion Include="EggPdf" Version="1.9.0" />
<PackageReference Include="EggPdf" />
paket add EggPdf --version 1.9.0
#r "nuget: EggPdf, 1.9.0"
#:package EggPdf@1.9.0
#addin nuget:?package=EggPdf&version=1.9.0
#tool nuget:?package=EggPdf&version=1.9.0
EggPdf
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 | 1b/1a/2b/2u/2a/3b/3u/3a | No | No | No |
| PDF/UA | UA-1 | 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
Page size, margins, and orientation are set with regular CSS @page rules in the HTML itself:
string html = @"
<html><head><style>@page { size: A4; margin: 20mm 15mm; }</style></head>
<body><h1>My Document</h1></body></html>";
// To byte[]
byte[] pdf = await EggPdf.HtmlToPdf.RenderAsync(html);
// To a file
await EggPdf.HtmlToPdf.RenderToFileAsync(html, "report.pdf");
// To a stream (e.g. an HTTP response body), with cancellation
await EggPdf.HtmlToPdf.RenderAsync(html, Response.Body, HttpContext.RequestAborted);
Prefer C# properties over writing CSS? PdfRenderOptions is translated into the equivalent
@page rule internally — it's not a separate layout path, just a convenience wrapper:
byte[] pdf = await EggPdf.HtmlToPdf.RenderAsync(html, new EggPdf.PdfRenderOptions
{
PageSize = "Letter",
Orientation = "landscape",
MarginTop = 40, MarginBottom = 40, // CSS pixels
Title = "Q4 Report", // PDF document metadata
});
Fluent C# API (no HTML)
Rather define the document in C#? The fluent API (using EggPdf.Fluent;) is part of the same
EggPdf package -- nothing extra to install. It builds the same DOM the HTML parser would and
renders it through the exact same pipeline (same layout, same fonts, same PDF writer) -- there is
no HTML string in the middle, and anything HTML/CSS can do, the fluent API can do:
using EggPdf.Fluent;
byte[] pdf = Document.Create(doc => doc
.Title("Invoice INV-142")
.Page(page => page
.Size(PageSize.A4).Margin(top: 70, right: 30, bottom: 50, left: 30)
.Header(h => h.Text("Acme Corp").Bold().FontSize(18))
.Footer(f => f.AlignCenter().PageNumberOfTotal()) // "Page 2 of 5"
.Watermark("DRAFT")
.Content(c =>
{
c.Heading(HeadingLevel.H1, "Invoice"); // also becomes a PDF bookmark
c.Item().Row(row =>
{
row.RelativeItem().Text("Bill to: Jane Doe");
row.ConstantItem(Length.Mm(40)).AlignRight().Text("2026-09-24");
});
c.Item().Table(table =>
{
table.Header(h => { h.Cell().Text("Item").Bold(); h.Cell().Text("Qty").Bold(); });
foreach (var line in lines)
table.Row(r => { r.Cell().Text(line.Name); r.Cell().Text(line.Qty.ToString()); })
.AvoidBreakInside();
});
c.Item().PinBottom().Border(1, Colors.Gray).Padding(10).Text("Signature");
})))
.Render();
Prefer statements over one big nested expression? Build it step by step -- same result, byte for byte:
var doc = Document.New().Title("Report");
var page = doc.AddPage().Size(PageSize.A4).Margin(30);
page.Header().Text("Acme").Bold();
page.Footer().AlignCenter().PageNumberOfTotal();
var body = page.Content();
body.Heading(HeadingLevel.H1, "Summary");
body.Item().Text("Quarterly results");
AddSalesTable(body); // ordinary helper methods, one per section
byte[] pdf = doc.Render();
static void AddSalesTable(ColumnDescriptor content)
{
var table = content.Item().Table();
table.Header(h => { h.Cell().Text("Region").Bold(); h.Cell().Text("Sales").Bold(); });
table.Row(r => { r.Cell().Text("North"); r.Cell().Text("1,200"); });
}
Or as one pure method chain -- every child-adding method (Item, Cell, RelativeItem, ConstantItem,
Heading, table Header/Row) has a callback overload that returns its parent, so siblings chain:
Document.Create(doc => doc.Page(p => p.Content(c => c
.Item(i => i.Text("Intro").Bold())
.Item(i => i.Row(r => r.Gap(5).RelativeItem(x => x.Text("Left")).RelativeItem(x => x.Text("Right"))))
.Item(i => i.Table(t => t
.Header(h => h.Cell(x => x.Text("Item")).Cell(x => x.Text("Qty")))
.Row(r => r.Cell(x => x.Text("Widget")).Cell(x => x.Text("3"))))))))
.Render();
Every value is typed -- Colors.Red/Color.FromHex("#ff0000") (malformed hex throws), Length.Mm(5)
/Length.Percent(50) (a bare number is px), keyword enums such as FlexJustify.SpaceBetween or
BorderLineStyle.Dashed, CssTransform.Rotate(10) -- so a typo is a compile error instead of a CSS
declaration the engine silently ignores. .RawStyle(...), .RawAttribute(...), .Raw(html) and
.Css(...) are the explicit, unchecked escape hatches for anything without a typed method yet.
See the Fluent API guide and its
complete API reference (every type and member, with its purpose).
ASP.NET Core Integration
dotnet add package EggPdf.AspNetCore
// Plain HTML -> PDF download, no DI registration needed
[HttpGet("report/pdf")]
public IActionResult GetReport()
=> new PdfResult("<h1>Report</h1>", "report.pdf");
// Render a .cshtml Razor view directly -> PDF download, one line.
// Requires services.AddEggPdfRazor() at startup (EggPdf.AspNetCore already
// references EggPdf.Razor, so installing just this package is enough).
[HttpGet("invoice/{id}/pdf")]
public async Task<IActionResult> GetInvoice(int id)
{
var model = await _invoiceService.GetAsync(id);
return new RazorPdfResult("Invoice", model, $"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 with auto margins & baseline alignment, Grid incl.
grid-auto-flow: denseandgrid-auto-rows/grid-auto-columns, Multi-column) float: left/right(on blocks and<img>) narrows sibling inline content per line (real text wrap-around, not just positioning), includingshape-outside: circle()/ellipse()/polygon()/inset()(rounded corners included) andurl()image shapes (the image's alpha aboveshape-image-threshold; JPEG has no alpha, so it falls back to the float's rectangular bounds)overflow: hidden/clipandcontain: paint/contain: strictactually clip descendant painted content to the element's bounds, not just its own background/borderdirection: rtl/ thedirattribute: defaulttext-alignfollows the direction; logical properties (margin/padding/border-width/border-color/ border-style/inset/border-radius corners,float: inline-start/inline-end) resolve to their mirrored physical values; table columns lay out right-to-left and list markers hang on the right, matching a browser- CSS Custom Properties (
var()) @media printsupport- 2D and 3D CSS transforms (
translate/rotate/scale/matrixand theirX/Y/Z/3dvariants,perspective()) -- PDF has no 3D rendering, so 3D functions are intentionally flattened to an equivalent 2D matrix (e.g.rotateX/rotateYbecome an orthographic Y/X compression,translateZ/scaleZ/perspective()have no 2D effect), not skipped content-visibility: hiddenskips laying out and painting descendants (the element's own box, background and border still render, sized as if it had no content);contain: paint/contain: strictclip the element's own painting to its bounds.contain's other values (layout,style,contentalone) are recalculation-isolation hints with no analog in a single-pass renderer and are accepted as a no-op rather than rejected- Webfonts: remote
<link>stylesheets (Google Fonts) and@font-faceover http(s), data: URIs, or files - SVG rendering (vector output, not rasterized) --
<circle>/<ellipse>/<rect>/<polygon>/<polyline>/<path>/<line>(arcs flattened as true curves), plus SVG filter graphs:filter="url(#id)"(attribute orstyle) with feGaussianBlur, feOffset, feFlood, feColorMatrix, feComponentTransfer, feMerge, feBlend, feComposite, feMorphology, feDropShadow, feTurbulence, feConvolveMatrix, feDisplacementMap, feTile, feImage (element or data: bitmap) and feDiffuse/SpecularLighting (distant/point/spot lights), evaluated in linearRGB/sRGB percolor-interpolation-filters, with filter regions, primitive subregions and namedin/resultwiring. A filtered shape,<text>(glyph outlines from the installed font),<use>or<g>is rasterized (fills incl. linear/radial gradients, strokes), filtered and re-embedded as an image, since PDF has no vector filter primitive. Filtered<image>elements and pattern paints paint unfiltered - All image formats (JPEG, PNG incl. 1-bit QR codes, GIF, WebP -- lossy VP8 incl. alpha, lossless VP8L, extended VP8X containers, first frame of animations --, SVG, Base64)
- Responsive images:
<img srcset>/<picture>and CSSimage-set()resolve to their best candidate (PDF is treated as a fixed 1x print context) - CSS Images Level 4
image(): resolvesltr/rtl-tagged candidates against the element's computed direction and paints a trailing<color>fallback when no image resolves.paint()(the CSS Houdini Paint API) is not supported and never will be by this engine -- it requires running an author-supplied JS paint worklet, and EggPdf has no JavaScript engine by design - Cloudflare email obfuscation (
data-cfemail) decoded automatically
- PDF 1.4 / 1.5 / 1.7 / 2.0
- Clickable hyperlinks, and internal links:
<a href="#id">jumps to the page and position of the element with thatid(forward or backward, any page; a link to a missing id is dropped rather than written dead;#and#topjump to the top of the document) - Auto-generated bookmarks from headings
- Table of contents with page numbers
- Running headers/footers
- Page numbers (Page X of Y)
- Tables spanning any number of pages without row loss, with
<thead>repeating on every continuation page - Mixed page sizes/orientations via named pages (
page: nameon top-level blocks +@page name { size; margin; margin boxes }) - Watermarks
- PDF/A-1b / PDF/A-1a / PDF/A-2b / PDF/A-2u / PDF/A-2a / PDF/A-3b / PDF/A-3u / PDF/A-3a archival
conformance (
HtmlToPdf.Render(html, PdfAConformance.PdfA2b),PdfRenderOptions.Conformance, the CLI's--pdfaflag, or the REST API'soptions.conformancefield): embedded ICC output intent, XMP conformance metadata, every font embedded (including the standard 14) with a correct ToUnicode mapping. PDF/A-1b/1a writes a PDF 1.4 header and throws if the document uses transparency (opacity, blend modes, image alpha) -- PDF/A-1 forbids it outright (ISO 19005-1 has noulevel, onlya/b). Thealevels requiretagged: true(level A is PDF/A + full accessibility tagging) and throw otherwise - PDF/UA-1 tagged PDF (
HtmlToPdf.Render(html, tagged: true),PdfRenderOptions.Tagged, the CLI's--taggedflag, or the REST API'soptions.taggedfield, combinable with PDF/A conformance and with named page groups): a structure tree (headings, paragraphs, tables with<th scope>, lists, landmark regions (nav/header/footer/aside/main/article/section, via custom types + a/RoleMapfallback), figures withalttext, links cross-referenced to their annotation viaOBJR, correctly covering every word of a multi-word link, not just the first) linked to page content via marked content, plus/MarkInfo,/Langand the required XMP identification. A link that wraps across lines gets one Link element and one annotation per line (a PDF rectangle can't itself wrap) - PDF/UA-2 (ISO 14289-2:2024,
HtmlToPdf.Render(html, tagged: true, PdfUaVersion.Ua2)orPdfRenderOptions.UaVersion): the same tagging machinery as PDF/UA-1, plus PDF 2.0's own requirements -- a%PDF-2.0header, a declared PDF 2.0 structure namespace every element references via/NS, and XMPpdfuaid:part/pdfuaid:rev. Landmark regions resolve straight toDiv/Sectunder UA-2 rather than a custom type +/RoleMap. Cannot combine with PDF/A conformance (no defined joint standard); throws rather than silently claim one - Pin content (e.g. a signature/acceptance box) to the bottom of whichever page dynamic content ends on (
-eggpdf-pin-bottom: page)
Typography
- TrueType/OpenType font embedding with subsetting
- Weight-accurate faces:
font-weight: 300–900each select their own variant - Font fallback chain + per-codepoint symbol-font fallback (⚠ ✔ …)
- Full Unicode: Vietnamese and extended Latin out of the box
- Arabic contextual shaping: letters take their isolated/initial/medial/final joining forms (standard Arabic plus Persian peh/tcheh/jeh/keheh/gaf/yeh) with lam-alef ligatures, harakat ignored for joining. Arabic-script letters outside that set (e.g. Urdu ٹ ڈ ڑ) are not shaped
- Complex-script shaping through the font's own GSUB/GPOS tables: Arabic (joining forms via the
font's presentation-form glyphs or, for modern fonts without them, its own init/medi/fina
features; diacritics; cursive attachment), Thai/Lao, Tibetan, Khmer, Myanmar, Sinhala and the
Indic scripts (Devanagari, Bengali, Gujarati, Gurmukhi, Oriya, Tamil, Telugu, Kannada,
Malayalam). That covers mark-to-base / mark-to-ligature / mark-to-mark positioning, Thai SARA AM,
Indic and Khmer/Myanmar syllable reordering (pre-base vowel signs, reph placed per script,
coeng-ro, kinzi) and the font's half forms, conjuncts and subscripts. Needs a font that has the
script (Nirmala UI, Leelawadee UI, Myanmar Text, Noto Sans ..., or your
@font-face); such text is embedded in its own script-capable font, so Latin text keeps its requested typeface. Verified against Chrome's rendering for Devanagari, Bengali, Gujarati, Gurmukhi, Oriya, Tamil, Telugu, Kannada, Malayalam, Sinhala, Khmer, Myanmar, Tibetan, Thai and Arabic. Long Thai, Lao, Khmer and Myanmar paragraphs wrap at syllable boundaries (a heuristic -- true word breaking needs a dictionary, so lines may end mid-word), andline-height: normalfollows the shaping font's ascent + descent + line gap (tall fonts such as Myanmar Text no longer collide). Text runs are reordered with the full Unicode Bidirectional Algorithm (UAX #9: explicit embeddings, overrides and isolates, weak-type and neutral resolution, paired brackets, mirroring), using the CSSdirectionas the paragraph direction; character classes come from a compact table that is exact for Latin, Hebrew, Arabic, Syriac, Thaana and NKo and category-derived elsewhere. Scripts beyond those listed above are not shaped - Browser-parity metrics: text measured with the real font, baselines like Chrome
- Automatic hyphenation
font-feature-settings(e.g."zero" 1,"smcp" 1) applies single-glyph OpenType features (stylistic sets, small caps, oldstyle/tabular figures) from the font's GSUB table -- ligature/contextual substitution is not applied- Variable fonts (TrueType
glyfoutlines with fvar/gvar/avar/HVAR, e.g. Bahnschrift, Inter, Roboto Flex):font-weightdrives thewghtaxis, so@font-facewithfont-weight: 100 900(or an installed variable font) renders intermediate weights as real instances, verified against Chrome's outlines;font-stretch(wdth),font-style: oblique <angle>(slnt) andfont-variation-settings(any axis, e.g."opsz","GRAD") drive the matching axes and the text is measured with them; CFF2 variable fonts (e.g. Source Sans 3 VF) work too -- stems match Chrome at 200/400/650/900 - OpenType fonts with PostScript outlines (
.otf, CFF and CFF2) are converted to TrueType outlines (Type 2 charstrings, subroutines, blend/vsindex, cubic to quadratic), so they measure, shape and embed like any other font - Color/emoji fonts (COLR v0 + CPAL) render each glyph's real color layers -- COLRv1 (gradients, paint graphs -- e.g. current Segoe UI Emoji) is not supported and falls back to the glyph's outline in the current text color
Business
- Digital signatures — one-call X.509 signing (
PdfSigner.Sign(pdf, cert), detached CMS/PKCS#7) or external-CMS two-step flow for HSMs - Password protection with permission flags — view-only PDFs that block editing/copying (RC4 40/128-bit)
- AcroForm fields (fillable forms from HTML form elements)
- PDF merging
- QR codes and barcodes
- ZUGFeRD/Factur-X e-invoicing (
HtmlToPdf.Render(html, PdfAConformance.PdfA3b, new FacturXInvoice {...}),PdfRenderOptions.Invoice, the CLI's--invoice <path>flag, or the REST API'soptions.invoicefield): embeds the UN/CEFACT CII invoice XML as a PDF/A-3 attachment with the Factur-X XMP extension schema. MINIMUM profile whenFacturXInvoice.LineItemsis empty; adding line items automatically produces EN 16931 (Comfort)-level output instead -- per-line tax detail, a grouped header tax breakdown, and computed (not caller-supplied) monetary totals, with/AFRelationship /Alternativefor German legal validity. BASIC and EXTENDED are not modeled as distinct profiles -- populating line items always targets EN 16931, a superset of BASIC's requirements but without EXTENDED-only fields (allowances/charges, multiple deliveries, etc.)
Fluent C# API
- Define documents in C# (
EggPdf.Fluent) with the same engine and output as HTML: pages/named page groups (mixed sizes), running header/footer, watermark, page numbers ("Page X of Y"), text, column/row (flex)/grid layout, tables (repeating header, no-split rows), lists, images, hyperlinks and internal links, headings (auto bookmarks), pin-to-bottom - Strongly typed values (
Color,Length, keyword enums,CssTransform,GridTrack) validated at construction; uncheckedRaw*/Cssescape hatches for everything else - Document-level: title/author/language, global CSS,
@font-face, base path, PDF/A conformance, encryption, PDF/UA tagging, Factur-X invoice
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: HTML/CSS to PDF, plus the fluent C# builder (EggPdf.Fluent) |
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 https://example.com -o page.pdf # fetch and render a URL
echo "<h1>Hi</h1>" | ./eggpdf - -o output.pdf
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:
- Getting Started
- Configuration
- Page Layout & CSS
- Headers, Footers & Page Numbers
- Images & SVG
- Tables
- Fluent C# API
- Fonts & Typography
- PDF Features
- Performance
- API Reference
Contributing
Contributions are welcome! We follow strict TDD — write the test before the code:
- Fork the repository
- Create a feature branch:
git checkout -b feat/my-feature - Write the failing test first — run it, confirm it fails
- Write minimal code to make the test pass
- Run the test — if it fails, fix code and run again; repeat until it passes
- Run ALL tests — fix any regressions and repeat until the full suite passes
- Check performance if touching hot paths
- Commit with conventional prefixes:
feat:,fix:,perf:,test: - 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:
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 | Versions 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. |
-
.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 (2)
Showing the top 2 NuGet packages that depend on EggPdf:
| Package | Downloads |
|---|---|
|
EggPdf.Razor
Razor template to PDF rendering for EggPdf |
|
|
EggPdf.AspNetCore
ASP.NET Core integration for EggPdf (PdfResult, middleware) |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.9.0 | 32 | 9/24/2026 |
| 1.8.0 | 50 | 9/23/2026 |
| 1.7.0 | 109 | 9/22/2026 |
| 1.6.3 | 173 | 9/17/2026 |
| 1.6.2 | 138 | 9/16/2026 |
| 1.6.1 | 128 | 9/16/2026 |
| 1.6.0 | 133 | 9/16/2026 |
| 1.5.4 | 137 | 9/16/2026 |
| 1.5.3 | 131 | 9/15/2026 |
| 1.5.2 | 138 | 9/15/2026 |
| 1.5.1 | 126 | 9/15/2026 |
| 1.5.0 | 127 | 9/15/2026 |
| 1.4.14 | 125 | 9/15/2026 |
| 1.4.13 | 129 | 9/15/2026 |
| 1.4.12 | 92 | 9/15/2026 |
| 1.4.11 | 92 | 9/15/2026 |
| 1.4.10 | 124 | 9/15/2026 |
| 1.4.9 | 383 | 7/18/2026 |
| 1.4.8 | 129 | 7/18/2026 |
| 1.4.7 | 123 | 7/18/2026 |