Skip to content

Outline ​

Foxit PDF SDK for iOS provides PDF outline (bookmark) read, create, edit, and delete via Core SDK. Outlines form a tree: each node can have a title, destination, or action for navigation.

UI Extensions outline panel

With the full reader (UI Extensions), the outline panel lets users browse and jump to nodes—no extra code required.

Core classes ​

ClassDescription
FSBookmarkOutline node: title, color, style, destination, action
FSDestinationTarget page and zoom
FSActionAction on a node (GoTo, URI, etc.)

Outline tree ​

Get the root with [FSPDFDoc getRootBookmark]. The root is abstract (no title); it is the tree entry. If the document has no outline, use [FSPDFDoc createRootBookmark].

Traverse with getFirstChild, getNextSibling, getParent, and related APIs.

Position constants ​

ConstantDescription
FSBookmarkPosFirstChildFirst child
FSBookmarkPosLastChildLast child
FSBookmarkPosPrevSiblingPrevious sibling
FSBookmarkPosNextSiblingNext sibling
FSBookmarkPosFirstSiblingFirst sibling
FSBookmarkPosLastSiblingLast sibling

Style constants ​

ConstantDescription
FSBookmarkStyleNormalNormal
FSBookmarkStyleItalicItalic
FSBookmarkStyleBoldBold

Example: depth-first traversal ​

objc
#import <FoxitRDK/FSPDFObjC.h>

FSPDFDoc *doc = [[FSPDFDoc alloc] initWithPath:@"path/to/Sample.pdf"];
[doc load:nil];

FSBookmark *root = [doc getRootBookmark];
if (root && ![root isEmpty]) {
    [self traverseBookmarks:[root getFirstChild] doc:doc];
}

- (void)traverseBookmarks:(FSBookmark *)bookmark doc:(FSPDFDoc *)doc {
    if (!bookmark || [bookmark isEmpty]) return;

    NSString *title = [bookmark getTitle];
    FSDestination *dest = [bookmark getDestination];
    if (dest && ![dest isEmpty]) {
        int pageIndex = [dest getPageIndex:doc];
        NSLog(@"书签: %@, 页码: %d", title, pageIndex);
    }

    // Children
    if ([bookmark hasChild]) {
        [self traverseBookmarks:[bookmark getFirstChild] doc:doc];
    }
    // Siblings
    [self traverseBookmarks:[bookmark getNextSibling] doc:doc];
}

Example: create outline nodes ​

objc
FSPDFDoc *doc = [[FSPDFDoc alloc] initWithPath:@"path/to/Sample.pdf"];
[doc load:nil];

FSBookmark *root = [doc getRootBookmark];
if (!root || [root isEmpty]) {
    root = [doc createRootBookmark];
}

// Child under root
FSBookmark *chapter1 = [root insert:@"第一章 概述" position:FSBookmarkPosLastChild];
FSDestination *dest = [FSDestination createFitPage:doc pageIndex:0];
[chapter1 setDestination:dest];
[chapter1 setColor:0x0000FF];
[chapter1 setStyle:FSBookmarkStyleBold];

// Child under chapter
FSBookmark *section1 = [chapter1 insert:@"1.1 背景" position:FSBookmarkPosLastChild];
[section1 setDestination:[FSDestination createXYZ:doc pageIndex:0
                                             left:0 top:500 zoom:1.0f]];

[doc saveAs:@"path/to/output.pdf" saveFlags:FSPDFDocSaveFlagNormal];

API reference

See the API reference for FSBookmark, FSDestination, and FSAction.