IRONSOFTWAREHOME

如何在 C# 中使用 IronPDF 添加 PDF 书签和大纲

Curtis Chau
Curtis Chau
Updated: 2026年5月20日

通过 IronPDF,您可以用 C# 在 PDF 文档中添加书签(大纲),创建类似于目录的导航辅助工具。 添加单层或多层书签,提高文档的可用性,帮助用户快速跳转到关键部分。 该功能可在WindowsLinuxmacOS环境中无缝运行。

快速入门:在 C# 中向 PDF 添加书签

在 PDF 文档中添加书签,快速开始使用 IronPDF。 本指南演示了如何加载现有 PDF、添加导航书签并保存更新后的文档。 非常适合希望在 C# 项目中增强 PDF 功能的开发人员。

  1. 1Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf

  2. 2复制并运行这段代码。

    var pdf = new IronPdf.PdfDocument("example.pdf");
    pdf.Bookmarks.AddBookMarkAtEnd("Chapter 1", 1);
    pdf.SaveAs("bookmarked.pdf");
    C#
  3. 3部署到您的生产环境中进行测试

    通过免费试用立即在您的项目中开始使用IronPDF
    arrow pointer

如何在 C# 中使用 PDF 书签?

在Adobe Acrobat Reader中,大纲(也叫书签)显示在左侧边栏,为跳转到文档的关键部分提供了一种方便的方法。 书签具有交互式目录的功能,使读者能够高效地浏览复杂的文档。

using IronPDF,您可以导入 PDF 文档,并对现有大纲执行各种操作,如添加、重新排序、编辑属性和删除书签。 这使您可以完全控制 PDF 文件的组织和结构,类似于您可以 合并或分割 PDFs 以进行文档管理。

提示: 所有页面索引均采用从零开始的索引方式。

如何添加单层书签?

在 IronPDF 中添加书签非常简单。 使用AddBookmarkAtEnd方法,指定书签名称和相应的页面索引。 该功能与其他 PDF 操作(如添加页眉和页脚设置自定义页边距)很好地集成在一起,以创建专业文档。 下面是一个示例:

using IronPdf;

// Create a new PDF or edit an existing document.
PdfDocument pdf = PdfDocument.FromFile("existing.pdf");

// Add a bookmark
pdf.Bookmarks.AddBookMarkAtEnd("NameOfBookmark", 0);

// Add a sub-bookmark
pdf.Bookmarks.AddBookMarkAtEnd("NameOfSubBookmark", 1);

pdf.SaveAs("singleLayerBookmarks.pdf");

AddBookMarkAtStart将书签插入到列表开头。每个书签引用一个特定页面索引,从而可以在文档内实现精确导航。

单层书签文档

如何创建多层书签层次结构?

IronPDF 允许您以树形结构添加书签,这对于保持大型 PDF 文档的可浏览性特别有用。 当在一个 PDF 文档中处理大量不同日期和地点的试卷、销售报告或收据记录时,该功能非常有价值。 结构化书签可以帮助您分层组织复杂的信息,就像您可以创建用于数据收集的 PDF 表单一样。

IPdfBookMark对象。 例如,使用Children.AddBookMarkAtEnd("Date1", 0)为"考试"书签添加子书签。 这种嵌套结构创建了一个层次组织,反映了文档的逻辑流程。 以下代码演示了这一概念:

using IronPdf;

// Load existing PDF document
PdfDocument pdf = PdfDocument.FromFile("examinationPaper.pdf");

// Assign IPdfBookMark object to a variable
var mainBookmark = pdf.Bookmarks.AddBookMarkAtEnd("Examination", 0);

// Add bookmark for days
var date1Bookmark = mainBookmark.Children.AddBookMarkAtStart("Date1", 1);

// Add bookmark for type of test
var paperBookmark = date1Bookmark.Children.AddBookMarkAtStart("Paper", 1);
paperBookmark.Children.AddBookMarkAtEnd("PersonA", 3);
paperBookmark.Children.AddBookMarkAtEnd("PersonB", 4);

// Add bookmark for days
var date2Bookmark = mainBookmark.Children.AddBookMarkAtEnd("Date2", 5);

// Add bookmark for type of test
var computerBookmark = date2Bookmark.Children.AddBookMarkAtStart("Computer", 5);
computerBookmark.Children.AddBookMarkAtEnd("PersonC", 6);
computerBookmark.Children.AddBookMarkAtEnd("PersonD", 7);

pdf.SaveAs("multiLayerBookmarks.pdf");

在处理需要详细组织的复杂文档时,这种分层方法尤为重要。 嵌套结构允许用户展开和折叠书签部分,即使在数百页的文档中也能直观地进行导航。

多层书签文档

如何从HTML标题自动生成书签?

在将HTML渲染为PDF时,IronPDF可以根据文档的标题结构(h1-h6)或任何自定义CSS选择器自动构建层次书签大纲。 这消除了每个部分手动调用AddBookMarkAtEnd的需要。

在调用AutoBookmarksFromHeadings属性以启用该功能:

using IronPdf;

var renderer = new ChromePdfRenderer();

// Master switch: auto-generate bookmarks from HTML headings (h1-h6) during rendering
renderer.RenderingOptions.AutoBookmarksFromHeadings = true;

var html = @"
<h1>Annual Report</h1>
<h2>Executive Summary</h2>
<p>Overview of the year.</p>
<h2>Financial Results</h2>
<h3>Revenue</h3>
<h3>Expenses</h3>
<h2>Outlook</h2>
<p>Looking forward.</p>";

var pdf = renderer.RenderHtmlAsPdf(html);

// pdf.Bookmarks is already populated with a hierarchical outline matching the heading structure
pdf.SaveAs("auto-bookmarked.pdf");

以下属性控制哪些元素会被书签化:

  • AutoBookmarksFromHeadings (bool, 默认false):开启功能。 将IronPDF设置为true时,就会自动从HTML标题构建书签大纲。
  • AutoBookmarkMinHeadingLevel (int, 默认1):从最高层级的标题开始。 设置为1以包含h1(文档顶部)。
  • AutoBookmarkMaxHeadingLevel (int, 默认6):包含的最深的标题级别。 设置为3以只书签化h1、h2和h3 - 忽略h4至h6。
  • AutoBookmarkCssSelectors (string[], 默认null):使用自定义CSS选择器代替标题标签。 例如:"[data-bookmark]"

自定义标题级别和CSS选择器

仅限制顶级标题为书签:

renderer.RenderingOptions.AutoBookmarksFromHeadings = true;
renderer.RenderingOptions.AutoBookmarkMaxHeadingLevel = 3;

要为自定义元素添加书签而不是标题,请提供CSS选择器:

renderer.RenderingOptions.AutoBookmarksFromHeadings = true;
renderer.RenderingOptions.AutoBookmarkCssSelectors = new[]
{
    "h1",
    ".chapter-title",
    "[data-bookmark]"
};

如何查询HTML元素的渲染位置?

渲染后,IronPDF可以准确报告某个给定HTML元素所处的页面和坐标。 这取代了先渲染、提取文本然后手动搜索页面的旧解决方法。

在渲染前在GetElementLocations

using IronPdf;
using System;

var renderer = new ChromePdfRenderer();

// Configure which elements should be queryable after rendering
renderer.RenderingOptions.ElementQuerySelectors = new[] { "h1", ".kpi-card" };

var html = @"
<h1>Q4 Dashboard</h1>
<div class='kpi-card'>Revenue: $1.2M</div>
<div class='kpi-card'>Growth: 18%</div>
<h1>Q3 Comparison</h1>
<div class='kpi-card'>Previous: $1.0M</div>";

var pdf = renderer.RenderHtmlAsPdf(html);

// Retrieve the rendered page location of each matched element
foreach (var location in pdf.GetElementLocations())
{
    Console.WriteLine($"'{location.Text}' on page {location.PageIndex + 1} " +
                      $"at ({location.Rectangle.X}, {location.Rectangle.Y})");
}

pdf.SaveAs("dashboard.pdf");

List<RenderedElementLocation>

属性类型它告诉您
Textstring元素内部的文本。
PageIndexint元素最终位于哪个页面(从0开始)。
RectangleIronSoftware.Drawing.Rectangle元素在页面上的位置,以PDF点(1/72英寸)为单位。 起点为左下角。
ElementIndexint元素在原始HTML中的顺序(从0开始)。
提示: 结果在第一次调用时缓存。 如果在渲染之后修改文档的注释,并需要新的坐标,请在下次ResetElementLocationCache进行强制重新扫描。

将自动书签与元素位置跟踪结合使用

自动书签和元素位置查询可以在单次渲染中结合使用。 例如,从h1/h2标题生成大纲,同时跟踪.invoice-total元素的页面位置:

using IronPdf;
using System;

var renderer = new ChromePdfRenderer();

// Auto-generate bookmarks from top-level headings only
renderer.RenderingOptions.AutoBookmarksFromHeadings = true;
renderer.RenderingOptions.AutoBookmarkMaxHeadingLevel = 2;

// Also track the page location of invoice totals after rendering
renderer.RenderingOptions.ElementQuerySelectors = new[] { ".invoice-total" };

var html = @"
<h1>Invoice #2026-001</h1>
<h2>Line Items</h2>
<p>Services rendered for Q1.</p>
<p class='invoice-total'>Subtotal: $4,500.00</p>
<h1>Invoice #2026-002</h1>
<h2>Line Items</h2>
<p>Consulting hours for Q2.</p>
<p class='invoice-total'>Subtotal: $7,200.00</p>";

var pdf = renderer.RenderHtmlAsPdf(html);

// Bookmarks are populated automatically; locations can be queried after rendering
foreach (var location in pdf.GetElementLocations())
{
    Console.WriteLine($"{location.Text} appears on page {location.PageIndex + 1}");
}

pdf.SaveAs("invoices.pdf");

如何检索和浏览现有书签?

IronPDF 可轻松检索和查看 PDF 文档中的书签。 通过书签树导航变得简单,并无缝访问不同部分。 在处理需要编辑的现有 PDF 文件或在书签部分实现搜索和替换文本等功能时,该功能至关重要。 请看上面的多层书签文档示例

"考试"书签有一个Children属性指向"Date1"和"Date2"书签。 "Date1"书签有一个NextBookmark属性指向"Date2"书签。 此外,"Date1"书签还有一个Children属性,包含"Paper"书签。 这种相互关联的结构允许复杂的导航模式和文档组织。

要检索打开的PDF文档中的所有书签,请使用GetAllBookmarks方法。 这提供了所有书签的综合列表,使您能够分析和利用书签结构:

using IronPdf;

// Load existing PDF document
PdfDocument pdf = PdfDocument.FromFile("multiLayerBookmarks.pdf");

// Retrieve bookmarks list
var mainBookmark = pdf.Bookmarks.GetAllBookmarks();

合并两个书签名称相同的 PDF 文档可能会破坏书签列表。

警告: 仅支持从页面索引创建的书签。 来自其他PDF元素的书签将其页面索引值设置为-1

了解如何在以下文章中从HTML生成PDF时创建目录:"使用IronPDF创建目录。"

准备好看看您还能做些什么吗? 在这里查看我们的教程页面:组织PDF

常见问题解答

如何用 C# 在 PDF 文档中添加书签?

IronPDF 可让您用 C# 在 PDF 文档中轻松添加书签。您可以使用 AddBookmarkAtEnd 方法,通过指定书签名称和页面索引来添加单层书签。例如:pdf.Bookmarks.AddBookMarkAtEnd("Chapter 1",1)。这可以创建类似于目录的导航辅助工具,帮助用户快速跳转到关键章节。

AddBookmarkAtEnd 和 AddBookmarkAtStart 方法有什么区别?

IronPDF 提供了两种书签放置方法。AddBookMarkAtEnd 方法会将书签添加到现有书签列表的末尾,而 AddBookMarkAtStart 则会在列表的开头插入书签。这两种方法都会引用特定的页面索引,以便在文档中进行精确导航。

能否创建多层次的分级书签结构?

是的,IronPDF 允许您以树形结构创建多层书签层次结构。这对于组织具有嵌套部分的复杂文档特别有用,类似于您如何组织具有章节和子章节的详细目录。

书签功能是否兼容不同的操作系统?

IronPDF 的书签功能可在 Windows、Linux 和 macOS 环境下无缝运行。无论您的操作系统如何,您都可以添加、编辑和管理 PDF 书签,确保在不同平台上实现一致的功能。

我可以对现有 PDF 书签执行哪些操作?

using IronPDF,您可以对现有的 PDF 大纲执行各种操作,包括添加新书签、重新排列书签顺序、编辑书签属性以及删除不需要的书签。这样,您就可以完全控制 PDF 文件的组织和结构。

用户打开 PDF 时如何显示书签?

在 Adobe Acrobat Reader 和类似的 PDF 阅读器中,使用 IronPDF 创建的书签会在左侧边栏显示为轮廓。它们具有交互式目录的功能,允许读者通过点击跳转到特定部分来高效地浏览复杂的文档。

Does IronPDF support bookmark manipulation in existing PDF documents?

Yes, IronPDF allows for various operations on existing PDF outlines such as adding, reordering, editing properties, and deleting bookmarks, giving you full control over the PDF document's structure.

What environments does IronPDF support for adding bookmarks to PDFs?

IronPDF supports adding bookmarks to PDFs on Windows, Linux, and macOS environments, providing cross-platform compatibility for developers.

Can IronPDF track the rendered locations of HTML elements in a PDF?

IronPDF can report the rendered page and coordinates of specific HTML elements in a PDF using the `GetElementLocations` method, helping developers precisely locate elements within the PDF document.

What are the key steps to get started with adding bookmarks in IronPDF?

The key steps to add bookmarks in IronPDF include downloading IronPDF from NuGet, loading or rendering a new PDF document, adding single or multi-layer bookmarks, and saving the updated document.

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

准备开始了吗?

Nuget Downloads 21,062,892版本:2026.9刚刚发布

免费获取

30天试用密钥 即刻获取。

bullet_checked无需信用卡或创建账户
bullet_test在生产环境中测试
且无水印
bullet_calendar30天完全
功能性产品
bullet_support试用期间提供
24/5技术支持
立即获取您的免费30 天试用密钥
无需信用卡或创建账户
C# 用于 PDF 的 NuGet 库
通过 NuGet 安装

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解决方案资源管理器中,右键点击引用,管理 NuGet 包
  2. 选择浏览并搜索 “IronPDF”
  3. 选择包并安装
C# PDF DLL
下载 DLL

版本: 2026.9

或在此处下载 Windows 安装程序。

  1. 下载并解压 IronPDF 到您的解决方案目录中的 ~/Libs 之类的位置
  2. 在 Visual Studio 解决方案资源管理器中,右键点击引用。选择浏览,“IronPDF.dll”

$999

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

OR
bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户
C# 用于 PDF 的 NuGet 库
通过 NuGet 安装

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解决方案资源管理器中,右键点击引用,管理 NuGet 包
  2. 选择浏览并搜索 “IronPDF”
  3. 选择包并安装
C# PDF DLL
下载 DLL

版本: 2026.9

或在此处下载 Windows 安装程序。

  1. 下载并解压 IronPDF 到您的解决方案目录中的 ~/Libs 之类的位置
  2. 在 Visual Studio 解决方案资源管理器中,右键点击引用。选择浏览,“IronPDF.dll”

$999