SelectPdf for .NET 10 - Pdf Bookmarks - C# / .NET 10 Sample

This sample shows how to create a new PDF document using SelectPdf, how to add several pages, texts and bookmarks to the document.

A bookmark is a special link related to the pdf document that appears in the Bookmarks panel of the pdf viewer. If the pdf document that is created is very long, pdf bookmarks are a must.

Pdf bookmarks can be created with multi-levels and different styles.

Sample code · C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using SelectPdf.Universal;

namespace SelectPdf.Samples.Pages
{
    public class PdfBookmarksModel : PageModel
    {
        public void OnGet()
        {

        }

        public IActionResult OnPost()
        {
            // create a new pdf document
            PdfDocument doc = new PdfDocument();

            // instruct the document to show the bookmarks panel when opened in a viewer
            doc.ViewerPreferences.PageMode = PdfViewerPageMode.UseOutlines;

            // add a new page to the document
            PdfPage page1 = doc.AddPage();

            // add a second page to the document
            PdfPage page2 = doc.AddPage();

            // add a third page to the document
            PdfPage page3 = doc.AddPage();

            // define a rendering result object
            PdfRenderingResult result;

            // create a new pdf font
            PdfFont font = doc.Fonts.Add(PdfStandardFont.Helvetica);
            font.Size = 14;

            // create a new text element and add it to the first page
            PdfTextElement text1 = new PdfTextElement(0, 0, "First page", font);
            page1.Add(text1);

            // create a new text element and add it to the second page
            PdfTextElement text2 = new PdfTextElement(0, 0, "Second page", font);
            page2.Add(text2);

            // create a new text element and add it to the third page
            PdfTextElement text3 = new PdfTextElement(0, 0, "Third page", font);
            page3.Add(text3);

            // create a first level bookmark pointing to the first page
            PdfBookmark book1 = doc.AddBookmark("First page", new PdfDestination(page1,
                new SelectPdf.Universal.Drawing.PointF(0, 0)));

            // create a first level bookmark pointing to the second page
            PdfBookmark book2 = doc.AddBookmark("Second page", new PdfDestination(page2,
                new SelectPdf.Universal.Drawing.PointF(0, 0)));

            // create a first level bookmark pointing to the third page
            PdfBookmark book3 = doc.AddBookmark("Third page", new PdfDestination(page3,
                new SelectPdf.Universal.Drawing.PointF(0, 0)));

            // other text on page 2
            PdfTextElement text21 = new PdfTextElement(0, 100, "Text 1 on page 2", font);
            result = page2.Add(text21);

            // add a level 2 bookmark to this text 
            // (using the bookmark for the page 2 as parent and 
            // the text rendering location as bookmark destination)
            doc.AddBookmark("Text 1", new PdfDestination(page2,
                result.PdfPageLastRectangle.Location), book2);

            // other text on page 2
            PdfTextElement text22 = new PdfTextElement(0, 400, "Text 2 on page 2", font);
            result = page2.Add(text22);

            // add a level 2 bookmark to this text 
            // (using the bookmark for the page 2 as parent and the text rendering 
            // location as bookmark destination) some styles are set for this bookmark
            PdfBookmark book = doc.AddBookmark("Text 2", new PdfDestination(page2,
                result.PdfPageLastRectangle.Location), book2);
            book.Color = new PdfColor(255, 0, 0);
            book.Style = PdfBookmarkStyle.Italic;

            // save pdf document
            byte[] pdf = doc.Save();

            // close pdf document
            doc.Close();

            // return resulted pdf document
            FileResult fileResult = new FileContentResult(pdf, "application/pdf");
            fileResult.FileDownloadName = "Document.pdf";
            return fileResult;

        }
    }
}