如何在 C# 中新增 PDF 目錄 — PDF編輯導覽功能
IronPDF可讓您透過設定 TableOfContents 屬性,在 C# 中為 PDF 文件新增目錄,該屬性會自動從 HTML 標頭 (h1-h6) 產生具有可選頁碼的超連結導覽。
快速入門:使用 C# 為 PDF 新增目錄
-
使用NuGet套件管理器安裝https://www.nuget.org/packages/IronPdf
PM > Install-Package IronPdf -
複製並運行這段程式碼。
new ChromePdfRenderer { RenderingOptions = { CreateOutlineMaps = true, OutlineMapsFormat = TableOfContentsTypes.WithPageNumbers, FirstPageNumber = 1 } } .RenderHtmlFileAsPdf("myDocument.html") .SaveAs("withToc.pdf"); -
部署到您的生產環境進行測試
今天就在您的專案中開始使用免費試用IronPDF
最簡工作流程(5個步驟)
- 下載用於新增目錄的 C# 庫
- 準備要轉換為 PDF 的 HTML 文件
- 設定**TableOfContents**屬性以啟用目錄
- 選擇是否顯示頁碼
- 優化目錄的放置位置
PDF 檔案中的目錄是什麼?
目錄(TOC)是幫助讀者瀏覽 PDF 文件內容的路線圖。 它通常出現在開頭,列出 PDF 的主要部分或章節,以及每個部分開始的頁碼。 這樣一來,讀者可以快速找到並跳到文件的特定部分,從而更容易獲取所需資訊。
IronPDF提供了一項功能,可以建立具有指向"h1"、"h2"、"h3"、"h4"、"h5"和"h6"元素的超連結的目錄。 此目錄的預設樣式不會與 HTML 內容中的其他樣式衝突。 當您使用IronPDF建立新的 PDF時,目錄功能會自動掃描您的 HTML 標題,並建立反映文件組織結構的層次化導覽結構。
生成的目錄包含可點擊的鏈接,讀者可以直接跳到任何章節,這對於長篇文檔、報告和技術文檔尤其有用。 IronPDF 的目錄實作保留了 HTML 的語意結構,同時提供了專業的 PDF 導覽功能。
如何為PDF檔案新增目錄?
使用 TableOfContents 屬性可以在輸出的 PDF 文件中建立目錄。 此屬性可以指派給以下三個 TableOfContentsTypes 之一,具體描述如下:
- 無:不建立目錄
- 基本操作:建立不含頁碼的目錄
- WithPageNumbers:建立帶有頁碼的目錄
此功能使用JavaScript產生目錄; 因此,引擎必須啟用JavaScript 。 將HTML 檔案轉換為 PDF時,IronPDF for 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")
對於更進階的應用程式場景,您可以將目錄與其他渲染選項結合使用,以建立功能全面的 PDF 文件:
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");
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")
產生的PDF檔案是什麼樣子的?
目錄將包含指向"h1"、"h2"、"h3"、"h4"、"h5"和"h6"的超連結。 標題的層級結構得以保留,子標題在其父級部分下正確縮排。 除了目錄之外,您還可以在 PDF 文件中添加頁碼,以便更好地進行導航。
使用文件的
使用合併或分割的 PDF時,請在所有文件組裝完成後產生目錄,以確保準確的頁面引用和功能性超連結。
PDF檔案中的目錄應該放在哪裡?
- 確保 HTML 文件具有正確的標頭標籤(
h1至h6)。 - (可選)插入一個 div 元素,用於顯示目錄。 如果未提供以下 div, IronPDF將在開頭插入目錄。
<div id="ironpdf-toc"></div>
<div id="ironpdf-toc"></div>
- 在渲染選項中,選擇是否渲染目錄的頁碼。
對於佈局複雜的文檔,將目錄與頁首和頁尾結合起來,建立專業的文檔結構。 以下是產生最佳目錄的正確 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>
如何設定目錄樣式?
可以使用 CSS 對目錄進行樣式設置,方法是選擇定義目錄樣式的各種 CSS 選擇器。 在管理 PDF 中的字體時,目錄預設會繼承文件的字體設置,但也可以單獨進行自訂。
此外,也可以使用 CustomCssUrl 屬性進行樣式修改。 首先下載一個 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")
使用自訂紙張尺寸時,您可能需要調整目錄樣式以適應不同的頁面尺寸,並確保正確的文字流和分頁。
如何設定不同層級的頁眉樣式?
使用"#ironpdf-toc ul li.h1"選擇器,可以為目錄中的 H1 標題套用不同的樣式。 將"h1"替換為"h2",直到"h6",即可變更每個標題的樣式。
#ironpdf-toc ul li.h1 {
font-style: italic;
font-weight: bold;
}
如何更改字體系列?
使用"#ironpdf-toc li .page"選擇器,可以覆蓋目錄的字型系列。 為此,請使用草書字體作為標題,並利用 @font-face 屬性使用 Eduardo Tunni 設計的自訂" Lemon "字體。
#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;
}
如何移除或自訂虛線?
若要刪除標題和頁碼之間的虛線,請修改 ::after 選擇器的背景圖像。 在原始樣式中,第二個參數是"currentcolor 1px"。 將其變更為"透明 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;
}
準備好要看看你還能做什麼了嗎? 請造訪我們的教學頁面:轉換 PDF 文件
常見問題解答
如何在 PDF 文件中加入目錄?
您可以透過設定 ChromePdfRenderer 上的 TableOfContents 屬性,使用 IronPDF 為 PDF 新增目錄。只需將 RenderingOptions.TableOfContents 設定為 TableOfContentsTypes.Basic 或 TableOfContentsTypes.WithPageNumbers 即可。IronPDF 會自動從您的 HTML 標頭 (h1-h6 標籤) 產生 TOC。
使用哪些 HTML 元素來產生目錄?
IronPDF 透過掃描和使用 HTML 中的 h1、h2、h3、h4、h5 和 h6 標頭元素,自動建立目錄。這些標題形成了一個分層導覽結構,反映了您的文件組織,每個標題都成為生成的 PDF 目錄中的一個可點擊超鏈接。
我可以在目錄中加入頁碼嗎?
是的,IronPDF 提供了兩個目錄選項:TableOfContentsTypes.Basic 會建立不含頁數的 TOC,而 TableOfContentsTypes.WithPageNumbers 則會包含每一部分的頁數。您可以在設定 RenderingOptions 時,選擇最適合您文件需求的選項。
目錄功能需要 JavaScript 嗎?
是的,IronPDF 使用 JavaScript 來建立目錄,因此渲染引擎必須啟用 JavaScript。這通常是預設啟用的,但如果您在渲染選項中停用了 JavaScript,則需要啟用 JavaScript 才能讓目錄功能正常運作。
如何在一行代碼中設定帶有頁碼的目錄?
您可以使用以下單一行式產生包含頁數的目錄 PDF: new ChromePdfRenderer { RenderingOptions = { TableOfContents = TableOfContentsTypes.WithPageNumbers, FirstPageNumber = 1 }.}.RenderHtmlFileAsPdf("myDocument.html").SaveAs("withToc.pdf");這樣就建立了一個功能完整的 TOC,具有超連結導覽和頁碼。
目錄樣式是否會與我現有的 HTML 樣式衝突?
不會,IronPDF 預設的目錄樣式設計不會與您 HTML 內容中的其他樣式衝突。生成的 TOC 會保持其獨立的樣式,以確保正確顯示,同時保留您現有文件內容的外觀。

