# IronPDF alternative for .NET IronPDF alternative for .NET. Compare PuppeteerSharp, Playwright .NET and QuestPDF on licensing, then call a Chrome PDF API from C# with HttpClient. IronPDF is a commercial .NET library that renders HTML to PDF with an embedded Chrome engine. It also adds editing features like merging, stamping, and signing. It's capable, but two things push teams to look elsewhere. One is per-developer licensing, and the other is shipping Chromium with your app. This page compares the main options and shows a plain HttpClient approach. **Quick answer.** POST your HTML to the API with a Bearer key and save the bytes. No Chromium in your app and no license per developer. ```csharp var http = new HttpClient(); http.DefaultRequestHeaders.Authorization = new("Bearer", Environment.GetEnvironmentVariable("HTML_PDF_KEY")); var res = await http.PostAsJsonAsync("https://html-pdf.com/v1/pdf", new { html = "

Hello

" }); await File.WriteAllBytesAsync("out.pdf", await res.Content.ReadAsByteArrayAsync()); ``` ## IronPDF licensing This section shows what IronPDF costs and how the price scales. It is sold as perpetual licenses tiered by developers, projects, and locations, as listed on the [IronPDF licensing page](https://ironpdf.com/licensing/) in October 2026. | Tier | Developers / projects / locations | Listed price | |---|---|---| | Lite | 1 / 1 / 1 | $999 | | Plus | 3 / 3 / 3 | $1,499 | | Professional | 10 / 10 / 10 | $2,399 (shown as discounted) | | Unlimited | Unlimited | $4,799 (shown as discounted) | Licenses include one year of support and updates. Enterprise terms like redistribution are quoted separately, and prices change, so check the page before you budget. The key point is that cost scales with team size and deployment locations, not with how many PDFs you make. ## Deployment: Chromium comes with you This section explains the deployment work that comes with an embedded browser. IronPDF's Chrome renderer ships native Chromium binaries, which adds a lot to your publish output and container images. On Linux and Docker, IronPDF recommends the `IronPdf.Linux` package and installing Chrome's system libraries in your Dockerfile. Their docs suggest setting `LinuxAndDockerDependenciesAutoConfig` to `false` when you install them yourself. On Azure, the right package depends on the target. IronPDF documents different setups for App Service on Linux, containers, and Functions, and some lower or sandboxed plans don't allow running Chrome. None of this is unique to IronPDF. Any library that embeds Chrome has the same trade-off. ## .NET alternatives Here are the main alternatives and what each one is good at. **PuppeteerSharp** is a free (MIT) port of Puppeteer. It downloads or uses a Chrome binary and calls `page.PdfAsync()`. You get the same Chrome output and the same deployment work, with no license fee. **Playwright for .NET** (Apache 2.0) is similar and also uses `page.PdfAsync()` in Chromium. Its Docker images include browser dependencies, which simplifies containers. **QuestPDF** takes a different approach. You build documents in C# with a fluent API instead of HTML. There's no browser, so it's fast and small. QuestPDF is free under its Community License for individuals and businesses under USD 1M annual gross revenue (public-sector entities and publicly traded companies aren't eligible). Larger companies need a Professional or Enterprise license. See [QuestPDF licensing](https://www.questpdf.com/license/). It's not a fit if your templates are already HTML. **A hosted Chrome API** moves rendering out of your app entirely. ## Comparison This table puts the options side by side. | | IronPDF | PuppeteerSharp | Playwright .NET | QuestPDF | html-pdf.com | |---|---|---|---|---|---| | Input | HTML, URL | HTML, URL | HTML, URL | C# code | HTML, URL | | Engine | Embedded Chrome | Chrome | Chromium | Own layout | Hosted Chromium | | License | Commercial, per developer | MIT | Apache 2.0 | Community / commercial | Pay per page | | Chromium in your deploy | Yes | Yes | Yes | No | No | | PDF editing (merge, sign) | Yes | No | No | Limited | No | | Works offline | Yes | Yes | Yes | Yes | No | ## When IronPDF is the better choice IronPDF is still the right pick in some situations. - You need PDF **editing** too, such as merging, splitting, forms, digital signatures and text extraction, all in one supported library. - Rendering must run on-premises or air-gapped. - You want a vendor with commercial support and a single NuGet package. ## Calling a Chrome API from C# This is a complete example that renders an invoice with page numbers and saves it to disk. ```csharp using System.Net.Http.Headers; using System.Net.Http.Json; var http = new HttpClient { Timeout = TimeSpan.FromSeconds(40) }; http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("HTML_PDF_KEY")); var body = new { html = "

Invoice #042

Total$120.00

", format = "A4", margin = new { top = "15mm", right = "12mm", bottom = "20mm", left = "12mm" }, footer_html = "
Page of
", max_pages = 20 }; using var response = await http.PostAsJsonAsync("https://html-pdf.com/v1/pdf", body); if (!response.IsSuccessStatusCode) throw new Exception($"PDF failed ({(int)response.StatusCode}): {await response.Content.ReadAsStringAsync()}"); await File.WriteAllBytesAsync("invoice.pdf", await response.Content.ReadAsByteArrayAsync()); ``` The anonymous object's property names are serialized as written, so `footer_html` and `max_pages` match the API. In ASP.NET Core, register the client with `IHttpClientFactory` and return the bytes with `File(bytes, "application/pdf", "invoice.pdf")`. Razor views rendered to a string work as the `html` input. ### Mapping IronPDF options Most IronPDF rendering options have a direct equivalent. | IronPDF (`ChromePdfRenderer.RenderingOptions`) | html-pdf.com | |---|---| | `PaperSize = PdfPaperSize.A4` | `format = "A4"` | | `PaperOrientation = Landscape` | `landscape = true` | | `MarginTop` etc. (mm) | `margin = new { top = "15mm", ... }` | | `HtmlFooter` with `{page}` / `{total-pages}` | `footer_html` with `pageNumber` / `totalPages` classes | | `EnableJavaScript` + `WaitFor.RenderDelay(ms)` | `wait_delay` (seconds) or `wait_for_expression` | | `CssMediaType = Print` | `media = "print"` | | `RenderUrlAsPdf(url)` | `url = "https://..."` (public pages) | ## Or skip the server If you only need HTML to PDF, a hosted API removes the deployment work. html-pdf.com is an HTML/URL to PDF API on headless Chromium. `POST https://html-pdf.com/v1/pdf` with a Bearer key returns a PDF with selectable text as binary, base64, or a 24-hour link. There's no Chromium in your images and no per-developer seats. 1 credit = 1 PDF page. You get 100 free credits once, then packs from $10 for 1,000 pages to $250 for 50,000. Purchased credits never expire. There's also a [remote MCP server](https://html-pdf.com/pdf-mcp-server) for AI assistants. [Get a free API key](https://html-pdf.com/login) · [API docs](https://html-pdf.com/docs) · [HTML to PDF in C#](https://html-pdf.com/html-to-pdf-csharp) · [Page breaks](https://html-pdf.com/html-to-pdf-page-breaks) ## FAQ ### Is there a free IronPDF alternative? Yes. PuppeteerSharp (MIT) and Playwright for .NET (Apache 2.0) are free, but you still ship and maintain Chromium. html-pdf.com gives you 100 free credits once with no card, and 1 credit = 1 PDF page. ### How do I convert HTML to PDF in C# without IronPDF? Send your HTML to `https://html-pdf.com/v1/pdf` with `HttpClient.PostAsJsonAsync` and a Bearer key, then write the response bytes to a file. The example above shows a full invoice with page numbers. ### Does it support headers, footers and page numbers? Yes. Use `header_html` and `footer_html` with Chrome's `pageNumber` and `totalPages` classes, and leave enough margin for them. Chromium also supports CSS `@page` margin boxes (Chrome 131+). ### Do html-pdf.com credits expire? No. Purchased credits never expire, packs range from $10 for 1,000 pages to $250 for 50,000, and failed renders cost nothing.