Knowledgebase (2609)
Children categories
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);
}
}
}
}
}

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.
- Add Bookmarks to a PDF Document
- Edit Bookmarks in a PDF Document
- Delete Bookmarks from a PDF Document
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");
}
}
}

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");
}
}
}

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");
}
}
}

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:

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:
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;
}
}
}
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