You can create as many levels as you need.
Here's a code snippet from MigraDoc:
Code:
internal void AddOutline(int level, string title, PdfPage destinationPage)
{
if (level < 1 || destinationPage == null)
return;
PdfDocument document = destinationPage.Owner;
if (document == null)
return;
PdfOutline.PdfOutlineCollection outlines = document.Outlines;
while (--level > 0)
{
int count = outlines.Count;
if (count == 0)
{
// You cannot add empty bookmarks to PDF. So we use blank here.
PdfOutline outline = outlines.Add(" ", destinationPage, true);
outlines = outline.Outlines;
}
else
outlines = outlines[count - 1].Outlines;
}
outlines.Add(title, destinationPage, true);
}