Guides
大纲
大纲是 PDF 文档的结构化导航工具,通常显示在阅读器的侧边栏或面板中。它可以基于文档中的标题和章节信息自动生成,也可以手动编辑和调整,用于快速定位和浏览文档的不同部分。
获取大纲
PDF 文档中的每个标题或子标题都可以作为大纲树中的一个节点。主标题通常作为根节点,子标题作为子节点,形成树状层级结构。
以下示例通过递归方式获取整棵 PDF 大纲树中的所有节点:
java
public ArrayList<CPDFOutline> getAllOutlines() {
ArrayList<CPDFOutline> outlineList = new ArrayList<>();
CPDFOutline pdfOutlineRoot = document.getOutlineRoot();
if (pdfOutlineRoot == null) {
return outlineList;
}
collectChildOutlines(pdfOutlineRoot, outlineList);
return outlineList;
}
private void collectChildOutlines(CPDFOutline parent, ArrayList<CPDFOutline> result) {
CPDFOutline[] childOutlines = parent.getChildList();
for (CPDFOutline childOutline : childOutlines) {
result.add(childOutline);
collectChildOutlines(childOutline, result);
}
}kotlin
fun getAllOutlines(): MutableList<CPDFOutline> {
val pdfOutlineRoot: CPDFOutline = document.getOutlineRoot() ?: return mutableListOf()
val outlineList = mutableListOf<CPDFOutline>()
collectChildOutlines(pdfOutlineRoot, outlineList)
return outlineList
}
private fun collectChildOutlines(parent: CPDFOutline, result: MutableList<CPDFOutline>) {
parent.childList.forEach { childOutline ->
result.add(childOutline)
collectChildOutlines(childOutline, result)
}
}新增大纲
以下是新增大纲的步骤:
- 获取目标父大纲,如果文档没有根大纲则先创建根大纲
- 创建需要新增的大纲
- 添加大纲动作,例如跳转到页面
- 设置属性
以下是新增大纲的示例代码:
java
// 获取根大纲;如果不存在则先创建
CPDFOutline pdfOutlineRoot = document.getOutlineRoot();
if (pdfOutlineRoot == null) {
pdfOutlineRoot = document.newOutlineRoot();
}
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.getOutlineRoot() ?: document.newOutlineRoot()
pdfOutlineRoot.insertChildAtIndex(0).apply {
// 设置属性
title = "insert0"
// 添加大纲行为,此处为跳转到第一页
destination = CPDFDestination(0, 0F, 0F, 1F)
}调整大纲顺序
调整大纲顺序时,需要先确定要移动的大纲节点、目标父节点,以及插入位置索引。
java
// 目标父节点
CPDFOutline newParentOutline;
// 将当前大纲节点移动到目标父节点的 insertIndex 位置
outline.moveTo(newParentOutline, insertIndex);删除大纲
删除目标大纲,删除大纲后目标大纲的子大纲也将一并删除。
以下示例展示删除大纲的调用方式:
java
outline.removeFormParent();