Jak dodac zakladki i spis treści w plikach PDF w C# za pomoca IronPDF
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#.
-
Install IronPDF with NuGet Package Manager
-
Skopiuj i uruchom ten fragment kodu.
var pdf = new IronPdf.PdfDocument("example.pdf"); pdf.Bookmarks.AddBookMarkAtEnd("Chapter 1", 1); pdf.SaveAs("bookmarked.pdf"); -
Wdrożenie do testowania w środowisku produkcyjnym
Rozpocznij używanie IronPDF w swoim projekcie już dziś z darmową wersją próbną
Minimalny proces (5 kroków)
- Pobierz IronPDF z NuGet
- Zaladuj istniejący lub wygeneruj nowy dokument PDF
- Dodaj zakladki jednopoziomowe do przejscia do kluczowych sekcji
- Dodaj zakladki wielopoziomowe dla hierarchicznej organizacji
- Pobieraj i przeglądaj właściwości zakladek
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.
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")
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")
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")
Nastepujace wlasciwosci kontroluja, ktore elementy sa oznaczane zakladkami:
AutoBookmarksFromHeadings(bool, domyślnefalse): Włącz tę funkcję. Gdy ustawiony natrue, IronPDF automatycznie tworzy kontur zakładek zgodnie z nagłówkami HTML.AutoBookmarkMinHeadingLevel(int, domyślne1): Najwyższy poziom nagłówka od którego zaczynać. Ustaw na1, aby uwzględnić h1 (szczyt dokumentu).AutoBookmarkMaxHeadingLevel(int, domyślne6): Najgłębszy poziom nagłówka, który uwzględnić. Ustaw na3, aby oznaczyć zakładkami jedynie h1, h2 i h3 - ignorując h4 do h6.AutoBookmarkCssSelectors(string[], domyślnenull): 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
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]"
}
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")
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). |
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")
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()
-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.

