DEV Community

IronSoftware
IronSoftware

Posted on

How to set PDF Margins in C#

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");
Enter fullscreen mode Exit fullscreen mode

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);
Enter fullscreen mode Exit fullscreen mode

To use only code-specified margins, set CSS margins to zero:

body { margin: 0; padding: 0; }
Enter fullscreen mode Exit fullscreen mode

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);
Enter fullscreen mode Exit fullscreen mode

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>");
Enter fullscreen mode Exit fullscreen mode

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>");
Enter fullscreen mode Exit fullscreen mode

Helper method for convenience:

public static double InchesToMm(double inches) => inches * 25.4;
public static double PointsToMm(double points) => points * 0.3528;
Enter fullscreen mode Exit fullscreen mode

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>");
Enter fullscreen mode Exit fullscreen mode

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;
}
Enter fullscreen mode Exit fullscreen mode

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;
}
Enter fullscreen mode Exit fullscreen mode

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);
Enter fullscreen mode Exit fullscreen mode

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");
Enter fullscreen mode Exit fullscreen mode

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");
Enter fullscreen mode Exit fullscreen mode

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)