大纲(Outline)
福昕 PDF SDK iOS 版通过 Core SDK 提供了 PDF 大纲(书签)的读取、创建、编辑和删除能力。大纲以树形结构组织,每个节点可包含标题、目标位置(Destination)或动作(Action),帮助用户快速定位文档中的内容。
UI Extensions 内置大纲面板
如果您使用的是完整阅读器(UI Extensions),大纲功能已内置在侧边面板中,用户可直接通过面板查看和点击大纲节点跳转到对应页面,无需额外编码。
核心类
| 类 | 说明 |
|---|---|
FSBookmark | 大纲节点,支持获取/设置标题、颜色、样式、目标位置和动作 |
FSDestination | 目标位置,定义跳转页面及缩放方式 |
FSAction | 动作对象,可关联到大纲节点(如 GoTo、URI 等) |
大纲树结构
访问大纲树前,需先通过 [FSPDFDoc getRootBookmark] 获取根节点。根节点是一个抽象节点,不包含标题等数据,仅用于作为树的入口。如果文档不包含大纲,可通过 [FSPDFDoc createRootBookmark] 创建。
从根节点出发,通过 getFirstChild、getNextSibling、getParent 等方法遍历整棵树。
位置常量
| 常量 | 说明 |
|---|---|
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 参考
FSBookmark、FSDestination、FSAction 的完整接口说明请参阅 API 手册。