如何在C#中新增目錄

如何在C#中新增目錄

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

IronPDF可讓您在C#中的PDF文件中新增目錄,方法是設置h6)生成超連結導航,並可選擇顯示頁碼。

快速入門:在C#中為PDF新增目錄

  1. 使用NuGet套件管理器安裝https://www.nuget.org/packages/IronPdf

    PM > Install-Package IronPdf
  2. 複製並運行這段程式碼片段。

    new ChromePdfRenderer { RenderingOptions = { CreateOutlineMaps = true, OutlineMapsFormat = TableOfContentsTypes.WithPageNumbers, FirstPageNumber = 1 } }
        .RenderHtmlFileAsPdf("myDocument.html")
        .SaveAs("withToc.pdf");
  3. 部署以在您的實時環境中測試

    今天就開始在您的專案中使用IronPDF,透過免費試用

    arrow pointer


PDF中的目錄是什麼?

目錄(TOC)是一個路線圖,幫助讀者導航PDF文件的內容。 它通常出現在開頭,列出PDF的主要部分或章節,並附上每個部分開始的頁碼。 這使得讀者能夠快速找到並跳轉至文件的特定部分,方便他們獲取所需資訊。

IronPDF提供了一個功能,可以通過h6元素建立帶有超連結的目錄。 此目錄的預設樣式不會與HTML內容中的其他樣式衝突。 當您使用IronPDF建立新的PDF時,目錄功能會自動掃描您的HTML標題並建立符合您文件結構的層次導航。

生成的目錄包含可點擊的連結,允許讀者直接跳至任何部分,對於長文件、報告和技術文件特別有用。 IronPDF的目錄實現保留了您HTML的語義結構,並提供專業的PDF導航功能。

如何將目錄新增至我的PDF?

使用TableOfContents屬性在輸出PDF文件中啟用目錄的建立。 該屬性可以指定為三個TableOfContentsTypes之一,描述如下:

  • None:不建立目錄
  • Basic:建立不帶頁碼的目錄
  • WithPageNumbers:建立帶有頁碼的目錄

此功能使用JavaScript建立目錄; 因此,這引擎必須啟用JavaScript。 將HTML文件轉換為PDF時,IronPDF的JavaScript引擎會處理您的標題標籤並生成對應的導航結構。 為了更好地理解此功能,請下載以下範例HTML文件:

生成目錄需要哪些程式碼?

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

// 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

' 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")
$vbLabelText   $csharpLabel

在更高級的方案中,您可以將目錄與其他呈現選項結合起來建立綜合的PDF文件:

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

// Create renderer with multiple options
ChromePdfRenderer renderer = new ChromePdfRenderer();
renderer.RenderingOptions = new ChromePdfRenderOptions
{
    // Enable table of contents with page numbers
    TableOfContents = TableOfContentsTypes.WithPageNumbers,
    
    // Add margins for better formatting
    MarginTop = 40,
    MarginBottom = 40,
    
    // Enable JavaScript for dynamic content
    EnableJavaScript = true,
    
    // Set paper orientation
    PaperOrientation = PdfPaperOrientation.Portrait,
    
    // Add first page number offset
    FirstPageNumber = 1
};

 // Convert HTML with multiple header levels
string htmlContent = @"
<h1>Introduction</h1>
<p>Welcome to our comprehensive guide...</p>

<h2>Chapter 1: Getting Started</h2>
<p>Let's begin with the basics...</p>

<h3>1.1 Prerequisites</h3>
<p>Before we start, ensure you have...</p>

<h2>Chapter 2: Advanced Topics</h2>
<p>Now let's explore more complex features...</p>
";

PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("document-with-toc.pdf");
Imports IronPdf

' Create renderer with multiple options
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions = New ChromePdfRenderOptions With {
    ' Enable table of contents with page numbers
    .TableOfContents = TableOfContentsTypes.WithPageNumbers,
    
    ' Add margins for better formatting
    .MarginTop = 40,
    .MarginBottom = 40,
    
    ' Enable JavaScript for dynamic content
    .EnableJavaScript = True,
    
    ' Set paper orientation
    .PaperOrientation = PdfPaperOrientation.Portrait,
    
    ' Add first page number offset
    .FirstPageNumber = 1
}

' Convert HTML with multiple header levels
Dim htmlContent As String = "
<h1>Introduction</h1>
<p>Welcome to our comprehensive guide...</p>

<h2>Chapter 1: Getting Started</h2>
<p>Let's begin with the basics...</p>

<h3>1.1 Prerequisites</h3>
<p>Before we start, ensure you have...</p>

<h2>Chapter 2: Advanced Topics</h2>
<p>Now let's explore more complex features...</p>
"

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("document-with-toc.pdf")
$vbLabelText   $csharpLabel

生成的PDF什麼樣子?

目錄將會建立,並帶有指向每個h6的超連結。 您的標題層次結構將被保留,並且每個子標題將正確縮進於其父節下。 您還可以新增頁數至您的PDF,以在目錄旁提供附加的導航支持。

Merge方法將破壞目錄的超連結。

在處理合併或拆分的PDF時,請在完成所有文件組裝後生成目錄,以確保準確的頁面引用和功能性超連結。


Icon Quote related to 生成的PDF什麼樣子?

我最喜歡的程式庫是IronPDF。它允許快速高效地操作PDF文件。它還有許多有價值的功能,例如導出到PDF/A格式和數位簽署PDF文件。

Milan Jovanovic related to 生成的PDF什麼樣子?

Milan Jovanovic

Microsoft MVP

查看案例研究
Icon Quote related to 生成的PDF什麼樣子?

IronOCR意味著我們每年可以從手動處理中節省$40,000,同時提高生產力,釋放資源以進行高影響的任務。我會強烈推薦它。

Brent Matzelle related to 生成的PDF什麼樣子?

Brent Matzelle

首席技術官,OPYN

查看案例研究
Icon Quote related to 生成的PDF什麼樣子?

IronSuite在我們的運營中扮演著至關重要的角色。這些工具增加了包括建立平面圖和改善庫存管理在內的業務效率。

David Jones related to 生成的PDF什麼樣子?

David Jones

首席軟體工程師,Agorus Build

查看案例研究

我應該將目錄放在PDF的什麼位置?

  1. 確保HTML文件具有正確的標頭標籤(h6)。
  2. 可選地插入一個div以決定目錄顯示的位置。 如果未提供以下div,IronPDF將在開始處插入目錄。
<div id="ironpdf-toc"></div>
<div id="ironpdf-toc"></div>
HTML
  1. 在渲染選項中,選擇要顯示帶有或不帶頁碼的目錄渲染。

對於具有複雜佈局的文件,將目錄與頁眉和頁腳結合起來,以建立專業的文件結構。 這是最佳目錄生成的正確HTML結構範例:

<!DOCTYPE html>
<html>
<head>
    <title>My Document</title>
</head>
<body>

    <div id="ironpdf-toc"></div>

    <div style="page-break-after: always;"></div>

    <h1>Executive Summary</h1>
    <p>This document provides...</p>

    <h2>Market Analysis</h2>
    <h3>Current Trends</h3>
    <p>The market shows...</p>

    <h3>Future Projections</h3>
    <p>We anticipate...</p>

    <h2>Recommendations</h2>
    <p>Based on our analysis...</p>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
    <title>My Document</title>
</head>
<body>

    <div id="ironpdf-toc"></div>

    <div style="page-break-after: always;"></div>

    <h1>Executive Summary</h1>
    <p>This document provides...</p>

    <h2>Market Analysis</h2>
    <h3>Current Trends</h3>
    <p>The market shows...</p>

    <h3>Future Projections</h3>
    <p>We anticipate...</p>

    <h2>Recommendations</h2>
    <p>Based on our analysis...</p>
</body>
</html>
HTML

如何設計目錄的樣式?

可以使用CSS來設計目錄的樣式,通過目標不同的CSS選擇器來定義目錄的樣式。 在您的PDF中管理字體時,目錄將會繼承您文件的字體設置,預設情況下如此,但也可以獨立定制。

此外,還可以使用CustomCssUrl屬性進行樣式修改。 首先下載下面包含目錄原始樣式的CSS文件。

警告目前,不建議在設計目錄樣式時覆蓋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")
$vbLabelText   $csharpLabel

當處理自訂紙張尺寸時,您可能需要調整目錄樣式以符合不同頁面尺寸,並確保正確的文字流和頁面分隔。

如何設計不同的標頭級別?

使用#IronPDF-toc ul li.h1選擇器為目錄中的H1標頭應用不同的樣式。 將h6,為各自的標頭更改樣式。

 #ironpdf-toc ul li.h1 {
    font-style: italic;
    font-weight: bold;
 }
設計好的目錄上,階層章節和部分顯示帶點引導線的頁碼

如何更改字體系列?

使用'#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選擇器來控制縮排。 此值決定目錄中每個標頭級別(h2、...)的縮進量。 可以根據需要增加縮排量,或將縮排值設為0時無縮入。

:root {
    --indent-length: 25px;
}
目錄顯示自訂縮排的章節、部分和課程,帶點引導線連接到頁碼

如何移除或自訂點線?

要移除標題和頁碼之間的點線,請修改::after選擇器的背景圖片。 在原始樣式中,第二個參數是'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;
 }
目錄,顯示帶階層縮排的章節、部分和課程,以及右對齊的頁碼

若要更高級的樣式選項,使用不同的樣式圖案建立自訂引導線:

/* Dashed line leader */
#ironpdf-toc li::after {
    background-image: linear-gradient(to right, currentcolor 50%, transparent 50%);
    background-size: 8px 1px;
    background-repeat: repeat-x;
    background-position: bottom;
}

/* Solid line leader */
#ironpdf-toc li::after {
    border-bottom: 1px solid currentcolor;
    background: none;
}

準備好瞭解您還可以做什麼嗎? 在這裡查看我們的教程頁面:轉換PDFs

常見問題

如何在我的PDF文件中新增目錄?

您可以使用IronPDF在PDF中新增目錄,通過在ChromePdfRenderer中設置TableOfContents屬性。只需將RenderingOptions.TableOfContents設置為TableOfContentsTypes.Basic以獲取無頁碼的目錄,或TableOfContentsTypes.WithPageNumbers以包含頁碼。IronPDF將自動從您的HTML標題(h1-h6標籤)生成目錄。

用於生成目錄的HTML元素有哪些?

IronPDF通過掃描並使用您的HTML中的h1,h2,h3,h4,h5,h6標題元素來自動建立目錄。這些標題形成一個層次導航結構,反映了您文件的組織,並在生成的PDF目錄中成為可點擊的超連結。

我可以在目錄中包含頁碼嗎?

是的,IronPDF提供兩個目錄選項:TableOfContentsTypes.Basic建立不帶頁碼的目錄,而TableOfContentsTypes.WithPageNumbers為每個部分包括頁碼。您可以選擇最適合您的文件需求的選項,當設置RenderingOptions時。

目錄功能是否需要JavaScript?

是的,IronPDF使用JavaScript來構建目錄,因此渲染引擎必須啟用JavaScript。這通常是預設啟用的,但如果您在渲染選項中禁用了JavaScript,則需要啟用它才能正常使用目錄功能。

如何在一行程式碼中設置帶有頁碼的目錄?

您可以使用這一行生成一個包含頁碼的目錄PDF:new ChromePdfRenderer { RenderingOptions = { TableOfContents = TableOfContentsTypes.WithPageNumbers, FirstPageNumber = 1 } }.RenderHtmlFileAsPdf("myDocument.html").SaveAs("withToc.pdf"); 這樣會建立一個功能齊全的帶有超連結導航和頁碼的目錄。

目錄的樣式會與我現有的HTML樣式衝突嗎?

不,IronPDF的預設目錄樣式設計成不會與您HTML內容中的其他樣式衝突。生成的目錄維持其獨立樣式,確保在顯示時正確顯示,同時保留現有文件內容的外觀。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

準備開始了嗎?
Nuget 下載 20,296,129 | 版本: 2026.7 剛剛發布
Still Scrolling Icon

還在捲動嗎?

想快速獲得證明嗎? PM > Install-Package IronPdf
執行範例 看您的HTML變成PDF。