Comment ajouter des signets et des aperçus de PDF en C# ; avec IronPDF
IronPDF vous permet d'ajouter des signets (contours) aux documents PDF en C#, créant ainsi des aides à la navigation similaires à une table des matières. Ajoutez des signets à une ou plusieurs couches pour améliorer la convivialité du document et aider les utilisateurs à accéder rapidement aux sections clés. Cette fonctionnalité fonctionne de manière transparente dans les environnements Windows, Linux, et macOS.
Démarrage rapide : Ajouter des signets à votre PDF en C#
Démarrez rapidement avec IronPDF en ajoutant des signets à vos documents PDF. Ce guide montre comment charger un PDF existant, ajouter des signets pour la navigation et enregistrer le document mis à jour. Parfait pour les développeurs qui cherchent à améliorer les fonctionnalités des PDF dans leurs projets C#.
-
Installez IronPDF avec le Gestionnaire de Packages NuGet
-
Copiez et exécutez cet extrait de code.
var pdf = new IronPdf.PdfDocument("example.pdf"); pdf.Bookmarks.AddBookMarkAtEnd("Chapter 1", 1); pdf.SaveAs("bookmarked.pdf"); -
Déployez pour tester sur votre environnement de production.
Commencez à utiliser IronPDF dans votre projet dès aujourd'hui avec un essai gratuit
Flux de travail minimal (5 étapes)
- Télécharger IronPDF depuis NuGet
- Charger ou générer un nouveau document PDF existant
- Ajouter des signets à couche unique pour accéder aux sections clés
- Ajouter des signets multicouches pour une organisation hiérarchique
- Récupérer et visualiser les propriétés des signets
Comment travailler avec des signets PDF en C#?
Dans Adobe Acrobat Reader, les plans (également appelés signets) sont affichés dans la barre latérale gauche, fournissant un moyen pratique de sauter aux sections clés du document. Les signets fonctionnent comme une table des matières interactive, permettant aux lecteurs de naviguer efficacement dans des documents complexes.
Avec IronPDF, vous pouvez importer des documents PDF et effectuer diverses opérations sur les contours existants, telles que l'ajout, la réorganisation, la modification des propriétés et la suppression des signets. Cela vous permet de contrôler totalement l'organisation et la structure de vos fichiers PDF, de la même manière que vous pouvez fusionner ou diviser des PDF pour la gestion de documents.
Comment ajouter des signets à une seule couche?
L'ajout d'un signet dans IronPDF est très simple. Utilisez la méthode AddBookmarkAtEnd, en spécifiant le nom du signet et l'index de la page correspondante. Cette fonctionnalité s'intègre bien à d'autres opérations PDF comme l'ajout d'en-têtes et de pieds de page ou la définition de marges personnalisées pour créer des documents professionnels. Voici un exemple :
: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")
La méthode AddBookMarkAtEnd ajoute des signets à la fin de la liste de signets existante. Pour avoir plus de contrôle sur le placement des signets, utilisez AddBookMarkAtStart pour insérer des signets au début de la liste. Chaque signet fait référence à un index de page spécifique, permettant une navigation précise dans le document.
Document de signets à un seul niveau
Comment créer des hiérarchies de signets multicouches ?
IronPDF permet d'ajouter des signets dans une structure arborescente, ce qui est particulièrement utile pour maintenir la navigabilité dans des documents PDF volumineux. Cette fonctionnalité est très utile lorsqu'il s'agit de traiter de vastes collections de documents d'examen, de rapports de vente ou de reçus datant de différentes dates et de différents lieux dans un seul document PDF. À l'instar de la manière dont vous pourriez créer des formulaires PDF pour la collecte de données, les signets structurés permettent d'organiser des informations complexes de manière hiérarchique.
La méthode AddBookMarkAtEnd retourne un objet IPdfBookMark, vous permettant d'ajouter des signets d'enfant. Par exemple, utilisez Children.AddBookMarkAtStart("Date1", 0) ou Children.AddBookMarkAtEnd("Date1", 0) pour ajouter des signets d'enfant au signet "Examination". Cette structure imbriquée crée une organisation hiérarchique qui reflète le flux logique de votre document. Le code suivant illustre ce concept :
: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")
Cette approche hiérarchique est particulièrement utile lorsqu'il s'agit de documents complexes nécessitant une organisation détaillée. La structure imbriquée permet aux utilisateurs de développer et de réduire les sections des signets, ce qui rend la navigation intuitive, même dans des documents de plusieurs centaines de pages.
Document de signets à plusieurs niveaux
Comment générer automatiquement des signets à partir de titres HTML ?
Lors du rendu de HTML en PDF, IronPDF peut automatiquement construire une structure de signets hiérarchique à partir de la structure des titres du document (h1-h6) ou de tout sélecteur CSS personnalisé. Cela supprime la nécessité d'appeler manuellement AddBookMarkAtEnd pour chaque section.
Activez la fonctionnalité avec la propriété AutoBookmarksFromHeadings sur RenderingOptions avant d'appeler RenderHtmlAsPdf ou 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")
Les propriétés suivantes contrôlent les éléments qui sont signés :
AutoBookmarksFromHeadings(bool, par défautfalse): Activez la fonctionnalité. Quand il est défini surtrue, IronPDF construit automatiquement une arborescence de signets à partir de vos titres HTML.AutoBookmarkMinHeadingLevel(int, par défaut1): Le niveau de titre le plus élevé à partir duquel commencer. Définissez sur1pour inclure h1 (le haut du document).AutoBookmarkMaxHeadingLevel(int, par défaut6): Le niveau de titre le plus profond à inclure. Définissez sur3pour ne signaler que h1, h2, et h3 — en ignorant h4 à h6.AutoBookmarkCssSelectors(string[], par défautnull): Utilisez des sélecteurs CSS personnalisés au lieu des balises de titre. Par exemple :".chapter-title"ou"[data-bookmark]".
Personnalisation des niveaux de titres et des sélecteurs CSS
Pour restreindre les signets uniquement aux titres de niveau supérieur :
renderer.RenderingOptions.AutoBookmarksFromHeadings = true;
renderer.RenderingOptions.AutoBookmarkMaxHeadingLevel = 3;
renderer.RenderingOptions.AutoBookmarksFromHeadings = true;
renderer.RenderingOptions.AutoBookmarkMaxHeadingLevel = 3;
renderer.RenderingOptions.AutoBookmarksFromHeadings = True
renderer.RenderingOptions.AutoBookmarkMaxHeadingLevel = 3
Pour signer des éléments personnalisés à la place des titres, fournissez des sélecteurs 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]"
}
Comment interroger l'emplacement rendu des éléments HTML ?
Après le rendu, IronPDF peut indiquer exactement sur quelle page et quelles coordonnées un élément HTML donné s'est retrouvé. Cela remplace l'ancienne solution de contournement consistant à rendre d'abord, extraire le texte et rechercher les pages manuellement.
Définissez ElementQuerySelectors sur RenderingOptions avant de rendre, puis appelez GetElementLocations sur le résultat 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 retourne un objet List<RenderedElementLocation> contenant une entrée par élément correspondant :
| Propriété | Type | Ce qu'il vous dit |
|---|---|---|
Text |
string |
Le texte à l'intérieur de l'élément. |
PageIndex |
int |
Sur quelle page l'élément s'est retrouvé (commence à 0). |
Rectangle |
IronSoftware.Drawing.Rectangle |
La position de l'élément sur la page, en points PDF (1/72 pouce). L'origine est en bas à gauche. |
ElementIndex |
int |
L'ordre de l'élément dans le HTML original (commence à 0). |
ResetElementLocationCache pour forcer un nouveau balayage lors du prochain appel GetElementLocations.Combiner les auto-signets avec le suivi de l'emplacement des éléments
Les auto-signets et les requêtes sur l'emplacement des éléments peuvent être combinés dans un seul rendu. Par exemple, en générant un aperçu à partir des titres h1/h2 tout en suivant l'emplacement de page des éléments .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")
Comment récupérer et naviguer dans les signets existants?
IronPDF facilite la récupération et la visualisation des signets dans un document PDF. Naviguer à travers l'arborescence des signets est simple et permet un accès sans faille aux différentes sections. Cette fonctionnalité est essentielle lorsque l'on travaille avec des PDF existants qui doivent être modifiés ou lorsque l'on met en œuvre des fonctions telles que la recherche et le remplacement de texte dans des sections marquées d'un signet. Prenons l'exemple du document document de signets multicouches ci-dessus.
Le signet "Examination" a une propriété Children qui pointe vers les signets "Date1" et "Date2". Le signet "Date1" a une propriété NextBookmark qui pointe vers le signet "Date2". De plus, le signet "Date1" a une propriété Children contenant le signet "Paper". Cette structure interconnectée permet des schémas de navigation et une organisation des documents sophistiqués.
Pour récupérer tous les signets dans le document PDF ouvert, utilisez la méthode GetAllBookmarks. Ce document fournit une liste complète de tous les signets, ce qui vous permet d'analyser et d'utiliser la structure des signets :
: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.Apprenez à créer une table des matières lors de la génération de PDF depuis HTML dans l'article suivant : "Créer une table des matières avec IronPDF."
Prêt à voir ce que vous pouvez faire d'autre? Consultez notre page de tutoriel ici : Organiser les PDFs
Questions Fréquemment Posées
Comment ajouter des signets à un document PDF en C# ?
IronPDF facilite l'ajout de signets aux documents PDF en C#. Vous pouvez utiliser la méthode AddBookmarkAtEnd pour ajouter des signets à couche unique en spécifiant le nom du signet et l'index de la page. Par exemple : pdf.Bookmarks.AddBookMarkAtEnd("Chapitre 1", 1). Cela permet de créer des aides à la navigation similaires à une table des matières, qui aident les utilisateurs à accéder rapidement aux sections clés.
Quelle est la différence entre les méthodes AddBookmarkAtEnd et AddBookmarkAtStart ?
IronPDF propose deux méthodes pour placer des signets. La méthode AddBookMarkAtEnd ajoute des signets à la fin de la liste de signets existante, tandis que AddBookMarkAtStart insère des signets au début de la liste. Les deux méthodes font référence à des index de page spécifiques pour une navigation précise dans le document.
Puis-je créer des structures de signets hiérarchiques à plusieurs niveaux ?
Oui, IronPDF vous permet de créer des hiérarchies de signets multicouches dans une structure arborescente. Ceci est particulièrement utile pour organiser des documents complexes avec des sections imbriquées, de la même manière que vous structureriez une table des matières détaillée avec des chapitres et des sous-chapitres.
Les fonctionnalités des signets sont-elles compatibles avec différents systèmes d'exploitation ?
La fonction de signet d'IronPDF fonctionne de manière transparente dans les environnements Windows, Linux et macOS. Vous pouvez ajouter, modifier et gérer des signets PDF quel que soit votre système d'exploitation, ce qui garantit une fonctionnalité cohérente sur les différentes plateformes.
Quelles opérations puis-je effectuer sur des signets PDF existants ?
Avec IronPDF, vous pouvez effectuer diverses opérations sur des contours PDF existants, notamment ajouter de nouveaux signets, les réorganiser, modifier les propriétés des signets et supprimer les signets indésirables. Vous avez ainsi un contrôle total sur l'organisation et la structure de vos fichiers PDF.
Comment les signets sont-ils affichés lorsque les utilisateurs ouvrent le PDF ?
Dans Adobe Acrobat Reader et les visionneuses PDF similaires, les signets créés avec IronPDF apparaissent sous forme de contours dans la barre latérale gauche. Ils fonctionnent comme une table des matières interactive, permettant aux lecteurs de naviguer efficacement dans des documents complexes en cliquant pour accéder à des sections spécifiques.

