Skip to content

大纲

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

展示大纲

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

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

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

C#
static private void TraverseOutline(List<CPDFOutline> outlineList)
{
	foreach (var outline in outlineList)
	{
        // 打印缩进,每一层嵌套增加4个空格
		for (var i = 0; i < outlineCounter; i++)
		{
			Console.Write("    ");
		} 
        // 打印大纲标题
		Console.Write("-> " + outline.Title + "\n"); 
        // 增加大纲计数
		outlineNumber++; 
        // 获取当前大纲的子大纲列表
		var childList = outline.ChildList;
		if (childList != null && childList.Count != 0)
		{
            // 如果有子大纲,增加缩进计数
			outlineCounter++; 
            // 递归遍历子大纲
			TraverseOutline(childList);
		}
		else
		{ 
            //当前层级遍历完成,回到上级大纲
			if (outlineList.IndexOf(outline) + 1 == outlineList.Count)
			{
                // 如果当前大纲是当前层级的最后一个,减少缩进计数
				outlineCounter--;
			}	
		}
	}
}

新增大纲

以下是新增大纲的步骤:

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

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

C#
 // 找到需要新增大纲位置的父大纲
 CPDFOutline outline = document.GetOutlineRoot();
 // 创建需要新增的大纲
 CPDFOutline childOutline = null;
 outline.InsertChildAtIndex(document, 0, ref childOutline);
 // 添加大纲行为,此处为跳转到第一页
 CPDFGoToAction gotoAction = new CPDFGoToAction();
 CPDFDestination dest = new CPDFDestination();
 dest.PageIndex = 0;
 gotoAction.SetDestination(document, dest);
 childOutline.SetAction(gotoAction);
 // 设置属性 
 childOutline.SetTitle("New outline");

调整大纲顺序

将某一大纲移动为目标大纲的子大纲。

以下是移动大纲的步骤:

  1. 获取目标大纲的大纲对象
  2. 指定标大纲下的子大纲位置序号,将需要移动的大纲移动到对应位置。

以下是移动大纲的示例代码:

C#
// 获取目标大纲的大纲对象
CPDFOutline targetOutline = document.GetOutlineList()[1];
// 指定需要移动到的子大纲序号,将需要移动的大纲移动到指定位置。
targetOutline.MoveChildAtIndex(document, outline, targetOutline.ChildList.Count);

删除大纲

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

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

C#
CPDFOutline outline = document.GetOutlineList()[0];
outline.RemoveFromParent(document);