Cómo añadir marcadores y esquemas en PDF en Java
La biblioteca de Java de IronPDF te permite añadir programáticamente marcadores y esquemas a documentos PDF a través de la clase BookmarkManager, soportando estructuras de marcadores de capa única y multicapa con puntos de navegación personalizables.
Inicio rápido: Agregar marcadores PDF en Java
- Instala la biblioteca Java de IronPDF y configura tu clave de licencia
- Carga tu PDF usando
PdfDocument.fromFile() - Obtén el
BookmarkManagerconpdf.getBookmark() - Añade marcadores utilizando
addBookMarkAtEnd("Title", pageNumber) - Guarda el PDF con
pdf.saveAs()
```java :title=Inicio rápido //:path=/static-assets/ironpdf-java/content-code-examples/how-to/bookmarks/quickstart.java PdfDocument pdf = PdfDocument.fromFile(Ruta.de("documento.pdf")); BookmarkManager marcadores = pdf.getBookmark(); bookmarks.addBookMarkAtEnd("Capítulo 1", 0); pdf.saveAs(Ruta.de("bookmarked.pdf"));
Los marcadores PDF mejoran la usabilidad y navegación de tus documentos. Los esquemas proporcionan navegación estructurada dentro de los PDFs, permitiendo a los usuarios saltar directamente a secciones clave, como un índice. Esto resulta esencial al trabajar con documentos extensos, informes o PDFs de múltiples capítulos que requieren navegación organizada.
IronPDF simplifica la manipulación de PDF en aplicaciones Java. La API de marcadores te ofrece métodos sencillos para crear marcadores personalizados en archivos PDF. La biblioteca se integra con aplicaciones Java y admite diversas características de manipulación de PDF más allá de los marcadores, incluyendo [fusión de PDFs](https://ironpdf.com/java/how-to/java-merge-pdf-tutorial/), [creación de formularios](https://ironpdf.com/java/how-to/create-forms/) y [adición de marcas de agua](https://ironpdf.com/java/how-to/custom-watermark/).
<div class="hsg-featured-snippet">
<h2>Cómo añadir marcadores y esquemas a PDF</h2>
<ol>
<li><a href="https://ironpdf.com/java/#download-modal">Instala la biblioteca Java para agregar marcadores a PDFs</a></li>
<li>Usa la clase <strong>PdfDocument</strong> para cargar un archivo PDF existente en Java</li>
<li>Crea y personaliza marcadores con la clase <strong>BookmarkManager</strong></li>
<li>Utilice <code>addBookMarkAtEnd</code> para añadir marcadores a páginas específicas del PDF</li>
<li>Guarda el documento PDF que contiene el nuevo esquema y marcadores</li>
</ol>
</div>
## ¿Qué necesito antes de empezar?
Antes de implementar marcadores PDF, confirma que IronPDF está configurado en tu proyecto Java. La biblioteca requiere Java 8 o superior y se integra a través de [Maven o Gradle](https://central.sonatype.com/artifact/com.ironsoftware/ironpdf). Agrega la dependencia de IronPDF al archivo de construcción de tu proyecto. Para instrucciones detalladas de configuración, consulta la [Guía de inicio](https://ironpdf.com/java/docs/).
Se requiere una clave de licencia válida para uso en desarrollo y producción. Configura la clave de licencia al inicio de tu aplicación antes de llamar a ningún método de IronPDF. Para información sobre las opciones de licencia, visita la [guía de licencias](https://ironpdf.com/java/get-started/license-keys/).
ConsejosTodos los índices de página en IronPDF utilizan numeración basada en cero. La página 1 de tu documento es el índice 0, la página 2 es el índice 1, y así sucesivamente.
## ¿Cómo agrego esquemas y marcadores a un PDF?
Los siguientes ejemplos usan este [PDF de muestra](/static-assets/ironpdf-java/howto/bookmarks/NovelSample.pdf) para demostrar la creación de esquemas y marcadores. El proceso involucra cargar un documento PDF existente y usar `BookmarkManager` de IronPDF para añadir puntos de navegación a lo largo del documento.
### ¿Cómo puedo añadir una sola capa de marcadores?
Una lista de marcadores plana es adecuada para documentos con una estructura clara y no jerárquica: informes, manuales de producto o presentaciones donde cada sección es independiente. Después de cargar el PDF desde una ruta de archivo usando `PdfDocument.fromFile()`, recupera el objeto `BookmarkManager` para comenzar a añadir marcadores.
Los métodos `addBookMarkAtEnd` y `addBookMarkAtStart` añaden entradas al final o al inicio de la colección de marcadores respectivamente. Estos métodos te proporcionan flexibilidad para organizar marcadores que coincidan con la estructura de tu documento. Cada entrada toma un título para mostrar y un índice de página basado en cero.
```java
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/bookmarks/single-layer.java
import java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.bookmark.BookmarkManager;
public class Main {
public static void main(String[] args) throws IOException {
// Set the license key for IronPDF
License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
// Load the PDF file
PdfDocument pdf = PdfDocument.fromFile(Path.of("NovelSample.pdf"));
// Get BookmarkManager object to manage bookmarks
BookmarkManager marcadores = pdf.getBookmark();
// Add bookmarks at the end of the bookmark collection
bookmarks.addBookMarkAtEnd("Title Page", 0);
bookmarks.addBookMarkAtEnd("Table of Contents", 1);
bookmarks.addBookMarkAtEnd("Dedication Page", 2);
bookmarks.addBookMarkAtEnd("First Page", 3);
bookmarks.addBookMarkAtStart("Page 4", 6);
// Save the modified PDF with bookmarks
pdf.saveAs(Ruta.de("bookmarked.pdf"));
}
}
Con el visor de PDF anterior, verifica la tabla de contenido en la esquina superior izquierda de la mayoría de los navegadores para ver todos los marcadores añadidos. Esta estructura de marcadores plana proporciona navegación directa para documentos con necesidades organizativas simples.
¿Cómo crear varias capas de marcadores?
Los marcadores anidados son la elección correcta para documentación técnica, informes de investigación o cualquier documento de múltiples capítulos donde los lectores necesiten navegar no solo a capítulos, sino a secciones dentro de esos capítulos. Comienza con los mismos marcadores planos creados en la sección anterior, luego usa insertBookmark para añadir entradas en nuevas capas.
El método insertBookmark acepta cuatro parámetros: el nombre del marcador, el índice de la página objetivo, el nombre del marcador padre y el nombre del marcador hermano precedente. Pasar un nombre de marcador padre crea una entrada hija anidada debajo de ella. Establecer el parámetro hermano en null coloca la nueva entrada como el primer hijo de ese padre.
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/bookmarks/multi-layer.java
import java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.bookmark.BookmarkManager;
public class Main {
public static void main(String[] args) throws IOException {
// Set the license key
License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
// Load the PDF file
PdfDocument pdf = PdfDocument.fromFile(Path.of("NovelSample.pdf"));
// Get BookmarkManager object
BookmarkManager marcadores = pdf.getBookmark();
// Add top-level bookmarks at the end
bookmarks.addBookMarkAtEnd("Title Page", 0);
bookmarks.addBookMarkAtEnd("Table of Contents", 1);
bookmarks.addBookMarkAtEnd("Dedication", 2);
// Insert second-layer bookmarks as children of existing entries
bookmarks.insertBookmark("First Page", 3, "Table of Contents", null);
bookmarks.insertBookmark("Second Page", 4, "Table of Contents", "First Page");
bookmarks.insertBookmark("End of Sample", 7, "Title Page", null);
bookmarks.insertBookmark("Fourth page", 6, "Table of Contents", "Second Page");
// Save the modified PDF with nested bookmarks
pdf.saveAs(Path.of("multiLayer.pdf"));
}
}
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/bookmarks/multi-layer.java
import java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.bookmark.BookmarkManager;
public class Main {
public static void main(String[] args) throws IOException {
// Set the license key
License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
// Load the PDF file
PdfDocument pdf = PdfDocument.fromFile(Path.of("NovelSample.pdf"));
// Get BookmarkManager object
BookmarkManager marcadores = pdf.getBookmark();
// Add top-level bookmarks at the end
bookmarks.addBookMarkAtEnd("Title Page", 0);
bookmarks.addBookMarkAtEnd("Table of Contents", 1);
bookmarks.addBookMarkAtEnd("Dedication", 2);
// Insert second-layer bookmarks as children of existing entries
bookmarks.insertBookmark("First Page", 3, "Table of Contents", null);
bookmarks.insertBookmark("Second Page", 4, "Table of Contents", "First Page");
bookmarks.insertBookmark("End of Sample", 7, "Title Page", null);
bookmarks.insertBookmark("Fourth page", 6, "Table of Contents", "Second Page");
// Save the modified PDF with nested bookmarks
pdf.saveAs(Path.of("multiLayer.pdf"));
}
}
El PDF anterior muestra la estructura de árbol de los marcadores creados por insertBookmark. Expande el panel de esquema para verificar cómo cada entrada hija se anida debajo de su padre. Este enfoque en capas es adecuado para informes con capítulos, subcapítulos y apéndices.
¿Cómo recuperar los marcadores existentes de un PDF?
Leer datos de marcadores de un PDF es un requisito previo cuando se actualizan documentos sin reconstruir toda la estructura de navegación. IronPDF hace esto accesible a través de la misma interfaz BookmarkManager usada para añadir marcadores. Carga el PDF con PdfDocument.fromFile(), accede al BookmarkManager, luego llama getBookmarks() para recuperar todos los marcadores de nivel superior.
Usa get(index) para acceder a un marcador específico por su posición en la lista. El método getText() devuelve la etiqueta de visualización del marcador, mientras que getPageIndex() devuelve el número de página basado en cero que apuntan. Los marcadores hijos no están incluidos en la lista plana devuelta por getBookmarks(); accédelos a través del método getChildren() de cada marcador padre.
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/bookmarks/retrieve-bookmarks.java
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.bookmark.Bookmark;
import com.ironsoftware.ironpdf.bookmark.BookmarkManager;
public class Main {
public static void main(String[] args) throws IOException {
// Set the license key
License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
// Load the PDF file with bookmarks
PdfDocument pdf = PdfDocument.fromFile(Path.of("bookmarked.pdf"));
// Retrieve the bookmark manager
BookmarkManager marcadores = pdf.getBookmark();
// Retrieve list of all bookmarks (includes child bookmarks)
List<Bookmark> bookmarkList = bookmarks.getBookmarks();
// Access a specific bookmark by zero-based index
Bookmark bookmark = bookmarkList.get(2);
// Print bookmark details
System.out.println("Bookmark Title: " + bookmark.getText());
System.out.println("Page Number: " + bookmark.getPageIndex());
// Check if bookmark has children
if (bookmark.getChildren() != null && !bookmark.getChildren().isEmpty()) {
System.out.println("Number of child bookmarks: " + bookmark.getChildren().size());
}
}
}
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/bookmarks/retrieve-bookmarks.java
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.bookmark.Bookmark;
import com.ironsoftware.ironpdf.bookmark.BookmarkManager;
public class Main {
public static void main(String[] args) throws IOException {
// Set the license key
License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
// Load the PDF file with bookmarks
PdfDocument pdf = PdfDocument.fromFile(Path.of("bookmarked.pdf"));
// Retrieve the bookmark manager
BookmarkManager marcadores = pdf.getBookmark();
// Retrieve list of all bookmarks (includes child bookmarks)
List<Bookmark> bookmarkList = bookmarks.getBookmarks();
// Access a specific bookmark by zero-based index
Bookmark bookmark = bookmarkList.get(2);
// Print bookmark details
System.out.println("Bookmark Title: " + bookmark.getText());
System.out.println("Page Number: " + bookmark.getPageIndex());
// Check if bookmark has children
if (bookmark.getChildren() != null && !bookmark.getChildren().isEmpty()) {
System.out.println("Number of child bookmarks: " + bookmark.getChildren().size());
}
}
}
getBookmarks() devuelve solo una lista plana de marcadores de nivel superior. Para recorrer todo el árbol de marcadores, llama recursivamente getChildren() en cada marcador que tenga entradas anidadas.Este patrón de recuperación es útil cuando se audita la estructura de navegación de un PDF existente antes de su distribución, o cuando se construyen herramientas que necesitan validar que las secciones requeridas están correctamente marcadas antes de la publicación.
¿Cómo puedo insertar un marcador en un índice específico?
Insertar marcadores en una posición específica te permite actualizar PDFs existentes de manera incremental, agregando nuevas secciones sin reconstruir completamente el esquema desde cero. Esto es particularmente útil cuando los PDFs se generan o modifican en una canalización y se añade contenido nuevo aguas abajo.
Recupera la lista plana de marcadores usando getBookmarks(), selecciona el marcador objetivo por su índice de lista, luego llama addNextBookmark para insertar un nuevo hermano inmediatamente después de él. Usa addChildBookmark para colocar una nueva entrada un nivel más profundo, anidado bajo el marcador seleccionado. Ambos métodos aceptan una cadena de título y un índice de página basado en cero.
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/bookmarks/insert-at-index.java
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.bookmark.Bookmark;
import com.ironsoftware.ironpdf.bookmark.BookmarkManager;
public class Main {
public static void main(String[] args) throws IOException {
// Set the license key
License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
// Load the PDF modified in the multi-layer example
PdfDocument pdf = PdfDocument.fromFile(Path.of("multiLayer.pdf"));
// Get the BookmarkManager
BookmarkManager marcadores = pdf.getBookmark();
// Retrieve the flat bookmark list
List<Bookmark> bookmarkList = bookmarks.getBookmarks();
// Select a bookmark at a specific index
Bookmark bookmark = bookmarkList.get(5);
// Insert a new bookmark after the selected entry
bookmark.addNextBookmark("Fourth Page", 6);
// Add a child bookmark under the selected entry
bookmark.addChildBookmark("Section 1", 7);
// Save the updated PDF
pdf.saveAs(Path.of("specificIndex.pdf"));
}
}
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/bookmarks/insert-at-index.java
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.bookmark.Bookmark;
import com.ironsoftware.ironpdf.bookmark.BookmarkManager;
public class Main {
public static void main(String[] args) throws IOException {
// Set the license key
License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
// Load the PDF modified in the multi-layer example
PdfDocument pdf = PdfDocument.fromFile(Path.of("multiLayer.pdf"));
// Get the BookmarkManager
BookmarkManager marcadores = pdf.getBookmark();
// Retrieve the flat bookmark list
List<Bookmark> bookmarkList = bookmarks.getBookmarks();
// Select a bookmark at a specific index
Bookmark bookmark = bookmarkList.get(5);
// Insert a new bookmark after the selected entry
bookmark.addNextBookmark("Fourth Page", 6);
// Add a child bookmark under the selected entry
bookmark.addChildBookmark("Section 1", 7);
// Save the updated PDF
pdf.saveAs(Path.of("specificIndex.pdf"));
}
}
El método addNextBookmark inserta la nueva entrada como un hermano del marcador seleccionado, inmediatamente después de él en la lista. El método addChildBookmark coloca la nueva entrada un nivel más profundo, anidado bajo el marcador seleccionado. Ambos métodos aceptan una cadena de título y un índice de página basado en cero.
¿Cuáles son los siguientes pasos para los marcadores PDF en Java?
Los marcadores PDF brindan a los usuarios un camino de navegación directo a través de documentos complejos sin desplazarse. El BookmarkManager de IronPDF maneja toda la gama de operaciones de marcadores: añadir listas de entradas planas, construir esquemas profundos de varios niveles, recuperar entradas existentes e insertar en posiciones específicas.
Para continuar trabajando con la estructura del documento y las características de navegación, explora estos recursos relacionados:
- Divide PDFs en Java: crea documentos más pequeños e independientes que llevan su propia estructura de marcadores
- Imprime PDFs en Java: envía documentos con marcadores a una impresora manteniendo la navegación
- Tutoriales de Java PDF: ejemplos adicionales de extremo a extremo para flujos de trabajo comunes de PDF
- Agrega anotaciones a PDFs en Java: adjunta comentarios y marcas a ubicaciones específicas de la página
- Ejemplos de IronPDF for Java: ejemplos de código para copiar y pegar para la API completa de IronPDF for Java
Comience su prueba gratuita para añadir marcadores, esquemas y otras características de navegación a su flujo de trabajo Java PDF. Para comprar una licencia para uso en producción, ver opciones de licencia.
Preguntas Frecuentes
¿Cómo añado marcadores a un documento PDF en Java?
Cargue su PDF usando PdfDocument.fromFile(), luego llame a pdf.getBookmark() para obtener el BookmarkManager. Use addBookMarkAtEnd("Title", pageIndex) para agregar cada marcador por nombre de visualización y número de página basado en cero, luego guarde con pdf.saveAs().
¿Cuáles son los requisitos para agregar marcadores a un PDF en Java?
Necesita Java 8 o superior, la biblioteca de IronPDF agregada como dependencia de Maven o Gradle, y una clave de licencia válida configurada con License.setLicenseKey() antes de cualquier llamada a IronPDF. No se requieren herramientas o marcos adicionales.
¿Puedo crear jerarquías de marcadores de varios niveles en los PDF?
Sí. Agregue primero marcadores de nivel superior con addBookMarkAtEnd, luego llame a insertBookmark(name, pageIndex, parentName, siblingName) para anidar entradas secundarias bajo un marcador principal. Pase null como el nombre del hermano para colocar la nueva entrada como el primer hijo.
¿Cuál es la diferencia entre addBookMarkAtEnd e insertBookmark?
addBookMarkAtEnd agrega una nueva entrada de nivel superior al final de la lista de marcadores. insertBookmark coloca un marcador en una posición específica dentro de la jerarquía especificando un nombre de marcador principal y un hermano precedente opcional, permitiendo esquemas anidados.
¿Cómo leo marcadores existentes de un PDF en Java?
Llame a pdf.getBookmark().getBookmarks() para recuperar una lista plana de marcadores de nivel superior. Acceda a entradas individuales por índice usando list.get(index). Use bookmark.getText() para el título y bookmark.getPageIndex() para el número de página basado en cero. Los marcadores secundarios son accesibles a través de bookmark.getChildren().
¿Cómo inserto un marcador después de un marcador existente específico?
Recupere la lista de marcadores con getBookmarks(), seleccione la entrada de destino por índice, luego llame a bookmark.addNextBookmark("Title", pageIndex) para insertar un hermano inmediatamente después de él, o bookmark.addChildBookmark("Title", pageIndex) para anidar una nueva entrada debajo de él.


