Skip to content

大纲(Outline)

福昕 PDF SDK iOS 版通过 Core SDK 提供了 PDF 大纲(书签)的读取、创建、编辑和删除能力。大纲以树形结构组织,每个节点可包含标题、目标位置(Destination)或动作(Action),帮助用户快速定位文档中的内容。

UI Extensions 内置大纲面板

如果您使用的是完整阅读器(UI Extensions),大纲功能已内置在侧边面板中,用户可直接通过面板查看和点击大纲节点跳转到对应页面,无需额外编码。

核心类

说明
FSBookmark大纲节点,支持获取/设置标题、颜色、样式、目标位置和动作
FSDestination目标位置,定义跳转页面及缩放方式
FSAction动作对象,可关联到大纲节点(如 GoTo、URI 等)

大纲树结构

访问大纲树前,需先通过 [FSPDFDoc getRootBookmark] 获取根节点。根节点是一个抽象节点,不包含标题等数据,仅用于作为树的入口。如果文档不包含大纲,可通过 [FSPDFDoc createRootBookmark] 创建。

从根节点出发,通过 getFirstChildgetNextSiblinggetParent 等方法遍历整棵树。

位置常量

常量说明
FSBookmarkPosFirstChild作为第一个子节点
FSBookmarkPosLastChild作为最后一个子节点
FSBookmarkPosPrevSibling作为前一个同级节点
FSBookmarkPosNextSibling作为后一个同级节点
FSBookmarkPosFirstSibling作为同级第一个节点
FSBookmarkPosLastSibling作为同级最后一个节点

样式常量

常量说明
FSBookmarkStyleNormal正常
FSBookmarkStyleItalic斜体
FSBookmarkStyleBold粗体

示例:深度优先遍历大纲树

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

    // 递归遍历子节点
    if ([bookmark hasChild]) {
        [self traverseBookmarks:[bookmark getFirstChild] doc:doc];
    }
    // 遍历同级节点
    [self traverseBookmarks:[bookmark getNextSibling] doc:doc];
}

示例:创建大纲节点

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

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

// 在根节点下插入子节点
FSBookmark *chapter1 = [root insert:@"第一章 概述" position:FSBookmarkPosLastChild];
FSDestination *dest = [FSDestination createFitPage:doc pageIndex:0];
[chapter1 setDestination:dest];
[chapter1 setColor:0x0000FF];
[chapter1 setStyle:FSBookmarkStyleBold];

// 在第一章下插入子节点
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 参考

FSBookmarkFSDestinationFSAction 的完整接口说明请参阅 API 手册