DEV Community

IronSoftware
IronSoftware

Posted on

Add Bookmarks to PDF in C# (.NET Guide)

Our legal team distributed 200-page contracts without any navigation. Clients complained about scrolling endlessly to find clauses. Simple Ctrl+F searches weren't enough—they needed section jumping.

PDF bookmarks solved this. A clickable outline panel in the sidebar, like a table of contents. Here's the implementation.

What Are PDF Bookmarks?

Bookmarks (also called outlines) are clickable navigation links displayed in PDF viewers' sidebar. They jump users to specific pages or sections.

using IronPdf;
// Install via NuGet: Install-Package IronPdf

var pdf = PdfDocument.FromFile("contract.pdf");
pdf.Bookmarks.AddBookMarkAtEnd("Terms and Conditions", 5);
pdf.Bookmarks.AddBookMarkAtEnd("Payment Schedule", 12);
pdf.SaveAs("bookmarked.pdf");
Enter fullscreen mode Exit fullscreen mode

Users click "Terms and Conditions" in the sidebar, and the PDF jumps to page 5.

How Do I Add Bookmarks to Existing PDFs?

Load the PDF and add bookmarks with page indices (zero-based):

var pdf = PdfDocument.FromFile("document.pdf");

// Add bookmark to page 1 (index 0)
pdf.Bookmarks.AddBookMarkAtEnd("Introduction", 0);

// Add bookmark to page 10 (index 9)
pdf.Bookmarks.AddBookMarkAtEnd("Conclusion", 9);

pdf.SaveAs("with-bookmarks.pdf");
Enter fullscreen mode Exit fullscreen mode

Page indices are zero-based: page 1 = index 0, page 2 = index 1, etc.

Can I Create Nested Bookmarks?

Yes. Build hierarchical structures like a table of contents:

var pdf = PdfDocument.FromFile("report.pdf");

// Add top-level bookmark
var chapter1 = pdf.Bookmarks.AddBookMarkAtEnd("Chapter 1", 0);

// Add child bookmarks
chapter1.Children.AddBookMarkAtEnd("Section 1.1", 1);
chapter1.Children.AddBookMarkAtEnd("Section 1.2", 3);

// Add another top-level bookmark
var chapter2 = pdf.Bookmarks.AddBookMarkAtEnd("Chapter 2", 5);
chapter2.Children.AddBookMarkAtEnd("Section 2.1", 6);

pdf.SaveAs("nested-bookmarks.pdf");
Enter fullscreen mode Exit fullscreen mode

This creates expandable/collapsible bookmark trees in the PDF sidebar.

How Deep Can Bookmark Hierarchies Go?

As deep as needed. Nest bookmarks multiple levels:

var pdf = PdfDocument.FromFile("manual.pdf");

var part1 = pdf.Bookmarks.AddBookMarkAtEnd("Part 1", 0);
var chapter1 = part1.Children.AddBookMarkAtEnd("Chapter 1", 1);
var section11 = chapter1.Children.AddBookMarkAtEnd("Section 1.1", 2);
section11.Children.AddBookMarkAtEnd("Subsection 1.1.1", 3);

pdf.SaveAs("deep-bookmarks.pdf");
Enter fullscreen mode Exit fullscreen mode

I've built 5-level hierarchies for technical manuals without issues.

Can I Add Bookmarks During PDF Generation?

Yes. Generate and bookmark in one workflow:

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);

pdf.Bookmarks.AddBookMarkAtEnd("Overview", 0);
pdf.Bookmarks.AddBookMarkAtEnd("Details", 2);

pdf.SaveAs("generated-with-bookmarks.pdf");
Enter fullscreen mode Exit fullscreen mode

No need to save and reload.

How Do I Add Bookmarks at Specific Positions?

Use AddBookMarkAtStart to prepend:

var pdf = PdfDocument.FromFile("document.pdf");

// Add at end
pdf.Bookmarks.AddBookMarkAtEnd("Appendix", 50);

// Add at beginning (before "Appendix")
pdf.Bookmarks.AddBookMarkAtStart("Table of Contents", 0);

pdf.SaveAs("reordered-bookmarks.pdf");
Enter fullscreen mode Exit fullscreen mode

Bookmarks appear in the order added, not by page number.

Can I Modify Existing Bookmarks?

Access existing bookmarks via the Bookmarks collection:

var pdf = PdfDocument.FromFile("document.pdf");

foreach (var bookmark in pdf.Bookmarks)
{
    Console.WriteLine($"{bookmark.Text} -> Page {bookmark.PageIndex}");

    // Modify properties
    bookmark.Text = "Updated: " + bookmark.Text;
}

pdf.SaveAs("modified-bookmarks.pdf");
Enter fullscreen mode Exit fullscreen mode

Change text, page targets, or other properties.

How Do I Remove Bookmarks?

Remove specific bookmarks:

var pdf = PdfDocument.FromFile("document.pdf");

var toRemove = pdf.Bookmarks.FirstOrDefault(b => b.Text == "Old Section");
if (toRemove != null)
{
    pdf.Bookmarks.Remove(toRemove);
}

pdf.SaveAs("cleaned-bookmarks.pdf");
Enter fullscreen mode Exit fullscreen mode

Or clear all bookmarks:

pdf.Bookmarks.Clear();
Enter fullscreen mode Exit fullscreen mode

Can I Generate Bookmarks from HTML Headers?

Yes, automatically from <h1>, <h2> tags:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

var html = @"
<h1>Chapter 1</h1>
<p>Content...</p>
<h2>Section 1.1</h2>
<p>More content...</p>
<h1>Chapter 2</h1>
<p>Final content...</p>";

var pdf = renderer.RenderHtmlAsPdf(html);

// IronPDF automatically creates bookmarks from headers
pdf.SaveAs("auto-bookmarked.pdf");
Enter fullscreen mode Exit fullscreen mode

Headers become bookmarks automatically.

How Do I Style Bookmark Text?

Bookmarks inherit PDF viewer styling. You can't set font/color in IronPDF, but you can use Unicode characters:

pdf.Bookmarks.AddBookMarkAtEnd("📄 Introduction", 0);
pdf.Bookmarks.AddBookMarkAtEnd("📊 Results", 10);
pdf.Bookmarks.AddBookMarkAtEnd("✅ Conclusion", 20);
Enter fullscreen mode Exit fullscreen mode

Emojis render in most modern PDF viewers.

Can I Link Bookmarks to Specific Coordinates?

Bookmarks target pages, not coordinates. For precise positioning, use page-level destinations (advanced feature not covered in basic bookmark API).

Alternatively, add invisible anchor elements in HTML and link to them.

How Do I Batch Add Bookmarks to Multiple PDFs?

Loop through files:

var files = Directory.GetFiles("pdfs", "*.pdf");

foreach (var file in files)
{
    var pdf = PdfDocument.FromFile(file);

    pdf.Bookmarks.AddBookMarkAtEnd("Cover", 0);
    pdf.Bookmarks.AddBookMarkAtEnd("Index", pdf.PageCount - 1);

    pdf.SaveAs(file.Replace(".pdf", "-bookmarked.pdf"));
}
Enter fullscreen mode Exit fullscreen mode

I bookmarked 500+ legal contracts overnight using this pattern.

Do Bookmarks Affect File Size?

Negligibly. Each bookmark adds ~50-100 bytes. A 10MB PDF with 100 bookmarks grows to ~10.01MB.

Can I Export Bookmark Structure?

Yes, iterate and serialize:

var pdf = PdfDocument.FromFile("document.pdf");
var bookmarkData = new List<object>();

foreach (var bookmark in pdf.Bookmarks)
{
    bookmarkData.Add(new
    {
        Title = bookmark.Text,
        Page = bookmark.PageIndex,
        Children = bookmark.Children.Select(c => new { c.Text, c.PageIndex })
    });
}

string json = JsonSerializer.Serialize(bookmarkData, new JsonSerializerOptions { WriteIndented = true });
File.WriteAllText("bookmarks.json", json);
Enter fullscreen mode Exit fullscreen mode

Useful for auditing or migrating bookmarks between PDFs.

How Do I Test Bookmarks?

Open the PDF in Adobe Acrobat or Chrome:

  1. Click the bookmark panel icon (left sidebar)
  2. Verify bookmarks appear
  3. Click each bookmark
  4. Confirm correct page loads

I automate tests by extracting bookmarks programmatically and verifying page indices match expectations.

What About Accessibility?

Bookmarks improve PDF accessibility for screen readers. Users navigate by bookmarks instead of scrolling, making large documents usable for visually impaired readers.

Always add bookmarks to long documents (10+ pages) for better accessibility compliance.


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)