Some test text!

Discord Logo

Chat with us

PDFTron is now Apryse, learn more here.

Read, add, edit PDF outlines and bookmarks in VB

More languages

More languages
JavaScript
Java (Android)
C++
C#
C# (.NET Core)
Go
Java
Kotlin
Obj-C
JS (Node.js)
PHP
Python
Ruby
Swift
C# (UWP)
VB
C# (Xamarin)

Sample VB code to use PDFTron SDK for programmatically reading and editing existing outline items, and for creating new PDF bookmarks using the high-level API. Learn more about our VB PDF Library and PDF Editing & Manipulation Library.

Get Started Samples Download

To run this sample, get started with a free trial of Apryse SDK.

'
' Copyright (c) 2001-2023 by Apryse Software Inc. All Rights Reserved.
'

Imports System

Imports pdftron
Imports pdftron.Common
Imports pdftron.Filters
Imports pdftron.SDF
Imports pdftron.PDF

Module BookmarkTestVB2003
    Dim pdfNetLoader As PDFNetLoader
    Sub New()
        pdfNetLoader = pdftron.PDFNetLoader.Instance()
    End Sub
    '-----------------------------------------------------------------------------------------
    ' The sample code illustrates how to read, write, and edit existing outline items 
    ' and create new bookmarks using both the high-level and the SDF/Cos API.
    '-----------------------------------------------------------------------------------------
    Sub Main()
        BookmarkTest.RunTest()
    End Sub


    Class BookmarkTest

        Public Shared Sub PrintIndent(ByVal item As Bookmark)
            Dim indent As Integer = item.GetIndent() - 1
            Dim i As Integer
            For i = 1 To indent
                Console.Write("  ")
            Next
        End Sub

        Public Shared Sub PrintOutlineTree(ByVal item As Bookmark)

            Do While item.IsValid()

                PrintIndent(item)
                If item.IsOpen Then
                    Console.Write("- {0:s} ACTION -> ", item.GetTitle())
                Else
                    Console.Write("+ {0:s} ACTION -> ", item.GetTitle())
                End If


                ' Print Action
                Dim action As pdftron.PDF.Action = item.GetAction()
                If action.IsValid() Then
                    If action.GetType() = pdftron.PDF.Action.Type.e_GoTo Then
                        Dim dest As Destination = action.GetDest()
                        If (dest.IsValid()) Then
                            Dim page As Page = dest.GetPage()
                            Console.WriteLine("GoTo Page #{0:d}", page.GetIndex())
                        End If
                    Else
                        Console.WriteLine("Not a 'GoTo' action")
                    End If
                Else
                    Console.WriteLine("NULL")
                End If

                If item.HasChildren() Then   ' Recursively print children sub-trees
                    PrintOutlineTree(item.GetFirstChild())
                End If
                item = item.GetNext()
            Loop
        End Sub


        Shared Sub RunTest()

            PDFNet.Initialize(PDFTronLicense.Key)

            ' Relative path to the folder containing test files.
            Dim input_path As String = "../../../../TestFiles/"
            Dim output_path As String = "../../../../TestFiles/Output/"


            ' The following example illustrates how to create and edit the outline tree 
            ' using high-level Bookmark methods.
            Try
                Using doc1 As PDFDoc = New PDFDoc(input_path + "numbered.pdf")
                    doc1.InitSecurityHandler()


                    ' Lets first create the root bookmark items. 
                    Dim red As Bookmark = Bookmark.Create(doc1, "Red")
                    Dim green As Bookmark = Bookmark.Create(doc1, "Green")
                    Dim blue As Bookmark = Bookmark.Create(doc1, "Blue")

                    doc1.AddRootBookmark(red)
                    doc1.AddRootBookmark(green)
                    doc1.AddRootBookmark(blue)

                    ' You can also add new root bookmarks using Bookmark.AddNext("...")
                    blue.AddNext("foo")
                    blue.AddNext("bar")

                    ' We can now associate new bookmarks with page destinations:

                    ' The following example creates an 'explicit' destination (see 
                    ' section '8.2.1 Destinations' in PDF Reference for more details)
                    Dim red_dest As Destination = Destination.CreateFit(doc1.GetPage(1))
                    red.SetAction(pdftron.PDF.Action.CreateGoto(red_dest))

                    ' Create an explicit destination to the first green page in the document
                    green.SetAction(pdftron.PDF.Action.CreateGoto(Destination.CreateFit(doc1.GetPage(10))))

                    ' The following example creates a 'named' destination (see 
                    ' section '8.2.1 Destinations' in PDF Reference for more details)
                    ' Named destinations have certain advantages over explicit destinations.
                    Dim key As String = "blue1"
                    Dim blue_action As pdftron.PDF.Action = pdftron.PDF.Action.CreateGoto(key, Destination.CreateFit(doc1.GetPage(19)))

                    blue.SetAction(blue_action)

                    ' We can now add children Bookmarks
                    Dim sub_red1 As Bookmark = red.AddChild("Red - Page 1")
                    sub_red1.SetAction(pdftron.PDF.Action.CreateGoto(Destination.CreateFit(doc1.GetPage(1))))
                    Dim sub_red2 As Bookmark = red.AddChild("Red - Page 2")
                    sub_red2.SetAction(pdftron.PDF.Action.CreateGoto(Destination.CreateFit(doc1.GetPage(2))))
                    Dim sub_red3 As Bookmark = red.AddChild("Red - Page 3")
                    sub_red3.SetAction(pdftron.PDF.Action.CreateGoto(Destination.CreateFit(doc1.GetPage(3))))
                    Dim sub_red4 As Bookmark = sub_red3.AddChild("Red - Page 4")
                    sub_red4.SetAction(pdftron.PDF.Action.CreateGoto(Destination.CreateFit(doc1.GetPage(4))))
                    Dim sub_red5 As Bookmark = sub_red3.AddChild("Red - Page 5")
                    sub_red5.SetAction(pdftron.PDF.Action.CreateGoto(Destination.CreateFit(doc1.GetPage(5))))
                    Dim sub_red6 As Bookmark = sub_red3.AddChild("Red - Page 6")
                    sub_red6.SetAction(pdftron.PDF.Action.CreateGoto(Destination.CreateFit(doc1.GetPage(6))))

                    ' Example of how to find and delete a bookmark by title text.
                    Dim foo As Bookmark = doc1.GetFirstBookmark().Find("foo")
                    If foo.IsValid() Then
                        foo.Delete()
                    End If
                    Dim bar As Bookmark = doc1.GetFirstBookmark().Find("bar")
                    If bar.IsValid() Then
                        bar.Delete()
                    End If

                    ' Adding color to Bookmarks. Color and other formatting can help readers 
                    ' get around more easily in large PDF documents.
                    red.SetColor(1, 0, 0)
                    green.SetColor(0, 1, 0)
                    green.SetFlags(2)     ' set bold font
                    blue.SetColor(0, 0, 1)
                    blue.SetFlags(3)   ' set bold and italic

                    doc1.Save(output_path + "bookmark.pdf", 0)
                End Using
                Console.WriteLine("Done. Result saved in bookmark.pdf")
            Catch e As PDFNetException
                Console.WriteLine(e.Message)
            End Try


            ' The following example illustrates how to traverse the outline tree using 
            ' Bookmark navigation methods: Bookmark.GetNext(), Bookmark.GetPrev(), 
            ' Bookmark.GetFirstChild () and Bookmark.GetLastChild ().
            Try
                ' Open the document that was saved in the previous code sample
                Using doc1 As PDFDoc = New PDFDoc(output_path + "bookmark.pdf")
                    doc1.InitSecurityHandler()

                    Dim root As Bookmark = doc1.GetFirstBookmark()
                    PrintOutlineTree(root)
                    Console.WriteLine("Done.")
                End Using
            Catch e As PDFNetException
                Console.WriteLine(e.Message)
            End Try

            ' The following example illustrates how to create a Bookmark to a page 
            ' in a remote document. A remote go-to action is similar to an ordinary 
            ' go-to action, but jumps to a destination in another PDF file instead 
            ' of the current file. See Section 8.5.3 'Remote Go-To Actions' in PDF 
            ' Reference Manual for details.
            Try
                Using doc1 As PDFDoc = New PDFDoc(output_path + "bookmark.pdf")
                    doc1.InitSecurityHandler()

                    ' Create file specification (the file referred to by the remote bookmark)
                    Dim file_spec As Obj = doc1.CreateIndirectDict()
                    file_spec.PutName("Type", "Filespec")
                    file_spec.PutString("F", "bookmark.pdf")

                    Dim spec As FileSpec = New FileSpec(file_spec)
                    Dim goto_remote As pdftron.PDF.Action = pdftron.PDF.Action.CreateGotoRemote(spec, 5, True)

                    Dim remoteBookmark1 As Bookmark = Bookmark.Create(doc1, "REMOTE BOOKMARK 1")
                    remoteBookmark1.SetAction(goto_remote)
                    doc1.AddRootBookmark(remoteBookmark1)

                    ' Create another remote bookmark, but this time using the low-level SDF/Cos API.
                    Dim remoteBookmark2 As Bookmark = Bookmark.Create(doc1, "REMOTE BOOKMARK 2")
                    doc1.AddRootBookmark(remoteBookmark2)
                    Dim gotoR As Obj = remoteBookmark2.GetSDFObj().PutDict("A")

                    gotoR.PutName("S", "GoToR")  ' Set action type
                    gotoR.PutBool("NewWindow", True)

                    ' Set the file specification
                    gotoR.Put("F", file_spec)

                    ' Set the destination
                    Dim dest As Obj = gotoR.PutArray("D")
                    dest.PushBackNumber(9) ' Jump to the tenth page. Note that Acrobat indexes pages from 0.
                    dest.PushBackName("Fit") ' Fit the page

                    doc1.Save(output_path + "bookmark_remote.pdf", SDFDoc.SaveOptions.e_linearized)
                End Using
                Console.WriteLine("Done. Result saved in bookmark_remote.pdf")
            Catch e As PDFNetException
                Console.WriteLine(e.Message)
            End Try
            PDFNet.Terminate()
        End Sub

    End Class

End Module