Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

Install the HtmlRenderer.PdfSharp NuGet package, pass your HTML to PdfGenerator.GeneratePdf, and save the returned PdfDocument. For a basic A4 PDF, the essential call is PdfGenerator.GeneratePdf(html, PageSize.A4). This is a managed C# renderer aimed at HTML 4.01 and CSS 2—not a browser—so it is a good fit for straightforward documents, but not a safe assumption for JavaScript-driven pages or modern browser layouts.

Render an HTML string to PDF

In a .NET project, add HtmlRenderer.PdfSharp from NuGet. The package page lists version 1.6.1, last updated July 29, 2026, and its package metadata declares dependencies including HtmlRenderer.Core 1.6.1 and PDFsharp 6.2.4 or newer. The package is software, not a physical product.

dotnet add package HtmlRenderer.PdfSharp

Then create a PDF from an HTML string and save it:

using PdfSharp;
using PdfSharp.Pdf;
using TheArtOfDev.HtmlRenderer.PdfSharp;

var html = "<h1>Hello, PDF</h1><p>This document was rendered from HTML.</p>";

PdfDocument pdf = PdfGenerator.GeneratePdf(html, PageSize.A4);
pdf.Save("document.pdf");

The GeneratePdf call returns a PDFsharp PdfDocument. Saving it writes the file to the path you specify; make sure the process has permission to write there. For example, a relative path is resolved from the application’s current working directory, which may differ from the project directory when deployed or run as a service.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Set page size, orientation, and margins

Page dimensions and margins are not cosmetic settings applied after rendering. The renderer uses the available page width to lay out and paginate the HTML. Choose the page geometry before generating the document so line wrapping and page breaks are calculated against the intended printable area.

For production documents, use the overload that accepts PdfGenerateConfig. Set the page size, orientation, and margins on the configuration, then pass it with the HTML:

using PdfSharp;
using PdfSharp.Pdf;
using TheArtOfDev.HtmlRenderer.PdfSharp;

var html = "<h1>Quarterly report</h1><p>Report content goes here.</p>";
var config = new PdfGenerateConfig
{
    PageSize = PageSize.A4,
    PageOrientation = PageOrientation.Landscape,
    MarginLeft = 30,
    MarginRight = 30,
    MarginTop = 36,
    MarginBottom = 36
};

PdfDocument pdf = PdfGenerator.GeneratePdf(html, config);
pdf.Save("report.pdf");

Use the units and enum choices expected by the package’s API when changing these values; verify the output with the exact version and target framework in your application. If the document is clipped, cramped, or unexpectedly paginated, review the page width and margins first, then inspect fixed-width elements and long unbroken text in the HTML.

Load CSS, images, and other resources deliberately

A browser normally resolves linked stylesheets and images against a page URL and its browsing context. A generated PDF from an HTML string does not automatically have that same context. If resources are in application-specific locations or need custom resolution, configure the CSS data and stylesheet-load or image-load handlers supported by the PdfGenerator overload. The API can accept optional CssData and resource-loading handlers.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Inline styles: Put essential styles directly in the HTML or supply CSS through the renderer’s CSS configuration. This reduces reliance on external resource resolution.
  • Images: Confirm that image paths are accessible to the process that creates the PDF. A path that works in a browser may not be a valid filesystem path for a server process.
  • Stylesheets: If styles are external, provide an appropriate loading handler rather than assuming relative browser URL behavior.
  • Deployment: Test in the same operating system, runtime, permissions, and directory layout as production. File access and resource paths can differ from a local development run.

Resource-handler overloads should be matched to the installed package version; do not copy a handler signature from a different release without compiling against the actual dependency.

How the renderer paginates the document

GeneratePdf creates a PdfDocument and delegates page creation to its page-generation logic. The implementation creates an HTML container, sets page dimensions, lays out the content within the page-width restriction, and appends rendered pages to the PDF. Margins reduce the area available to that layout. This is why a change in orientation, paper size, or margin can move text and alter page count even when the HTML itself is unchanged.

Plan for pagination rather than treating the PDF as a screenshot of a web page. Check headings near page boundaries, tables wider than the printable area, and image sizes. The reviewed material does not publish independent benchmark results or a compatibility score, so performance and fidelity should be evaluated with the document sizes and content your application actually generates.

Know what HTML and CSS it can render

HTML Renderer describes its support in terms of HTML 4.01 and CSS level 2. It is implemented in managed C# and does not rely on a WebBrowser control, ActiveX/COM, or MSHTML. That makes it a distinct option for server-side document generation, but it does not make it equivalent to Chromium, WebKit, or another current browser engine.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Reasonable starting point: static text, basic markup, and styling that stays within the documented HTML 4.01 and CSS 2 scope.
  • Test carefully: malformed real-world markup, images, complex tables, and any layout that must match a specific browser. The project describes handling malformed HTML, but your particular content still needs validation.
  • Do not assume: JavaScript execution, complete modern CSS support, HTML5 browser behavior, web-font fidelity, or browser-equivalent print output. These are not established by the package’s stated scope.

If a page depends on JavaScript to create its content, CSS Grid or other modern layout behavior, browser print styles, or exact browser rendering, use an engine designed to render pages in a browser context and verify the result there. HTML Renderer.PdfSharp is best selected for its supported static-document use case, not because its name includes HTML.

Check .NET compatibility and package dependencies

The package project targets netstandard2.0 and net8.0. NuGet also reports computed compatibility entries for additional .NET, .NET Framework, Mono, Xamarin, and Tizen targets; a computed compatibility entry is not the same as a project explicitly targeting every such framework. Confirm compatibility for your own target framework and deployment environment before choosing it.

For its declared targets, NuGet lists HtmlRenderer.Core 1.6.1, Microsoft.Win32.Registry 5.0.0 or newer, PDFsharp 6.2.4 or newer, and System.Drawing.Common 10.0.10 or newer. Let NuGet resolve transitive dependencies, and inspect the restore output if your application pins conflicting versions. The project describes itself as managed C#, but that description does not remove the need to validate package dependencies and runtime behavior in your deployment environment.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshoot common rendering failures

The project cannot find a type or namespace

Check that HtmlRenderer.PdfSharp is installed in the project that contains the code and that the source includes using TheArtOfDev.HtmlRenderer.PdfSharp;. The quick-start API also uses PdfSharp for PageSize and PdfSharp.Pdf for PdfDocument. Restore packages and rebuild after adding the dependency.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The PDF is created, but styling is missing

Check whether the stylesheet is inline or loaded through a configured CSS/resource path. Do not assume that a relative URL resolves as it would in a browser. Use the relevant stylesheet-load or CSS-data configuration when external resources need custom resolution.

Images are missing

Verify the image source from the process’s point of view: check the actual path, permissions, and whether the resource-loading handler is required. A browser-visible URL or a path relative to an HTML file may not be meaningful when HTML is passed directly as a string.

Layout differs from a browser

First check that the HTML and CSS fit the documented HTML 4.01/CSS 2 scope. If the page relies on JavaScript or modern browser layout, this is a renderer limitation to account for, not necessarily a malformed PDF. Simplify the markup or choose a browser-based engine when browser fidelity is required.

Content wraps or breaks across pages unexpectedly

Review page size, orientation, and margins because they define the available layout width. Then look for fixed-width elements, wide tables, large images, and long strings without break opportunities. Generate and inspect representative documents after changing those inputs.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The app fails after deployment

Compare the deployed runtime and restored dependency versions with the working environment. Check filesystem permissions and resource paths, especially when the application runs as a service or in a container. Package compatibility metadata does not by itself validate every deployment configuration.

Or skip the browser setup

If your actual requirement is to capture a live web page as an image or PDF—not to convert an arbitrary HTML string with this .NET library—ScreenshotNeo offers a one-request API. For example, this cURL request captures a URL as a WebP image:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

See the ScreenshotNeo API documentation for request options. Before capture, it can accept cookie or consent banners as a visitor and remove more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be disabled. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and responses identify the page verdict and billing status in headers. An MCP server provides take_screenshot, get_page_info, and capture_pdf tools for AI agents and MCP clients. The free plan includes 1,000 shots per month without a card; paid plans start at $5 for 3,000 shots.

Sign up for 1,000 free screenshots a month, with no card required.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

License and package activity

The HTML Renderer repository presents a BSD-3-Clause license. NuGet listed version 1.6.1 with 36,937 downloads for that version and a last-updated date of July 29, 2026, at the time those registry details were recorded. Download counts describe package-registry activity; they are not evidence of rendering quality, performance, or suitability for a particular application.

Frequently Asked Questions

Can I use HTML Renderer.PdfSharp in a .NET 8 application?

The package project explicitly targets .NET 8.0 as well as .NET Standard 2.0. Check the resolved dependencies and your deployment environment as part of the build.

Does the library run JavaScript in my HTML before making the PDF?

JavaScript execution is not established by the package’s documented HTML 4.01 and CSS 2 rendering scope. Use a browser-based renderer if your page needs script execution.

Is the NuGet download count a performance or quality rating?

No. The count is registry activity for the listed version, not an independent benchmark or quality measure.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.