Page margins control the whitespace around your PDF content. Get them wrong and text clips at edges or pages look cramped. Here's how to set margins precisely in C#.
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new [ChromePdfRenderer](https://ironpdf.com/blog/videos/how-to-render-webgl-sites-to-pdf-in-csharp-ironpdf/)();
// Set margins in millimeters
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
var pdf = renderer.RenderHtmlAsPdf("<h1>Content with margins</h1>");
pdf.SaveAs("with-margins.pdf");
Four properties, measured in millimeters. Simple and explicit.
What Are Default Margins?
If you don't specify margins, IronPDF uses sensible defaults:
| Setting | Default Value |
|---|---|
| Top | 25mm |
| Bottom | 25mm |
| Left | 25mm |
| Right | 25mm |
These work for most documents. Adjust when you need more content area or specific layout requirements.
How Do Margins Interact with HTML CSS?
Important: IronPDF margins add to any margins defined in your HTML/CSS:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new ChromePdfRenderer();
// RenderingOptions adds 20mm margins
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginLeft = 20;
// HTML also has 10mm body margin
var html = @"
<html>
<head>
<style>
body { margin: 10mm; }
</style>
</head>
<body>
<h1>Content</h1>
</body>
</html>";
// Result: 30mm total margin (20mm + 10mm)
var pdf = renderer.RenderHtmlAsPdf(html);
To use only code-specified margins, set CSS margins to zero:
body { margin: 0; padding: 0; }
How Do I Set Zero Margins?
For edge-to-edge content like covers or labels:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new ChromePdfRenderer();
// Remove all margins
renderer.RenderingOptions.MarginTop = 0;
renderer.RenderingOptions.MarginBottom = 0;
renderer.RenderingOptions.MarginLeft = 0;
renderer.RenderingOptions.MarginRight = 0;
var html = @"
<html>
<head>
<style>
body { margin: 0; padding: 0; }
.full-bleed {
background: #007bff;
color: white;
padding: 50px;
height: 100vh;
}
</style>
</head>
<body>
<div class='full-bleed'>
<h1>Full-Bleed Cover Page</h1>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
Zero margins let backgrounds and images extend to the page edge.
How Do I Set Different Margins Per Side?
Asymmetric margins for binding or special layouts:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new ChromePdfRenderer();
// Extra left margin for hole-punch binding
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 35; // Binding gutter
renderer.RenderingOptions.MarginRight = 15;
var pdf = renderer.RenderHtmlAsPdf("<h1>Document for Binder</h1>");
Common asymmetric patterns:
- Binding gutter: Extra left margin for punched/bound documents
- Footer space: Extra bottom for stamps or signatures
- Header room: Extra top for letterhead
How Do I Set Margins in Inches?
Convert from inches to millimeters:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new ChromePdfRenderer();
// 1 inch = 25.4mm
const double inchToMm = 25.4;
// Set 1-inch margins all around
renderer.RenderingOptions.MarginTop = 1 * inchToMm;
renderer.RenderingOptions.MarginBottom = 1 * inchToMm;
renderer.RenderingOptions.MarginLeft = 1 * inchToMm;
renderer.RenderingOptions.MarginRight = 1 * inchToMm;
var pdf = renderer.RenderHtmlAsPdf("<h1>US Letter Standard</h1>");
Helper method for convenience:
public static double InchesToMm(double inches) => inches * 25.4;
public static double PointsToMm(double points) => points * 0.3528;
How Do I Handle Headers and Footers with Margins?
Headers and footers live within the margins:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new ChromePdfRenderer();
// Provide enough margin space for headers/footers
renderer.RenderingOptions.MarginTop = 40; // Room for header
renderer.RenderingOptions.MarginBottom = 30; // Room for footer
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
// Header uses part of top margin
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div style='font-size:12px;'>Company Name</div>",
MaxHeight = 20 // mm within the margin
};
// Footer uses part of bottom margin
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='font-size:10px;'>Page {page}</div>",
MaxHeight = 15
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1>");
MaxHeight controls how much of the margin the header/footer consumes.
How Do I Create Standard Document Margins?
Common margin standards:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new ChromePdfRenderer();
// Standard business letter (1" all around)
void SetBusinessLetterMargins()
{
renderer.RenderingOptions.MarginTop = 25.4;
renderer.RenderingOptions.MarginBottom = 25.4;
renderer.RenderingOptions.MarginLeft = 25.4;
renderer.RenderingOptions.MarginRight = 25.4;
}
// APA style (1" all around except 1.5" left for binding)
void SetApaMargins()
{
renderer.RenderingOptions.MarginTop = 25.4;
renderer.RenderingOptions.MarginBottom = 25.4;
renderer.RenderingOptions.MarginLeft = 38.1; // 1.5"
renderer.RenderingOptions.MarginRight = 25.4;
}
// Narrow margins for dense content
void SetNarrowMargins()
{
renderer.RenderingOptions.MarginTop = 12.7; // 0.5"
renderer.RenderingOptions.MarginBottom = 12.7;
renderer.RenderingOptions.MarginLeft = 12.7;
renderer.RenderingOptions.MarginRight = 12.7;
}
// Wide margins for notes/annotations
void SetWideMargins()
{
renderer.RenderingOptions.MarginTop = 25.4;
renderer.RenderingOptions.MarginBottom = 25.4;
renderer.RenderingOptions.MarginLeft = 50.8; // 2"
renderer.RenderingOptions.MarginRight = 50.8;
}
Match the margin style to your document's purpose.
How Do I Handle Mirrored Margins for Double-Sided Printing?
Alternating inner/outer margins for booklet printing:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
public PdfDocument CreateBookletDocument(string[] htmlPages)
{
var pdfs = new List<PdfDocument>();
var renderer = new ChromePdfRenderer();
for (int i = 0; i < htmlPages.Length; i++)
{
bool isEvenPage = i % 2 == 0;
// Odd pages: binding on left
// Even pages: binding on right
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = isEvenPage ? 15 : 30; // Inner/outer
renderer.RenderingOptions.MarginRight = isEvenPage ? 30 : 15;
pdfs.Add(renderer.RenderHtmlAsPdf(htmlPages[i]));
}
var merged = PdfDocument.Merge(pdfs);
foreach (var pdf in pdfs) pdf.Dispose();
return merged;
}
Mirrored margins keep content properly positioned when printed double-sided.
How Do I Maximize Content Area?
When you need maximum space for tables or charts:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new ChromePdfRenderer();
// Minimal margins (still printable on most printers)
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
// Landscape for wide tables
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// A4 paper for more width than Letter
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
var pdf = renderer.RenderHtmlAsPdf(wideTableHtml);
Combining minimal margins with landscape and A4 gives maximum horizontal space.
How Do I Debug Margin Issues?
When content is clipping or layout looks wrong:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new ChromePdfRenderer();
// Add visible border to see actual margins
var html = @"
<html>
<head>
<style>
body {
margin: 0;
padding: 0;
border: 1px solid red; /* Debug border */
}
.content {
border: 1px dashed blue; /* Content area */
padding: 10px;
}
</style>
</head>
<body>
<div class='content'>
<h1>Debug Layout</h1>
<p>Red border shows margin boundary</p>
</div>
</body>
</html>";
// Test different margin values
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("debug-margins.pdf");
Visible borders help identify where margins end and content begins.
How Do I Set Margins for Specific Pages?
Different margins per page requires multiple render passes:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
// Cover page - no margins
var coverRenderer = new ChromePdfRenderer();
coverRenderer.RenderingOptions.MarginTop = 0;
coverRenderer.RenderingOptions.MarginBottom = 0;
coverRenderer.RenderingOptions.MarginLeft = 0;
coverRenderer.RenderingOptions.MarginRight = 0;
var cover = coverRenderer.RenderHtmlAsPdf(coverHtml);
// Content pages - standard margins
var contentRenderer = new ChromePdfRenderer();
contentRenderer.RenderingOptions.MarginTop = 25;
contentRenderer.RenderingOptions.MarginBottom = 25;
contentRenderer.RenderingOptions.MarginLeft = 25;
contentRenderer.RenderingOptions.MarginRight = 25;
var content = contentRenderer.RenderHtmlAsPdf(contentHtml);
// Merge with different margin styles
var final = PdfDocument.Merge(cover, content);
final.SaveAs("mixed-margins.pdf");
Each render pass can have different margin settings.
Quick Reference
| Margin Type | Top | Bottom | Left | Right | Use Case |
|---|---|---|---|---|---|
| None | 0 | 0 | 0 | 0 | Labels, covers |
| Narrow | 12.7 | 12.7 | 12.7 | 12.7 | Dense content |
| Normal | 25.4 | 25.4 | 25.4 | 25.4 | Standard documents |
| Wide | 25.4 | 25.4 | 50.8 | 50.8 | Annotations |
| Binding | 25 | 25 | 35 | 15 | Hole-punch |
Unit conversion: 1 inch = 25.4mm, 1 point = 0.3528mm
Margins frame your content. Set them intentionally for the best document presentation.
For more layout options, see the IronPDF margins documentation.
Written by Jacob Mellor, CTO at Iron Software. Jacob created IronPDF and leads a team of 50+ engineers building .NET document processing libraries.
Top comments (0)