Skip to content

大纲

大纲是 PDF 文档的结构化导航工具,通常显示在文档阅读器的侧边栏或面板上,它通常基于文档中的标题和章节信息自动生成,也可以手动编辑和调整。大纲提供了文档的层次结构,使用户能够更容易地定位和浏览内容,同时可以使用大纲快速导航到文档的不同部分。

展示大纲

PDF 文档每个标题或子标题在大纲树中都是一个节点,节点之间通过分支连接。主标题作为根节点,而子标题则作为根节点的分支,形成了一个树状的结构。

大纲由节点和子节点递归嵌套而成,以层次结构的方式展示文档的组织框架。节点通常表示主要部分,而子节点表示次要部分或章节。

以下是通过递归方式展示 PDF 大纲的示例代码:

java
public ArrayList<CPDFOutline> childOutline() {
    ArrayList<CPDFOutline> outlineList = new ArrayList<>();
    CPDFOutline pdfOutlineRoot = document.getOutlineRoot();
    if (pdfOutlineRoot == null){
        return outlineList;
    }
    CPDFOutline[] outlines = pdfOutlineRoot.getChildList();
    int numberOfOutline = outlines.length;
    for (int i = 0; i < numberOfOutline; i++) {
        outlineList.add(outlines[i]);
    }
    return outlineList;
}
kotlin
fun childOutline(): MutableList<CPDFOutline> {
    val pdfOutlineRoot: CPDFOutline = document.getOutlineRoot() ?: return mutableListOf()
    return if (pdfOutlineRoot.childList.isNotEmpty()) {
        pdfOutlineRoot.childList.toMutableList();
    } else {
        mutableListOf()
    }
}

新增大纲

以下是新增大纲的步骤:

  1. 找到需要新增大纲位置的父大纲
  2. 创建需要新增的大纲
  3. 添加大纲动作,例如跳转到页面
  4. 设置属性

以下是新增大纲的示例代码:

java
// 找到需要新增大纲位置的父大纲
CPDFOutline pdfOutlineRoot = document.getOutlineRoot();
if (pdfOutlineRoot == null){
   return;
}
CPDFOutline insertOutline = pdfOutlineRoot.insertChildAtIndex(0);
// 设置属性 
insertOutline.setTitle("New outline");
// 添加大纲行为,此处为跳转到第一页
int pageIndex = 0;
CPDFDestination destination = new CPDFDestination(pageIndex, 0F, 0, 1F);
insertOutline.setDestination(destination);
kotlin
// 找到需要新增大纲位置的父大纲
val pdfOutlineRoot: CPDFOutline = document.outlineRoot ?: return
pdfOutlineRoot.insertChildAtIndex(0).apply { 
  // 设置属性 
  title = "insert0"
  // 添加大纲行为,此处为跳转到第一页
  destination = CPDFDestination(0, 0F, 0F, 1F)
}

调整大纲顺序

调整大纲顺序,使用函数 CPDFOutline.insertChildAtIndex(index). 在大纲层次结构中移动项目时,您应该保留该项目并首先调用 CPDFOutline.removeFromParent() .

删除大纲

删除目标大纲,删除大纲后目标大纲的子大纲也将一并删除。

以下是删除大纲的示例代码:

java
CPDFOutline.removeFormParent();