Jak dodawać zakładki i spisy treści do plików PDF w języku C# przy użyciu IronPDF

Jak dodac zakladki i spis treści w plikach PDF w C# za pomoca IronPDF

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

IronPDF pozwala dodawac zakladki (spisy treści) do dokumentów PDF w C#, tworząc pomoc nawigacyjną podobną do spisu treści. Dodawaj jedno- lub wielowarstwowe zakladki, aby zwiększyć uzytecznosc dokumentu i ulatwic użytkownikom szybkie przejscie do kluczowych sekcji. Ta funkcja działa bezproblemowo w środowiskach Windows, Linux i macOS.

Szybki start: dodawanie zakladek do PDF w C#

Rozpocznij szybko prace z IronPDF, dodajac zakladki do dokumentów PDF. Ten przewodnik pokazuje, jak załadować istniejący dokument PDF, dodac zakladki do nawigacji i zapisać zaktualizowany dokument. Idealne dla deweloperow chcących zwiększyć funkcjonalność PDF w swoich projektach C#.

  1. Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf
  2. Skopiuj i uruchom ten fragment kodu.

    var pdf = new IronPdf.PdfDocument("example.pdf");
    pdf.Bookmarks.AddBookMarkAtEnd("Chapter 1", 1);
    pdf.SaveAs("bookmarked.pdf");
  3. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronPDF w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer

Jak pracowac z zakladkami PDF w C#?

W Adobe Acrobat Reader spisy treści (znane również jako zakladki) sa wywietlane w lewym pasku bocznym, zapewniając wygodny sposob przejscia do kluczowych sekcji dokumentu. Zakladki funkcjonuja jako interaktywny spis treści, umożliwiajac czytelnikom skuteczna nawigacje po skomplikowanych dokumentach.

Dzięki IronPDF możesz importowac dokumenty PDF i wykonywać różne operacje na istniejących spisach treści, takie jak dodawanie, zmienianie kolejnosci, edytowanie właściwości i usuwanie zakladek. Daje to pełna kontrole nad organizacja i struktura plików PDF, podobnie jak można łączyć lub dzielic pliki PDF w celu zarządzania dokumentami.

PoradyWszystkie indeksy stron maji indeksacje rozpoczynajaca sie od zera.

Jak dodac zakladki jednopoziomowe?

Dodanie zakladki w IronPDF jest proste. Użyj metody AddBookmarkAtEnd, określając nazwę zakładki i odpowiadający jej indeks strony. Taka funkcjonalność dobrze integruje sie z innymi operacjami na PDF, jak dodawanie nagłówków i stopki lub ustawianie niestandardowych marginesow w celu tworzenia profesjonalnych dokumentów. Poniżej znajduje się przykład:

:path=/static-assets/pdf/content-code-examples/how-to/bookmarks-single-layer-bookmark.cs
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");
Imports IronPdf

' Create a new PDF or edit an existing document.
Private pdf As PdfDocument = 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")
$vbLabelText   $csharpLabel

Metoda AddBookMarkAtEnd dodaje zakładki na końcu istniejącej listy zakładek. Aby mieć większą kontrolę nad umiejscowieniem zakładek, użyj AddBookMarkAtStart, aby wstawić zakładki na początku listy. Każda zakładka odnosi się do określonego indeksu strony, umożliwiając precyzyjną nawigację w dokumencie.

Dokument z zakladkami jednopoziomowymi

Jak stworzyć hierarchie zakladek wielowarstwowych?

IronPDF pozwala dodawac zakladki w strukturze drzewa, co jest szczegółnie przydatne w utrzymaniu nawigacji w obszernych dokumentach PDF. Ta funkcja jest wartosciowa w przypadku pracy z rozlegllymi zbiorami dokumentów egzaminacyjnych, raportow sprzedaży czy zapisami paragonow z różnych dat i lokalizacji w jednym dokumencie PDF. Podobnie jak można tworzyć formularze PDF do gromadzenia danych, strukturalne zakladki pomagaja hierarchicznie organizowac skomplikowane informacje.

Metoda AddBookMarkAtEnd zwraca obiekt IPdfBookMark, dając możliwość dodawania podrzędnych zakładek. Na przykład, użyj Children.AddBookMarkAtStart("Date1", 0) lub Children.AddBookMarkAtEnd("Date1", 0), aby dodać podrzędne zakładki do zakładki "Egzamin". Ta zagniezdzona struktura tworzy hierarchiczna organizacje, która odzwierciedla logiczny przepływ dokumentu. Poniższy kod pokazuje ten koncepcje:

:path=/static-assets/pdf/content-code-examples/how-to/bookmarks-multi-layer-bookmark.cs
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");
Imports IronPdf

' Load existing PDF document
Private pdf As PdfDocument = PdfDocument.FromFile("examinationPaper.pdf")

' Assign IPdfBookMark object to a variable
Private mainBookmark = pdf.Bookmarks.AddBookMarkAtEnd("Examination", 0)

' Add bookmark for days
Private date1Bookmark = mainBookmark.Children.AddBookMarkAtStart("Date1", 1)

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

' Add bookmark for days
Dim date2Bookmark = mainBookmark.Children.AddBookMarkAtEnd("Date2", 5)

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

pdf.SaveAs("multiLayerBookmarks.pdf")
$vbLabelText   $csharpLabel

To hierarchiczne podejście jest szczegółnie wartosciowe przy pracy ze zlozonymi dokumentami wymagajacymi szczegółowe organizacji. Zagniezdzona struktura pozwala użytkownikom na rozwijanie i zwijanie sekcjach zakladek, co sprawia, że nawigacja jest intuicyjna nawet w dokumentach z setkami stron.

Dokument z zakladkami wielowarstwowymi

Jak automatycznie generowac zakladki z naglowkow HTML?

Podczas renderowania HTML do PDF, IronPDF moze automatycznie zbudowac hierarchiczny zarys zakladek na podstawie struktury naglowkow dokumentu (h1-h6) lub dowolnych niestandardowych selektorow CSS. To usuwa potrzebę ręcznego wywoływania AddBookMarkAtEnd dla każdej sekcji.

Włącz funkcję dzięki właściwości AutoBookmarksFromHeadings w RenderingOptions przed wywołaniem RenderHtmlAsPdf lub RenderUrlAsPdf:

:path=/static-assets/pdf/content-code-examples/how-to/bookmarks-auto-from-headings.cs
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");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

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

Dim html As String = "
<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>"

Dim pdf = renderer.RenderHtmlAsPdf(html)

' pdf.Bookmarks is already populated with a hierarchical outline matching the heading structure
pdf.SaveAs("auto-bookmarked.pdf")
$vbLabelText   $csharpLabel

Nastepujace wlasciwosci kontroluja, ktore elementy sa oznaczane zakladkami:

  • AutoBookmarksFromHeadings (bool, domyślne false): Włącz tę funkcję. Gdy ustawiony na true, IronPDF automatycznie tworzy kontur zakładek zgodnie z nagłówkami HTML.
  • AutoBookmarkMinHeadingLevel (int, domyślne 1): Najwyższy poziom nagłówka od którego zaczynać. Ustaw na 1, aby uwzględnić h1 (szczyt dokumentu).
  • AutoBookmarkMaxHeadingLevel (int, domyślne 6): Najgłębszy poziom nagłówka, który uwzględnić. Ustaw na 3, aby oznaczyć zakładkami jedynie h1, h2 i h3 - ignorując h4 do h6.
  • AutoBookmarkCssSelectors (string[], domyślne null): Użyj niestandardowych selektorów CSS zamiast tagów nagłówków. Na przykład: ".chapter-title" lub "[data-bookmark]".

Dostosowywanie poziomow naglowkow i selektorow CSS

Aby ograniczyc zakladki do naglowkow najwyzszego poziomu tylko:

renderer.RenderingOptions.AutoBookmarksFromHeadings = true;
renderer.RenderingOptions.AutoBookmarkMaxHeadingLevel = 3;
renderer.RenderingOptions.AutoBookmarksFromHeadings = true;
renderer.RenderingOptions.AutoBookmarkMaxHeadingLevel = 3;
renderer.RenderingOptions.AutoBookmarksFromHeadings = True
renderer.RenderingOptions.AutoBookmarkMaxHeadingLevel = 3
$vbLabelText   $csharpLabel

Aby oznaczyc zakladkami niestandardowe elementy zamiast naglowkow, dostarcz selektory CSS:

renderer.RenderingOptions.AutoBookmarksFromHeadings = true;
renderer.RenderingOptions.AutoBookmarkCssSelectors = new[]
{
    "h1",
    ".chapter-title",
    "[data-bookmark]"
};
renderer.RenderingOptions.AutoBookmarksFromHeadings = true;
renderer.RenderingOptions.AutoBookmarkCssSelectors = new[]
{
    "h1",
    ".chapter-title",
    "[data-bookmark]"
};
renderer.RenderingOptions.AutoBookmarksFromHeadings = True
renderer.RenderingOptions.AutoBookmarkCssSelectors = New String() {
    "h1",
    ".chapter-title",
    "[data-bookmark]"
}
$vbLabelText   $csharpLabel

Jak zapytac o renderowana lokalizacje elementow HTML?

Po renderowaniu, IronPDF moze dokladnie podac, na ktorej stronie i pod jakimi wspolrzednymi znalazl sie dany element HTML. To zastepuje starszy sposob renderowania najpierw, wyodrebniania tekstu i recznego przeszukiwania stron.

Ustaw ElementQuerySelectors na RenderingOptions przed renderowaniem, a następnie wywołaj GetElementLocations na uzyskanym PdfDocument:

:path=/static-assets/pdf/content-code-examples/how-to/bookmarks-element-locations.cs
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");
Imports IronPdf
Imports System

Dim renderer = New ChromePdfRenderer()

' Configure which elements should be queryable after rendering
renderer.RenderingOptions.ElementQuerySelectors = New String() {"h1", ".kpi-card"}

Dim 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>"

Dim pdf = renderer.RenderHtmlAsPdf(html)

' Retrieve the rendered page location of each matched element
For Each location In pdf.GetElementLocations()
    Console.WriteLine($"'{location.Text}' on page {location.PageIndex + 1} " &
                      $"at ({location.Rectangle.X}, {location.Rectangle.Y})")
Next

pdf.SaveAs("dashboard.pdf")
$vbLabelText   $csharpLabel

GetElementLocations zwraca obiekt List<RenderedElementLocation> zawierający jeden wpis na każdy dopasowany element:

Właściwość Typ Co on ci mowi
Text string Tekst wewnetrzny elementu.
PageIndex int Na ktorej stronie znalazl sie element (liczac od 0).
Rectangle IronSoftware.Drawing.Rectangle Pozycja elementu na stronie, w punktach PDF (1/72 cala). Punkt poczatkowy to dol-lewy.
ElementIndex int Kolejnosc elementu w oryginalnym HTML (liczac od 0).

PoradyWyniki sa buforowane przy pierwszym wywolaniu. Jeśli modyfikujesz adnotacje dokumentu po renderowaniu i potrzebujesz nowych współrzędnych, wywołaj ResetElementLocationCache, aby wymusić ponowne przeskanowanie przy kolejnym wywołaniu GetElementLocations.

Laczenie automatycznych zakladek z sledzeniem lokalizacji elementow

Automatyczne zakladki i zapytania o lokalizacje elementow moga byc polaczone w jednym renderowaniu. Na przykład, tworząc kontur z nagłówków h1/h2 i śledząc położenie stron elementów .invoice-total:

:path=/static-assets/pdf/content-code-examples/how-to/bookmarks-auto-and-locations.cs
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");
Imports IronPdf
Imports System

Dim renderer As 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 String() {".invoice-total"}

Dim html As String = "
<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>"

Dim pdf = renderer.RenderHtmlAsPdf(html)

' Bookmarks are populated automatically; locations can be queried after rendering
For Each location In pdf.GetElementLocations()
    Console.WriteLine($"{location.Text} appears on page {location.PageIndex + 1}")
Next

pdf.SaveAs("invoices.pdf")
$vbLabelText   $csharpLabel

Jak można pobierac i nawigowac po istniejących zakladkach?

IronPDF umożliwia łatwe pobieranie i przeglądanie zakladek w dokumencie PDF. Nawigowanie po drzewie zakladek jest proste i zapewnia plynnosc dostepu do różnych sekcji. Ta funkcjonalność jest niezbędna podczas pracy z istniejącymi plikami PDF wymagajacymi edycji lub w przypadku wdrazania funkcji takich jak wyszukiwanie i zastepowanie tekstu w obrębie zrodlowych sekcji zakladek. Rozwaz przykład dokumentu z zakladkami wielowarstwowymi powyzej.

Zakładka "Egzamin" ma właściwość Children, która wskazuje na zakładki "Data1" i "Data2". Zakładka "Data1" ma właściwość NextBookmark, która wskazuje na zakładkę "Data2". Dodatkowo, zakładka "Data1" ma właściwość Children zawierającą zakładkę "Papier". Ta powiazana struktura pozwala na wyrafinowane wzorce nawigacyjne i organizacje dokumentu.

Aby uzyskać wszystkie zakładki w otwartym dokumencie PDF, użyj metody GetAllBookmarks. Zapewnia to szereg wszystkich zakladek, pozwalając analizowac pełna strukture zakladek i wykorzystywac calą:

:path=/static-assets/pdf/content-code-examples/how-to/bookmarks-retrieve-bookmark.cs
using IronPdf;

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

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

' Load existing PDF document
Private pdf As PdfDocument = PdfDocument.FromFile("multiLayerBookmarks.pdf")

' Retrieve bookmarks list
Private mainBookmark = pdf.Bookmarks.GetAllBookmarks()
$vbLabelText   $csharpLabel

Zwróć uwagęLaczenie dwoch dokumentów PDF o identycznych nazwach zakladek może zaburzyc liste zakladek.

OstrzeżenieObslugiwane sa tylko zakladki utworzone na podstawie indeksow stron. Zakładki z innych elementów PDF będą miały swoją wartość indeksu strony ustawioną na -1.

Dowiedz sie, jak stworzyć spis treści podczas generowania PDF z HTML w następnym artykułe: "Tworzenie spisu treści z IronPDF."

Gotowy, aby sprawdzić, co jeszcze możesz zrobić? Zapoznaj się z naszą stroną z samouczkami tutaj: Organizowanie plików PDF

Często Zadawane Pytania

Jak dodac zakladki do dokumentu PDF w C#?

IronPDF umożliwia latwe dodawanie zakladek do dokumentow PDF w C#. Mozesz uzyc metody AddBookmarkAtEnd, aby dodac jedno-warstwowe zakladki, okreslajac nazwe zakladki i indeks strony. Na przyklad: pdf.Bookmarks.AddBookMarkAtEnd('Rozdzial 1', 1). To tworzy nawigacyjne pomoce podobne do spisu tresci, ktore umożliwiaja uzytkownikom szybkie przeskakiwanie do kluczowych sekcji.

Jaka jest roznica miedzy metodami AddBookmarkAtEnd a AddBookmarkAtStart?

IronPDF zapewnia dwie metody umieszczania zakladek. Metoda AddBookMarkAtEnd dodaje zakladki na koncu istniejacej listy zakladek, podczas gdy AddBookMarkAtStart wstawia zakladki na poczatku listy. Obie metody odnosza sie do konkretnych indeksow stron dla precyzyjnej nawigacji w dokumencie.

Czy moge tworzyc hierarchiczne struktury zakladek z wieloma poziomami?

Tak, IronPDF umożliwia tworzenie wielowarstwowych hierarchii zakladek w strukturze drzewa. Jest to szczegolnie przydatne do organizowania zlozonych dokumentow z zagniezdzonymi sekcjami, podobnie jak w przypadku struktury szczegolowego spisu tresci z rozdzialami i podrozdzialami.

Czy funkcjonalnosc zakladek jest kompatybilna z roznymi systemami operacyjnymi?

Funkcja zakladek w IronPDF dziala bezproblemowo w srodowiskach Windows, Linux i macOS. Mozesz dodawac, edytowac i zarzadzac zakladkami PDF bez wzgledu na system operacyjny, zapewniajac stala funkcjonalnosc na roznych platformach.

Jakie operacje moge wykonywac na istniejacych zakladkach PDF?

Z IronPDF mozesz wykonywac rozne operacje na istniejacych konturach PDF, w tym dodawanie nowych zakladek, zmiane ich kolejnosci, edycje wlasciwosci zakladek i usuwanie niechcianych zakladek. To daje ci pelna kontrole nad organizacja i struktura twoich plikow PDF.

Jak sa wyswietlane zakladki, kiedy uzytkownicy otwieraja PDF?

W Adobe Acrobat Reader i podobnych przegladarkach PDF zakladki utworzone za pomoca IronPDF pojawiaja sie jako kontury w lewym bocznym panelu. Dzialaja one jako interaktywny spis tresci, umożliwiajac czytelnikom efektywna nawigacje po zlozonych dokumentach poprzez klikniecie, aby przeskoczyc do konkretnych sekcji.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 19,936,792 | Wersja: 2026.7 właśnie wydany
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronPdf
Uruchom przykład i zobacz, jak Twój kod HTML zamienia się w plik PDF.