Cómo añadir marcadores y esquemas en PDF en C# usando IronPDF
IronPDF te permite añadir marcadores (esquemas) a documentos PDF en C#, creando ayudas de navegación similares a una Tabla de Contenidos. Añade marcadores de una o varias capas para mejorar la usabilidad del documento y ayudar a los usuarios a saltar a secciones clave rápidamente. Esta función funciona a la perfección en entornos Windows, Linux y macOS.
Inicio rápido: Añadiendo marcadores a tu PDF en C#
Comienza rápidamente con IronPDF añadiendo marcadores a tus documentos PDF. Esta guía demuestra cómo cargar un PDF existente, añadir marcadores para la navegación y guardar el documento actualizado. Perfecto para desarrolladores que buscan mejorar la funcionalidad de PDF en sus proyectos de C#.
-
Instala IronPDF con el Administrador de Paquetes NuGet
-
Copie y ejecute este fragmento de código.
var pdf = new IronPdf.PdfDocument("example.pdf"); pdf.Bookmarks.AddBookMarkAtEnd("Chapter 1", 1); pdf.SaveAs("bookmarked.pdf"); -
Despliegue para probar en su entorno real
Comienza a usar IronPDF en tu proyecto hoy mismo con una prueba gratuita
Flujo de trabajo mínimo (5 pasos)
- Download IronPDF from NuGet
- Cargar documento PDF existente o generar uno nuevo
- Añadir marcadores de capa única para saltar a secciones clave
- Añadir marcadores de múltiples capas para organización jerárquica
- Recuperar y ver propiedades del marcador
¿Cómo trabajo con marcadores PDF en C#?
En Adobe Acrobat Reader, los esquemas (también conocidos como marcadores) se muestran en la barra lateral izquierda, proporcionando una forma conveniente de saltar a secciones clave del documento. Los marcadores funcionan como una tabla de contenidos interactiva, permitiendo a los lectores navegar documentos complejos de manera eficiente.
Con IronPDF, puedes importar documentos PDF y realizar varias operaciones en esquemas existentes, tales como añadir, reordenar, editar propiedades y eliminar marcadores. Esto te da control total sobre la organización y estructura de tus archivos PDF, similar a cómo puedes fusionar o dividir PDFs para la gestión de documentos.
¿Cómo añado marcadores de capa única?
Añadir un marcador en IronPDF es sencillo. Usa el método AddBookmarkAtEnd, especificando el nombre del marcador y el índice de la página correspondiente. Esta funcionalidad se integra bien con otras operaciones en PDF como añadir encabezados y pies de página o establecer márgenes personalizados para crear documentos profesionales. A continuación se muestra un ejemplo:
: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")
El método AddBookMarkAtEnd añade marcadores al final de la lista de marcadores existente. Para más control sobre la ubicación del marcador, usa AddBookMarkAtStart para insertar marcadores al principio de la lista. Cada marcador referencia un índice de página específico, permitiendo una navegación precisa dentro del documento.
Documento de marcadores de capa única
¿Cómo creo jerarquías de marcadores en múltiples capas?
IronPDF te permite añadir marcadores en una estructura de árbol, lo cual es especialmente útil para mantener la navegabilidad en documentos PDF grandes. Esta función es valiosa al tratar con colecciones extensas de exámenes, informes de ventas o registros de recibos de varias fechas y ubicaciones en un solo documento PDF. Al igual que podrías crear formularios PDF para la recopilación de datos, los marcadores estructurados ayudan a organizar información compleja de manera jerárquica.
El método AddBookMarkAtEnd devuelve un objeto IPdfBookMark, permitiendo añadir marcadores secundarios. Por ejemplo, usa Children.AddBookMarkAtStart("Date1", 0) o Children.AddBookMarkAtEnd("Date1", 0) para añadir marcadores secundarios al marcador 'Examen'. Esta estructura anidada crea una organización jerárquica que refleja el flujo lógico de tu documento. El siguiente código demuestra este concepto:
: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")
Este enfoque jerárquico es particularmente valioso al trabajar con documentos complejos que requieren una organización detallada. La estructura anidada permite a los usuarios expandir y contraer secciones de marcadores, haciendo la navegación intuitiva incluso en documentos con cientos de páginas.
Documento de marcadores de múltiples capas
¿Cómo puedo generar automáticamente marcadores a partir de encabezados HTML?
Al renderizar HTML a PDF, IronPDF puede construir automáticamente un esquema de marcadores jerárquico a partir de la estructura de encabezados del documento (h1-h6) o cualquier selector CSS personalizado. Esto elimina la necesidad de llamar manualmente a AddBookMarkAtEnd para cada sección.
Habilita la función con la propiedad AutoBookmarksFromHeadings en RenderingOptions antes de llamar a RenderHtmlAsPdf o 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 = @"
al Report</h1>
utive Summary</h2>
iew of the year.</p>
ncial Results</h2>
nue</h3>
nses</h3>
ook</h2>
ng 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 = "
al Report</h1>
utive Summary</h2>
iew of the year.</p>
ncial Results</h2>
nue</h3>
nses</h3>
ook</h2>
ng 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")
Las siguientes propiedades controlan qué elementos se marcan:
AutoBookmarksFromHeadings(bool, por defectofalse): Activa la función. Cuando se establece entrue, IronPDF construye automáticamente un esquema de marcadores a partir de tus encabezados HTML.AutoBookmarkMinHeadingLevel(int, por defecto1): El nivel de encabezado más alto para comenzar. Establecer en1para incluir h1 (la parte superior del documento).AutoBookmarkMaxHeadingLevel(int, por defecto6): El nivel de encabezado más profundo a incluir. Establecer en3para marcar solo h1, h2 y h3 — ignorando h4 hasta h6.AutoBookmarkCssSelectors(string[], por defectonull): Utiliza selectores CSS personalizados en lugar de etiquetas de encabezado. Por ejemplo:".chapter-title"o"[data-bookmark]".
Personalización de niveles de encabezado y selectores CSS
Para restringir los marcadores solo a encabezados de nivel superior:
renderer.RenderingOptions.AutoBookmarksFromHeadings = true;
renderer.RenderingOptions.AutoBookmarkMaxHeadingLevel = 3;
renderer.RenderingOptions.AutoBookmarksFromHeadings = true;
renderer.RenderingOptions.AutoBookmarkMaxHeadingLevel = 3;
renderer.RenderingOptions.AutoBookmarksFromHeadings = True
renderer.RenderingOptions.AutoBookmarkMaxHeadingLevel = 3
Para marcar elementos personalizados en lugar de encabezados, proporciona selectores 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]"
}
¿Cómo consulto la ubicación renderizada de elementos HTML?
Después de renderizar, IronPDF puede informar exactamente en qué página y coordenadas terminó un elemento HTML dado. Esto reemplaza la antigua solución alternativa de renderizar primero, extraer texto y buscar páginas manualmente.
Configura ElementQuerySelectors en RenderingOptions antes de renderizar, luego llama a GetElementLocations en el PdfDocument resultante:
: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 = @"
ashboard</h1>
ss='kpi-card'>Revenue: $1.2M</div>
ss='kpi-card'>Growth: 18%</div>
omparison</h1>
ss='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 As New ChromePdfRenderer()
' Configure which elements should be queryable after rendering
renderer.RenderingOptions.ElementQuerySelectors = New String() {"h1", ".kpi-card"}
Dim html As String = "
ashboard</h1>
ss='kpi-card'>Revenue: $1.2M</div>
ss='kpi-card'>Growth: 18%</div>
omparison</h1>
ss='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 devuelve un List<RenderedElementLocation> que contiene una entrada por cada elemento coincidente:
| Propiedad | Tipo | Lo que te dice |
|---|---|---|
Text |
string |
El texto dentro del elemento. |
PageIndex |
int |
En qué página terminó el elemento (comienza en 0). |
Rectangle |
IronSoftware.Drawing.Rectangle |
La posición del elemento en la página, en puntos PDF (1/72 de pulgada). El origen está en la parte inferior izquierda. |
ElementIndex |
int |
El orden del elemento en el HTML original (comienza en 0). |
ResetElementLocationCache para forzar un nuevo escaneo en la siguiente llamada GetElementLocations.Combinando marcadores automáticos con el seguimiento de la ubicación de elementos
Los marcadores automáticos y las consultas de ubicación de elementos se pueden combinar en un solo renderizado. Por ejemplo, generando un esquema a partir de encabezados h1/h2 mientras se rastrea la ubicación en la página de los elementos .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 = @"
ice #2026-001</h1>
Items</h2>
ces rendered for Q1.</p>
='invoice-total'>Subtotal: $4,500.00</p>
ice #2026-002</h1>
Items</h2>
lting hours for Q2.</p>
='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 = "
ice #2026-001</h1>
Items</h2>
ces rendered for Q1.</p>
='invoice-total'>Subtotal: $4,500.00</p>
ice #2026-002</h1>
Items</h2>
lting hours for Q2.</p>
='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")
¿Cómo puedo recuperar y navegar por marcadores existentes?
IronPDF facilita la recuperación y visualización de marcadores en un documento PDF. Navegar a través del árbol de marcadores es sencillo y proporciona acceso sin complicaciones a diferentes secciones. Esta funcionalidad es esencial al trabajar con PDFs existentes que necesitan edición o al implementar funciones como buscar y reemplazar texto dentro de secciones marcadas. Considera el ejemplo de documento con marcadores de múltiples capas arriba.
El marcador "Examen" tiene una propiedad Children que apunta a los marcadores "Fecha1" y "Fecha2". El marcador "Fecha1" tiene una propiedad NextBookmark que apunta al marcador "Fecha2". Además, el marcador "Fecha1" tiene una propiedad Children que contiene el marcador "Documento". Esta estructura interconectada permite patrones de navegación sofisticados y organización de documentos.
Para recuperar todos los marcadores en el documento PDF abierto, usa el método GetAllBookmarks. Esto proporciona una lista completa de todos los marcadores, permitiendo analizar y utilizar la estructura de marcadores:
: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.Aprende cómo crear una Tabla de Contenidos al generar PDF desde HTML en el siguiente artículo: "Crear una Tabla de Contenidos con IronPDF."
¿Listo para ver qué más puedes hacer? Consulta nuestra página de tutoriales aquí: Organizar PDFs
Preguntas Frecuentes
¿Cómo añado marcadores a un documento PDF en C#?
IronPDF facilita la adición de marcadores a documentos PDF en C#. Puede utilizar el método AddBookmarkAtEnd para añadir marcadores de una sola capa especificando el nombre del marcador y el índice de la página. Por ejemplo: pdf.Bookmarks.AddBookMarkAtEnd("Capítulo 1", 1). Esto crea ayudas de navegación similares a un índice que ayudan a los usuarios a saltar rápidamente a las secciones clave.
¿Cuál es la diferencia entre los métodos AddBookmarkAtEnd y AddBookmarkAtStart?
IronPDF proporciona dos métodos para la colocación de marcadores. El método AddBookMarkAtEnd añade marcadores al final de la lista de marcadores existente, mientras que AddBookMarkAtStart inserta marcadores al principio de la lista. Ambos métodos hacen referencia a índices de página específicos para una navegación precisa dentro del documento.
¿Puedo crear estructuras jerárquicas de marcadores con varios niveles?
Sí, IronPDF permite crear jerarquías de marcadores multicapa en una estructura de árbol. Esto resulta especialmente útil para organizar documentos complejos con secciones anidadas, de forma similar a como se estructuraría un índice detallado con capítulos y subcapítulos.
¿Es compatible la funcionalidad de los marcadores en distintos sistemas operativos?
La función de marcadores de IronPDF funciona perfectamente en entornos Windows, Linux y macOS. Puede añadir, editar y gestionar marcadores de PDF independientemente de su sistema operativo, lo que garantiza una funcionalidad coherente en diferentes plataformas.
¿Qué operaciones puedo realizar en los marcadores PDF existentes?
Con IronPDF, puede realizar varias operaciones en esquemas PDF existentes, como añadir nuevos marcadores, reordenarlos, editar las propiedades de los marcadores y eliminar marcadores no deseados. Esto le proporciona un control total sobre la organización y estructura de sus archivos PDF.
¿Cómo se muestran los marcadores cuando los usuarios abren el PDF?
En Adobe Acrobat Reader y otros visores de PDF similares, los marcadores creados con IronPDF aparecen como contornos en la barra lateral izquierda. Funcionan como una tabla de contenidos interactiva, que permite a los lectores navegar por documentos complejos de manera eficiente haciendo clic para saltar a secciones específicas.

