如何在 PDF 中添加书签:3 种简单方法

电子书、技术手册、报告、白皮书等长篇 PDF 往往页数众多,查找某个章节需要反复滚动,既费时又影响阅读体验。这正是 PDF 书签的价值所在。

PDF 书签是交互式导航点,用户点击即可跳转到指定章节、小节、图表或页面。无论是处理商业报告、学术论文,还是技术文档,掌握在 PDF 中创建书签的方法,都能显著提升文档的可用性。

本文将分别介绍适合普通用户的手动方法,以及适合开发者的代码实现方式。

PDF 书签究竟是什么?

PDF 书签(也称为“大纲”)是存储在 PDF 文件内部的交互式大纲树。每个书签都链接到目标页面、位置或视图设置。书签支持层级嵌套,因此主章节下可以包含多个子章节书签。

PDF 书签的优点:

  • 在大型文档中实现一键快速导航
  • 在侧边栏面板中清晰呈现文档结构
  • 支持多级嵌套,适合复杂内容
  • 兼容桌面端和移动端的大多数 PDF 阅读器
  • 无需额外外部文件,所有数据都保存在 PDF 内部

使用 Adobe Acrobat Pro 手动创建 PDF 书签

Adobe Acrobat Pro 是 PDF 编辑领域的行业标准工具,提供了完善的书签功能。

操作步骤:

  1. 在 Adobe Acrobat Pro 中打开目标 PDF;
  2. 单击左侧的“书签”图标(形似缎带),调出书签面板;
  3. 定位到需要设置书签的页面与段落位置;
  4. 在书签面板顶部点击“新建书签”按钮(带加号的页面图标);
  5. 输入清晰易懂的书签名称,按下回车完成创建。

Adobe 中用于创建 PDF 书签的“新建书签”图标。

Acrobat 实用技巧:

如果在创建书签前先选中文本,Acrobat 会自动将选中文字作为书签标题。这样既能节省时间,也能保证书签与文档标题一致。

开发者指南:通过代码向 PDF 添加书签

当需要处理数百个 PDF 文件,或自动化文档生成流程时,手动向 PDF 添加书签会变得非常低效。开发者可以在创建或处理 PDF 文档时,通过代码插入书签。

推荐方案:Free Spire.PDF for .NET

Free Spire.PDF for .NET 是一个独立的 .NET 库,使开发者能够在任何 .NET 应用程序中创建、写入、编辑、转换和读取 PDF 文件。它支持通过代码添加和修改书签

以下是如何使用 C# 在 PDF 中插入书签:

1. 安装 Free Spire.PDF for .NET

首先,通过 NuGet 包管理器将免费库添加到 .NET 项目:

1
PM> Install-Package FreeSpire.PDF

2. 引入所需命名空间

这些命名空间用于访问图形、动作触发器和书签集合对象:

1
2
3
4
5
6
using System.Drawing;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Actions;
using Spire.Pdf.Bookmarks;
using Spire.Pdf.General;

3. 添加书签的完整 C# 示例

以下代码演示如何:

  • 加载现有 PDF
  • 添加一级父书签
  • 添加嵌套子书签
  • 设置目标页面、位置、书签文字颜色和字体样式
  • 导出修改后的 PDF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
namespace AddBookmark
{
class Program
{
static void Main(string[] args)
{
// 创建 PdfDocument 对象
PdfDocument pdf = new PdfDocument();

// 加载源 PDF 文件
pdf.LoadFromFile("文档示例.pdf");

// 获取第一页
PdfPageBase page1 = pdf.Pages[0];

// 添加一个父书签
PdfBookmark execSummary = pdf.Bookmarks.Add("演变过程回顾");
PdfDestination dest1 = new PdfDestination(page1, new PointF(230, 100));
execSummary.Action = new PdfGoToAction(dest1);
execSummary.Color = new PdfRGBColor(Color.Black);
execSummary.DisplayStyle = PdfTextStyle.Bold;

// 在指定位置添加三个子书签
PdfBookmark child1 = execSummary.Add("重要提示");
PdfDestination childDest1 = new PdfDestination(page1, new PointF(50, 140));
child1.Action = new PdfGoToAction(childDest1);
child1.Color = new PdfRGBColor(Color.Brown);
child1.DisplayStyle = PdfTextStyle.Italic;

PdfBookmark child2 = execSummary.Add("数据摘要");
PdfDestination childDest2 = new PdfDestination(page1, new PointF(50, 370));
child2.Action = new PdfGoToAction(childDest2);
child2.Color = new PdfRGBColor(Color.Brown);
child2.DisplayStyle = PdfTextStyle.Italic;

PdfBookmark child3 = execSummary.Add("变动情况");
PdfDestination childDest3 = new PdfDestination(page1, new PointF(280, 140));
child3.Action = new PdfGoToAction(childDest3);
child3.Color = new PdfRGBColor(Color.Brown);
child3.DisplayStyle = PdfTextStyle.Italic;

// 获取第二页
PdfPageBase page2 = pdf.Pages[1];

// 再添加一个父书签
PdfBookmark deliverables = pdf.Bookmarks.Add("调查分析");
PdfDestination dest2 = new PdfDestination(page2, new PointF(250, 430));
deliverables.Action = new PdfGoToAction(dest2);
deliverables.Color = new PdfRGBColor(Color.Black);
deliverables.DisplayStyle = PdfTextStyle.Bold;

// 保存更新后的文档
pdf.SaveToFile("PDF书签.pdf");
pdf.Close();
}
}
}

关键 API 参考:

  • pdf.Bookmarks.Add():向文档添加父书签
  • bookmark.Add():向现有父书签下添加子书签
  • new PdfDestination(page, location):定义目标页面和位置
  • new PdfGoToAction(destination):创建跳转到指定目标的动作

实用提示:要确定 PDF 中精确的文本位置,Free Spire.PDF 支持获取 PDF 中文本或图像的坐标

添加后的 PDF 书签效果:

在 C# 中以编程方式生成的父书签和子书签

Free Spire.PDF 方案优势

  • 支持自动化批量处理,适合成百上千份 PDF 批量加工;
  • 使用灵活,既可以给已有 PDF 追加书签,也能新建 PDF 并直接生成书签;
  • 高度自定义,代码控制跳转位置、书签颜色、字体样式、层级结构;
  • 免费商用,业务项目使用无需支付授权费用(需注意限制);
  • 适配多场景,支持ASP.NET、.NET Core 等各类.NET 应用。

从 Microsoft Word 直接导出带书签的 PDF

如果你的原始文档是 Word,无需后期手动补书签,导出 PDF 时即可自动生成层级书签

实现原理

Word 生成 PDF 时,会分析文档中的样式定义,并将内置的标题样式(标题 1、标题 2、标题 3)映射为层级书签:

  • 标题 1 → PDF 一级书签
  • 标题 2 → PDF 二级嵌套书签
  • 标题 3 → PDF 三级嵌套书签

操作步骤:

  • 给 Word 文档内容套用内置的标题样式;
  • 点击“文件 > 另存为”,保存类型选择 PDF;
  • 点击保存窗口中的“选项”,勾选“创建书签时使用:标题”;

Word 中用于生成书签的关键选项对话框。

  • 确认保存,输出的 PDF 就会自动生成与标题对应的完整书签树。

从 Word 标题生成的 PDF 书签。

文章小结

书签能够让冗长复杂的 PDF 文档变得条理清晰、查阅便捷,可以根据你的实际场景选择最合适的实现方式:

  • Adobe Acrobat Pro:少量文档,需要可视化手动调整书签;
  • Free Spire.PDF 代码方案:批量处理、系统自动化生成 PDF;
  • Microsoft Word 导出:源文件为 Word,希望一键自动生成书签。

无论选择哪种方式,设置合理的书签,都可以显著优化文档阅读体验。一份拥有清晰书签的 PDF,也体现出文档制作的专业性,能给阅读者带来更好的使用感受。

常见问题解答

问:书签和超链接一样吗?

答: 不一样。超链接嵌入正文文本内,大多带有下划线;书签存放在侧边栏大纲面板。二者虽然都支持跳转,但书签提供完整的文档结构总览,超链接多用于正文局部跳转。

问:PDF 书签在所有阅读器都能正常使用吗?

答: 可以。书签属于 PDF 标准规范,大多数主流 PDF 阅读器如 Adobe Acrobat、福昕阅读器、Mac 预览、移动端各类 PDF 工具均支持书签功能。

问:书签会显著增加 PDF 文件大小吗?

答: **几乎不会。**书签本质是记录标题、页码、跳转属性的小型文本索引。哪怕有成千上万条嵌套书签,对比图片、嵌入字体,对文件大小的影响微乎其微。

问:没有 Adobe Acrobat,能不能编辑、删除 PDF 原有书签?

答: 可以。借助 Free Spire.PDF 开发库,访问 pdf.Bookmarks 书签集合,调用 bookmarks.RemoveAt(index) 按索引删除单条书签,或调用 bookmarks.Clear() 清空全部书签,无需购买付费桌面软件。