如何添加目录

This article was translated from English: Does it need improvement?
Translated
View the article in English

查克尼特·宾

目录(技术选择委员会)像是一张地图,帮助读者浏览PDF文档的内容。 它通常出现在开头,并列出PDF的主要部分或章节以及每个部分开始的页码。 这使得读者可以快速找到并跳转到文档的特定部分,从而更容易获取他们需要的信息。

IronPDF 提供了一个功能,可以创建一个包含指向 'h1'、'h2'、'h3'、'h4'、'h5' 和 'h6' 元素的超链接的目录。 此目录的默认样式不会与HTML内容中的其他样式冲突。

开始使用IronPDF

立即在您的项目中开始使用IronPDF,并享受免费试用。

第一步:
green arrow pointer



添加目录示例

使用TableOfContents属性来启用在输出PDF文档中创建目录。 此属性可分配给三种TableOfContentsTypes之一,具体描述如下:

  • 无:不创建目录
  • 基础:创建一个不带页码的目录
  • WithPageNumbers:创建带有页码的目录

    要更好地理解这个功能,您可以下载下面的示例 HTML 文件:

  • 下载 HTML 示例文件

代码

:path=/static-assets/pdf/content-code-examples/how-to/table-of-contents.cs
using IronPdf;
using System.IO;

// Instantiate Renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();

// Configure render options
renderer.RenderingOptions = new ChromePdfRenderOptions
{
    // Enable table of content feature
    TableOfContents = TableOfContentsTypes.WithPageNumbers,
};

PdfDocument pdf = renderer.RenderHtmlFileAsPdf("tableOfContent.html");

pdf.SaveAs("tableOfContents.pdf");
Imports IronPdf
Imports System.IO

' Instantiate Renderer
Private renderer As New ChromePdfRenderer()

' Configure render options
renderer.RenderingOptions = New ChromePdfRenderOptions With {.TableOfContents = TableOfContentsTypes.WithPageNumbers}

Dim pdf As PdfDocument = renderer.RenderHtmlFileAsPdf("tableOfContent.html")

pdf.SaveAs("tableOfContents.pdf")
VB   C#

输出 PDF

创建的目录将包含指向每个 "h1"、"h2"、"h3"、"h4"、"h5 "和 "h6 "的超链接。

请注意
在文档上使用 Merge 方法会破坏目录的超链接。


目录在PDF上的放置

  1. 确保HTML文档具有正确的标题标签。(h1 至 h6).

  2. 可以选择在您希望目录出现的位置插入一个div。 如果没有提供下面的 div,IronPDF 将在开头插入目录。
    <div id="ironpdf-toc"></div>
    <div id="ironpdf-toc"></div>
HTML
  1. 在渲染选项中选择渲染有页码或无页码的目录。

设置目录样式

目录可以通过使用CSS来设置样式,方法是针对定义目录样式的各种CSS选择器。

此外,样式修改是通过使用 CustomCssUrl 属性完成的。 让我们首先下载一个包含下面目录原始样式的CSS文件。

  • 下载自定义 CSS 文件

    在继续之前
    目前不建议在样式目录时覆写 page-break-before 和 page-break-after 属性,因为这将破坏页码计算。 当前的实现要求目录与其他文档内容分开放置在不同的页面上。

:path=/static-assets/pdf/content-code-examples/how-to/table-of-contents-overwrite-styling.cs
using IronPdf;
using System.IO;

// Instantiate Renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();

// Configure render options
renderer.RenderingOptions = new ChromePdfRenderOptions
{
    // Enable table of content feature
    TableOfContents = TableOfContentsTypes.WithPageNumbers,
    CustomCssUrl = "./custom.css"
};

// Read HTML text from file
string html = File.ReadAllText("tableOfContent.html");
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

pdf.SaveAs("tableOfContents.pdf");
Imports IronPdf
Imports System.IO

' Instantiate Renderer
Private renderer As New ChromePdfRenderer()

' Configure render options
renderer.RenderingOptions = New ChromePdfRenderOptions With {
	.TableOfContents = TableOfContentsTypes.WithPageNumbers,
	.CustomCssUrl = "./custom.css"
}

' Read HTML text from file
Dim html As String = File.ReadAllText("tableOfContent.html")
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)

pdf.SaveAs("tableOfContents.pdf")
VB   C#

样式标题

使用 'ironpdf-toc ul li.h1' 选择器对目录中的 H1 标题应用不同的样式。 将'h1'替换为'h2'到'h6',以更改每个相应标题的样式。

#ironpdf-toc ul li.h1 {
    font-style: italic;
    font-weight: bold;
}
样式标题

字体系列

通过使用'#ironpdf-toc li .title'和'#ironpdf-toc li .page'选择器,可以覆盖目录的字体家族。 让我们使用'草书'字体作为标题,并使用@font-face属性来使用自定义的'草书'字体。柠檬'字体由Eduardo Tunni设计。

#ironpdf-toc li .title {
    order: 1;
    font-family: cursive;
}

@font-face {
    font-family: 'lemon';
    src: url('Lemon-Regular.ttf')
}

#ironpdf-toc li .page {
    order: 3;
    font-family: 'lemon', sans-serif;
}
设置自定义字体系列

缩进

可以使用“:root”选择器控制缩进。 此值确定每个标题级别的缩进量。(h1, h2, ...)在目录中。 可以根据需要增加缩进,或者将缩进值设为0以不进行缩进。

:root {
    --indent-length: 25px;
}
设置自定义缩进

点线

删除标题标题和页码之间的虚线。 在原始样式中,第二个参数是“currentcolor 1px”。 将其更改为“transparent 1px”以去除点。 在这个选择器中,新样式将完全覆盖旧样式,而不仅仅是添加到它上面,因此指定其他属性也很重要。

#ironpdf-toc li::after {
    background-image: radial-gradient(circle, transparent 1px, transparent 1.5px);
    background-position: bottom;
    background-size: 1ex 4.5px;
    background-repeat: space no-repeat;
    content: "";
    flex-grow: 1;
    height: 1em;
    order: 2;
}
删除圆点
Chaknith related to 点线

查克尼特·宾

软件工程师

Chaknith 是开发者中的福尔摩斯。他第一次意识到自己可能在软件工程方面有前途,是在他出于乐趣做代码挑战的时候。他的重点是 IronXL 和 IronBarcode,但他为能帮助客户解决每一款产品的问题而感到自豪。Chaknith 利用他从直接与客户交谈中获得的知识,帮助进一步改进产品。他的轶事反馈不仅仅局限于 Jira 票据,还支持产品开发、文档编写和市场营销,从而提升客户的整体体验。当他不在办公室时,他可能会在学习机器学习、编程或徒步旅行。