Bookmark is a helpful feature of PDF, especially for PDF documents with lots of pages. By clicking on a bookmark, the reader can jump to the corresponding location of the document quickly. A series of organized bookmarks can be used as contents as well. This article demonstrates how to get bookmarks from PDF documents using Spire.PDF for .NET.

Install Spire.PDF for .NET

To begin with, you need to add the DLL files included in the Spire.PDF for.NET package as references in your .NET project. The DLL files can be either downloaded from this link or installed via NuGet.

PM> Install-Package Spire.PDF

Get the Bookmarks of a PDF Document

The detailed steps are as follows:

  • Create a PdfDocument instance.
  • Load a PDF document from disk using PdfDocument.LoadFromFile() method.
  • Get bookmarks collection in the PDF document using PdfDocument.Bookmarks property.
  • Get the bookmarks’ content and save to a TXT file using custom method GetBookmarks().
  • C#
  • VB.NET
using System;
using System.IO;
using System.Text;
using Spire.Pdf;
using Spire.Pdf.Bookmarks;

namespace GetBookmark
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //Create a PdfDocument instance
            PdfDocument pdf = new PdfDocument();

            //Load a PDF document from disk
            pdf.LoadFromFile(@"D:\testp\test.pdf");

            //Get bookmark collection of the Pdf document
            PdfBookmarkCollection bookmarks = pdf.Bookmarks;

            //Get the bookmarks and save them to a TXT file
            String result = "GetPdfBookmarks.txt";
            GetBookmarks(bookmarks, result);

        }

        public static void GetBookmarks(PdfBookmarkCollection bookmarks, string result)
        {
            //Create an object of StringBuilder
            StringBuilder content = new StringBuilder();

            //Get PDF bookmarks’ information
            if (bookmarks.Count > 0)
            {
                content.AppendLine("Pdf bookmarks:");
                foreach (PdfBookmark parentBookmark in bookmarks)
                {
                    //Get the title
                    content.AppendLine(parentBookmark.Title);

                    //Get the text style
                    string textStyle = parentBookmark.DisplayStyle.ToString();
                    content.AppendLine(textStyle);
                    GetChildBookmark(parentBookmark, content);
                }
            }

            //Save to a TXT file
            File.WriteAllText(result, content.ToString());
        }
        public static void GetChildBookmark(PdfBookmark parentBookmark, StringBuilder content)
        {
            if (parentBookmark.Count > 0)
            {
                foreach (PdfBookmark childBookmark in parentBookmark)
                {
                    //Get the title
                    content.AppendLine(childBookmark.Title);

                    //Get the text style
                    string textStyle = childBookmark.DisplayStyle.ToString();
                    content.AppendLine(textStyle);
                    GetChildBookmark(childBookmark, content);
                }
            }

        }
    }
}

C#/VB.NET: Get Bookmarks of PDF Documents

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

PDF bookmarks are navigational aids that allow users to quickly locate and jump to specific sections or pages in a PDF document. Through a simple click, users can arrive at the target location, which eliminates the need to manually scroll or search for specific content in a lengthy document. In this article, you will learn how to programmatically add, modify and remove bookmarks in PDF using Spire.PDF for .NET.

Install Spire.PDF for .NET

To begin with, you need to add the DLL files included in the Spire.PDF for.NET package as references in your .NET project. The DLL files can be either downloaded from this link or installed via NuGet.

PM> Install-Package Spire.PDF 

Add Bookmarks to a PDF Document in C# and VB.NET

Spire.PDF for .NET provides the PdfDocument.Bookmarks.Add() method to add bookmarks to a PDF document. After a bookmark is created, you can also use the PdfBookmark.Add() method to add sub-bookmarks for it.  The following are the detailed steps.

  • Create a PdfDocument object.
  • Load a sample PDF file using PdfDocument.LoadFromFile() method.
  • Loop through all pages in the PDF file to add bookmarks and set their styles.
  • Add a parent bookmark to the document using PdfDocument.Bookmarks.Add() method.
  • Create a PdfXYZExplicitDestination object and set the destination of the parent bookmark using PdfBookmark.Action property.
  • Set the text color and style of the parent bookmark.
  • Add a sub-bookmark to the parent bookmark using PdfBookmark.Add() method.
  • Set the destination, text color, and text style of the sub-bookmark.
  • Save the result document using PdfDocument.SaveToFile() method.
  • C#
  • VB.NET
using System.Drawing;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Actions;
using Spire.Pdf.Bookmarks;
using Spire.Pdf.Destinations;
using Spire.Pdf.General;

namespace AddBookmark
{
    class Program
    {
        static void Main(string[] args)
        {
            //Create a PdfDocument object
            PdfDocument pdf = new PdfDocument();

            //Load a sample PDF file
            pdf.LoadFromFile("template.pdf");

            //Loop through the pages in the PDF file
            for (int i = 0; i < pdf.Pages.Count; i++)
            {
                PdfPageBase page = pdf.Pages[i];

                //Add a bookmark
                PdfBookmark bookmark = pdf.Bookmarks.Add(string.Format("Bookmark-{0}", i + 1));

                //Set the destination page and location of the bookmark
                PdfXYZExplicitDestination destination = new PdfXYZExplicitDestination(page, 0f, 0f);
                bookmark.Action = new PdfGoToAction(destination);

                //Set the text color and style of the bookmark
                bookmark.Color = new PdfRGBColor(Color.Black);
                bookmark.DisplayStyle = PdfTextStyle.Bold;

                //Add a child bookmark
                PdfBookmark childBookmark = bookmark.Add(string.Format("Sub-Bookmark-{0}", i + 1));

                //Set the destination page and location of the child bookmark
                PdfXYZExplicitDestination childDestination = new PdfXYZExplicitDestination(page, 0f, 100f);
                childBookmark.Action = new PdfGoToAction(childDestination);

                //Set the text color and style of the child bookmark
                childBookmark.Color = new PdfRGBColor(Color.Brown);
                childBookmark.DisplayStyle = PdfTextStyle.Italic;
            }

            // Save the result file
            pdf.SaveToFile("AddBookmarks.pdf");
        }
    }
}

C#/VB.NET: Add, Edit, or Delete Bookmarks in PDF

Edit Bookmarks in a PDF Document in C# and VB.NET

If you need to update the existing bookmarks, you can use the methods of PdfBookmark class to rename the bookmarks and change their text color, text style. The following are the detailed steps.

  • Create a PdfDocument object.
  • Load a sample PDF file using PdfDocument.LoadFromFile() method.
  • Get a specified bookmark using PdfDocument.Bookmarks[] property.
  • Change the title of the bookmark using PdfBookmark.Title property.
  • Change the font color of the bookmark using PdfBookmark.Color property.
  • Change the text style of the bookmark using PdfBookmark.DisplayStyle property.
  • Change the text color and style of the sub-bookmark using the above methods.
  • Save the result document using PdfDocument.SaveToFile() method.
  • C#
  • VB.NET
using Spire.Pdf;
using Spire.Pdf.Bookmarks;
using System.Drawing;


namespace ModifyBookmarks
{
    class Program
    {
        static void Main(string[] args)
        {
            //Create a PdfDocument object
            PdfDocument pdf = new PdfDocument();

            //Load a sample PDF file
            pdf.LoadFromFile("AddBookmarks.Pdf");

            //Get the first bookmark
            PdfBookmark bookmark = pdf.Bookmarks[0];
            
            //Change the title of the bookmark
            bookmark.Title = "Modified BookMark";

            //Change text color and style of the bookmark
            bookmark.Color = Color.Red;
            bookmark.DisplayStyle = PdfTextStyle.Italic;

            //Edit sub-bookmarks of the first bookmark
            foreach (PdfBookmark childBookmark in bookmark)
            {
                childBookmark.Color = Color.Blue;
                childBookmark.DisplayStyle = PdfTextStyle.Bold;
            }
        
            //Save the result file
            pdf.SaveToFile("EditBookmarks.Pdf");
        }
    }
}

C#/VB.NET: Add, Edit, or Delete Bookmarks in PDF

Delete Bookmarks from a PDF Document in C# and VB.NET

Spire.PDF for .NET allows to remove a specified bookmark as well as all bookmarks in a PDF file. Furthermore, removing only a specified sub-bookmark can also be achieved. The following are the detailed steps.

  • Create a PdfDocument object.
  • Load a sample PDF file using PdfDocument.LoadFromFile() method.
  • Get the first bookmark using PdfDocument.Bookmarks[] property.
  • Remove a specified sub-bookmark of the first bookmark using PdfBookmark.RemoveAt() method.
  • Remove a specified bookmark including its sub-bookmarks using PdfDocument.Bookmarks.RemoveAt() method. Or you can remove all bookmarks in the PDF file using PdfDocument.Bookmarks.Clear() method.
  • Save the document using PdfDocument.saveToFile() method.
  • C#
  • VB.NET
using Spire.Pdf;
using Spire.Pdf.Bookmarks;

namespace DeleteBookmarks
{
    class Program
    {
        static void Main(string[] args)
        {
            //Create a PdfDocument object
            PdfDocument pdf = new PdfDocument();

            //Load a sample PDF file
            pdf.LoadFromFile("AddBookmarks.Pdf");

            //Get the first bookmark
            PdfBookmark bookmark = pdf.Bookmarks[0];

            //Delete the first sub-bookmark of the first bookmark
            bookmark.RemoveAt(0);

            //Delete the second bookmark including its sub-bookmarks
            pdf.Bookmarks.RemoveAt(1);

            //Delete all bookmarks
            //pdf.Bookmarks.Clear();

            //Save the result file
            pdf.SaveToFile("DeleteBookmarks.pdf");
        }
    }
}

C#/VB.NET: Add, Edit, or Delete Bookmarks in PDF

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

In this section, I will introduce a solution to export Excel to datatable through a datagridview via this WPF Excel component Spire.XLS for WPF. Using it, we can quickly export any Excel sheet to datatable. First let us see below picture:

Excel to Datatable

When we export Excel to datatable, first we need to initialize a new instance of the class Spire.Xls.Workbook, here it is named “workbook”, then, after loading our Excel file from system by this method: Spire.Xls.Workbook.LoadFromFile(string fileName, ExcelVersion version); we need to decide which sheet will be exported to datatable. When using Spire.XLS for WPF, we do not need to install MS Excel, so suppose we do not know how many sheets in our Excel file, we can use this class System.Random provided by Microsoft to get the page count and export any sheet to datatable by calling the method: Spire.Xls.Worksheet.ExportDataTable(). After export data to datatable, with the help of the two properties of the class System.Data.Dataview:System.Data.Dataview.AutoGenerateColumns and System.Data.Dataview.ItemsSource. The datatable columns will be automatically created and all the data in datatable will be shown in datagrid.

Here we can download Spire.XLS for WPF and install it on system. After adding Spire.Xls dll on system, we can start our task of excel to datatable by below code:

[C#]
using System.Data;
using Spire.Xls;

namespace wpfexceltodatatable
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, RoutedEventArgs e)
        {
          //load an excel file 
            Workbook workbook = new Workbook();
            workbook.LoadFromFile(@"..\excel.xls", ExcelVersion.Version97to2003);
            //get the count of excel worksheet
            int sheetCount = workbook.Worksheets.Count;
            Random r = new Random();
            int index = r.Next(0, sheetCount);
           //show datatable in datagrid
            Worksheet sheet = workbook.Worksheets[index];
            DataTable dataTable = sheet.ExportDataTable();
            DataView view = new DataView(dataTable);
            this.dataGrid1.ItemsSource = view;
            this.dataGrid1.AutoGenerateColumns = true;
        }
    }
}
          
[VB.NET]
Imports System.Data
Imports Spire.Xls

Namespace wpfexceltodatatable
	Public Partial Class MainWindow
		Inherits Window
		Public Sub New()
			InitializeComponent()
		End Sub
		Private Sub button1_Click(sender As Object, e As RoutedEventArgs)
			'load an excel file 
			Dim workbook As New Workbook()
			workbook.LoadFromFile("..\excel.xls", ExcelVersion.Version97to2003)
			'get the count of excel worksheet
			Dim sheetCount As Integer = workbook.Worksheets.Count
			Dim r As New Random()
			Dim index As Integer = r.[Next](0, sheetCount)
			'show datatable in datagrid
			Dim sheet As Worksheet = workbook.Worksheets(index)
			Dim dataTable As DataTable = sheet.ExportDataTable()
			Dim view As New DataView(dataTable)
			Me.dataGrid1.ItemsSource = view
			Me.dataGrid1.AutoGenerateColumns = True
		End Sub
	End Class
End Namespace
    
page 319