How to Add Table of Contents
A table of contents (TOC) is like a roadmap that helps readers navigate through the PDF document's contents. It typically appears at the beginning and lists the main sections or chapters of the PDF, along with the page numbers where each section begins. This allows readers to quickly find and jump to specific parts of the document, making it easier to access the information they need.
IronPDF provides a feature to create a table of contents with hyperlinks to the 'h1', 'h2', 'h3', 'h4', 'h5', and 'h6' elements. The default styling of this table of contents will not conflict with other styles in the HTML content.
Get started making PDFs with NuGet now:
Install IronPDF with NuGet
Copy the code
new ChromePdfRenderer { RenderingOptions = { CreateOutlineMaps = true, OutlineMapsFormat = TableOfContentsTypes.WithPageNumbers, FirstPageNumber = 1 } } .RenderHtmlFileAsPdf("myDocument.html") .SaveAs("withToc.pdf");
Deploy to test on your live environment
Get started with IronPDF
Start using IronPDF in your project today with a free trial.
How to Add a Table of Contents
- Download the C# library for adding a table of contents
- Prepare the HTML to be converted to PDF
- Set the TableOfContents property to enable the table of contents
- Customize the table of contents by choosing whether to display page numbers or not
- Optimize the placement of the table of contents on the output PDF
Add Table of Contents Example
Use the TableOfContents
property to enable the creation of a table of contents in the output PDF document. This property can be assigned to one of three TableOfContentsTypes
, which are described as follows:
- None: Do not create a table of contents
- Basic: Create a table of contents without page numbers
- WithPageNumbers: Create a table of contents WITH page numbers
To understand this feature better, you can download the sample HTML file below:
Code
:path=/static-assets/pdf/content-code-examples/how-to/table-of-contents.cs
using IronPdf;
// Instantiate Renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Configure render options
renderer.RenderingOptions = new ChromePdfRenderOptions
{
// Enable table of content feature
TableOfContents = TableOfContentsTypes.WithPageNumbers,
};
PdfDocument pdf = renderer.RenderHtmlFileAsPdf("tableOfContent.html");
pdf.SaveAs("tableOfContents.pdf");
Imports IronPdf
' Instantiate Renderer
Private renderer As New ChromePdfRenderer()
' Configure render options
renderer.RenderingOptions = New ChromePdfRenderOptions With {.TableOfContents = TableOfContentsTypes.WithPageNumbers}
Dim pdf As PdfDocument = renderer.RenderHtmlFileAsPdf("tableOfContent.html")
pdf.SaveAs("tableOfContents.pdf")
Output PDF
The table of contents will be created with hyperlinks to each of the 'h1', 'h2', 'h3', 'h4', 'h5', and 'h6'.
Merge
method on the document will break the hyperlinks of the table of contents.Table of Contents Placement on the PDF
- Ensure that the HTML document has proper header tags (h1 up to h6).
- Optionally insert a div for where you want the Table of Contents to appear. If the below div is not provided, IronPDF will insert the Table of Contents at the start.
<div id="ironpdf-toc"></div>
<div id="ironpdf-toc"></div>
- In the render options, choose to render the table of contents either with or without page numbers.
Styling the Table of Contents
The Table of Contents can be styled using CSS by targeting the various CSS selectors that define the style of the Table of Contents.
In addition, styling modifications can be done using the CustomCssUrl
property. Let's begin by downloading a CSS file that contains the original styling for the table of contents below.
page-break-before
and page-break-after
properties when styling the table of contents, as this will break page number calculations. The current implementation expects the Table of Contents to be on separate pages from other document content.:path=/static-assets/pdf/content-code-examples/how-to/table-of-contents-overwrite-styling.cs
using IronPdf;
using System.IO;
// Instantiate Renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Configure render options
renderer.RenderingOptions = new ChromePdfRenderOptions
{
// Enable table of content feature
TableOfContents = TableOfContentsTypes.WithPageNumbers,
CustomCssUrl = "./custom.css"
};
// Read HTML text from file
string html = File.ReadAllText("tableOfContent.html");
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("tableOfContents.pdf");
Imports IronPdf
Imports System.IO
' Instantiate Renderer
Private renderer As New ChromePdfRenderer()
' Configure render options
renderer.RenderingOptions = New ChromePdfRenderOptions With {
.TableOfContents = TableOfContentsTypes.WithPageNumbers,
.CustomCssUrl = "./custom.css"
}
' Read HTML text from file
Dim html As String = File.ReadAllText("tableOfContent.html")
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("tableOfContents.pdf")
Style Headers
Use the '#ironpdf-toc ul li.h1' selector to apply different styling to the H1 header in the table of contents. Replace 'h1' with 'h2' up to 'h6' to change the styling for each respective header.
#ironpdf-toc ul li.h1 {
font-style: italic;
font-weight: bold;
}

Font Family
With both the '#ironpdf-toc li .title
' and '#ironpdf-toc li .page
' selectors, it is possible to overwrite the font family of the table of contents. To do this, we can use the cursive font for the title and utilize the @font-face attribute to use the custom 'Lemon' font designed by Eduardo Tunni.
#ironpdf-toc li .title {
order: 1;
font-family: cursive;
}
@font-face {
font-family: 'lemon';
src: url('Lemon-Regular.ttf')
}
#ironpdf-toc li .page {
order: 3;
font-family: 'lemon', sans-serif;
}

Indentation
Indentation can be controlled using the ':root' selector. This value determines the amount of indent for each header level (h1, h2, ...) in the table of contents. It can be increased as needed, or there can be no indentation with a value of 0.
:root {
--indent-length: 25px;
}

Dot Line
To remove the dotted lines between the header title and page number, modify the background-image of the ::after
selector. In the original styling, the second parameter is "currentcolor 1px". Change it to "transparent 1px" to remove the dots. It is important to specify other attributes as well because, in this selector, the new styling will completely override the old styling rather than just adding to it.
#ironpdf-toc li::after {
background-image: radial-gradient(circle, transparent 1px, transparent 1.5px);
background-position: bottom;
background-size: 1ex 4.5px;
background-repeat: space no-repeat;
content: "";
flex-grow: 1;
height: 1em;
order: 2;
}

Ready to see what else you can do? Check out our tutorial page here: Convert PDFs
Frequently Asked Questions
How can I add a table of contents to a PDF in .NET C#?
You can use IronPDF to add a table of contents to a PDF by setting the TableOfContents
property in your PDF generation settings. This will automatically create a navigational index linked to header elements in your PDF document.
What options are available for table of contents in IronPDF?
IronPDF provides three options for table of contents: None (no TOC), Basic (TOC without page numbers), and WithPageNumbers (TOC that includes page numbers).
How can I ensure the table of contents appears at a specific location in the PDF?
To place the table of contents at a specific location, insert a div
with the ID 'ironpdf-toc' in your HTML document. IronPDF will place the TOC at this location.
Can I style the table of contents using CSS?
Yes, IronPDF allows you to style the table of contents using CSS. You can target specific TOC elements to modify their appearance and use a custom CSS URL for additional styling.
Is it possible to change the font of the table of contents in a PDF?
You can change the font of the table of contents by using the #ironpdf-toc li .title
and #ironpdf-toc li .page
CSS selectors. Custom fonts can be implemented using the @font-face
attribute.
How do I prevent the TOC hyperlinks from breaking when merging PDF documents?
When using the Merge
method after creating a TOC, ensure that you update or regenerate the TOC to maintain working hyperlinks, as merging can disrupt them.
What should I be cautious about when styling the table of contents regarding page breaks?
Avoid altering the page-break-before
and page-break-after
properties in your CSS, as this can interfere with page number calculations in the TOC.
How can I remove dotted lines between titles and page numbers in the TOC?
To remove dotted lines between titles and page numbers, modify the CSS for the '::after' selector of TOC items, setting the background-image
property to 'transparent 1px'.
How can I control the indentation of headers in the table of contents?
Control the indentation of headers in the TOC by using the ':root' CSS selector, which allows you to define the indent level for each header.
What is the role of a table of contents in a PDF document?
A table of contents serves as a navigational tool within a PDF document, listing sections or chapters and their page numbers to help users quickly locate specific content.