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");
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");
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");
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");
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");
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");
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");
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");
Or clear all bookmarks:
pdf.Bookmarks.Clear();
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");
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);
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"));
}
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);
Useful for auditing or migrating bookmarks between PDFs.
How Do I Test Bookmarks?
Open the PDF in Adobe Acrobat or Chrome:
- Click the bookmark panel icon (left sidebar)
- Verify bookmarks appear
- Click each bookmark
- 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)