HTML & URL to PDF
Working Examples
HtmlConvert | UrlConvert | HtmlWithMarkdown | ChromiumFeatures
HTML to PDF
Convert HTML content with embedded assets, headers, and footers.
var builder = new HtmlRequestBuilder()
.AddDocument(doc =>
doc.SetBody(GetBody()).SetFooter(GetFooter()))
.WithPageProperties(pp =>
{
pp.SetPaperSize(PaperSizes.A3)
.SetMargins(Margins.None)
.SetScale(.99);
})
.WithAsyncAssets(async assets =>
assets.AddItem("some-image.jpg", await GetImageBytes()));
var result = await sharpClient.HtmlToPdfAsync(builder);
URL to PDF
Convert any URL with custom page ranges, headers, and footers.
var builder = new UrlRequestBuilder()
.SetUrl("https://www.example.com")
.ConfigureRequest(config => config.SetPageRanges("1-2"))
.AddAsyncHeaderFooter(async doc =>
doc.SetHeader(await File.ReadAllTextAsync(headerPath))
.SetFooter(await File.ReadAllBytesAsync(footerPath)))
.WithPageProperties(pp =>
{
pp.SetPaperSize(PaperSizes.A4)
.SetMargins(Margins.None)
.SetScale(.90)
.SetLandscape();
});
var result = await sharpClient.UrlToPdfAsync(builder);
Markdown to PDF
var builder = new HtmlRequestBuilder()
.AddAsyncDocument(async doc =>
doc.SetHeader(await GetHeaderAsync())
.SetBody(await GetBodyAsync())
.SetContainsMarkdown()
.SetFooter(await GetFooterAsync()))
.WithPageProperties(pp =>
pp.UseChromeDefaults().SetLandscape().SetScale(.90))
.WithAsyncAssets(async a =>
a.AddItems(await GetMarkdownAssets()));
var result = await sharpClient.HtmlToPdfAsync(builder);
Chromium Rendering Behaviors
Wait for Selector & Media Features
Control Chromium's rendering with wait conditions, media emulation, and error handling.
var builder = new HtmlRequestBuilder()
.AddDocument(doc => doc.SetBody(html))
.SetConversionBehaviors(b => b
// Wait for a DOM element before converting
.SetWaitForSelector("#app")
// Emulate dark mode
.AddEmulatedMediaFeature("prefers-color-scheme", "dark")
// Strict error handling
.SetFailOnHttpStatusCodes(499, 599)
.FailOnResourceLoadingFailed()
.FailOnConsoleExceptions()
// Ignore specific CDN domains for status checks
.AddIgnoreResourceHttpStatusDomains("cdn.example.com", "fonts.googleapis.com"));
Cookies
builder.SetConversionBehaviors(b => b
.AddCookie(new Cookie
{
Name = "session_token",
Value = "abc123xyz",
Domain = "example.com",
Path = "/",
Secure = true,
HttpOnly = true,
SameSite = "Lax"
}));
Custom HTTP Headers
Page Properties
Paper Sizes & Margins
builder.WithPageProperties(pp =>
{
pp.SetPaperSize(PaperSizes.A4) // or Letter, A3, etc.
.SetMargins(Margins.Normal) // or None, Large
.SetScale(0.95)
.SetLandscape()
.SetPrintBackground(true)
.SetGenerateDocumentOutline(true);
});
Single Page Output
Force all content onto one very long page: