Obtener, Actualizar y Expandir un Marcador

Obtener Marcadores

La colección OutlineCollection del objeto Document contiene todos los marcadores de un archivo PDF. Este artículo explica cómo obtener marcadores de un archivo PDF y cómo obtener en qué página se encuentra un marcador en particular.

Para obtener los marcadores, recorra la colección OutlineCollection y obtenga cada marcador en la OutlineItemCollection. El OutlineItemCollection proporciona acceso a todos los atributos del marcador. El siguiente fragmento de código muestra cómo obtener marcadores del archivo PDF.

void GettingBookmarks() {

String _dataDir("C:\\Samples\\Bookmarks\\");

// Abrir documento

auto pdfDocument = MakeObject<Document>(_dataDir + u"UpdateBookmarks.pdf");

// Recorrer todos los marcadores

for (auto outlineItem : pdfDocument->get_Outlines()) {


Console::WriteLine(u"Título :- " + outlineItem->get_Title());


Console::WriteLine(u"Es Cursiva :- " + outlineItem->get_Italic());


Console::WriteLine(u"Es Negrita :- " + outlineItem->get_Bold());


Console::WriteLine(u"Color :- {0}", outlineItem->get_Color());

}
}

Obtener el Número de Página de un Marcador

Una vez que hayas agregado un marcador, puedes averiguar en qué página está obteniendo el PageNumber de destino asociado con el objeto Bookmark.

void GettingBookmarksPageNumber() {


String _dataDir("C:\\Samples\\Bookmarks\\");

// Crear PdfBookmarkEditor

auto bookmarkEditor = MakeObject<Aspose::Pdf::Facades::PdfBookmarkEditor>();

// Abrir archivo PDF

bookmarkEditor->BindPdf(_dataDir + u"UpdateBookmarks.pdf");

// Extraer marcadores

auto bookmarks = bookmarkEditor->ExtractBookmarks();

for (auto bookmark : bookmarks) {


String strLevelSeprator("");


for (int i = 1; i < bookmark->get_Level(); i++) {



strLevelSeprator += u"---- ";


}


Console::WriteLine(u"Título :- " + strLevelSeprator + bookmark->get_Title());


Console::WriteLine(u"Número de Página :- " + strLevelSeprator + bookmark->get_PageNumber());


Console::WriteLine(u"Acción de Página :- " + strLevelSeprator + bookmark->get_Action());

}
}

Actualizar Marcadores en un Documento PDF

Para actualizar un marcador en un archivo PDF, primero obtén el marcador específico de la colección OutlineColletion del objeto Document especificando el índice del marcador. Una vez que hayas recuperado el marcador en el objeto OutlineItemCollection, puedes actualizar sus propiedades y luego guardar el archivo PDF actualizado utilizando el método Save. Los siguientes fragmentos de código muestran cómo actualizar marcadores en un documento PDF.

void UpdateBookmarksInPDFDocument() {

String _dataDir("C:\\Samples\\Bookmarks\\");

// Abrir documento

auto pdfDocument = MakeObject<Document>(_dataDir + u"UpdateBookmarks.pdf");

// Obtener un objeto de marcador

auto pdfOutline = pdfDocument->get_Outlines()->idx_get(1);

// Actualizar el objeto de marcador

pdfOutline->set_Title(u"Updated Outline");

pdfOutline->set_Italic(true);

pdfOutline->set_Bold(true);

// Establecer la página de destino como 2

pdfOutline->set_Destination(MakeObject<Aspose::Pdf::Annotations::GoToAction>(pdfDocument->get_Pages()->idx_get(2)));

// Guardar salida

pdfDocument->Save(_dataDir + u"Bookmarkupdated_output.pdf");
}

Actualizar Marcadores Hijos en un Documento PDF

Para actualizar un marcador hijo:

  1. Recupere el marcador hijo que desea actualizar del archivo PDF obteniendo primero el marcador principal y luego el marcador hijo utilizando valores de índice apropiados.
  2. Guarde el archivo PDF actualizado utilizando el método Save.

El siguiente fragmento de código le muestra cómo actualizar marcadores hijos en un documento PDF.

void UpdateChildBookmarksInPDFDocument() {


String _dataDir("C:\\Samples\\Bookmarks\\");

// Abrir documento

auto pdfDocument = MakeObject<Document>(_dataDir + u"UpdateBookmarks.pdf");

// Obtener un objeto de marcador

auto pdfOutline = pdfDocument->get_Outlines()->idx_get(1);

// Obtener objeto de marcador hijo

auto childOutline = pdfOutline->idx_get(1);


// Actualizar el objeto de marcador

childOutline->set_Title(u"Updated Outline");

childOutline->set_Italic(true);

childOutline->set_Bold(true);

// Establecer la página de destino como 2

childOutline->set_Destination(MakeObject<Aspose::Pdf::Annotations::GoToAction>(pdfDocument->get_Pages()->idx_get(2)));


// Guardar salida

pdfDocument->Save(_dataDir + u"Bookmarkupdated_output.pdf");
}

Marcadores ampliados al ver el documento

Los marcadores se mantienen en la colección OutlineItemCollection del objeto Document, que a su vez está en la colección OutlineCollection. Sin embargo, podemos tener el requisito de que todos los marcadores estén expandidos al ver el archivo PDF.

Para cumplir con este requisito, podemos establecer el estado abierto para cada elemento de esquema/marcador como Abierto. El siguiente fragmento de código muestra cómo establecer el estado abierto para cada marcador como expandido en un documento PDF.

void ExpandedBookmarks() {


String _dataDir("C:\\Samples\\Bookmarks\\");


auto doc = MakeObject<Document>(_dataDir + u"UpdateBookmarks.pdf");

// establecer el modo de vista de página, es decir, mostrar miniaturas, pantalla completa, mostrar panel de adjuntos

doc->set_PageMode(PageMode::UseOutlines);

// imprimir el conteo total de marcadores en el archivo PDF

Console::WriteLine(doc->get_Outlines()->get_Count());

// recorrer cada elemento de esquema en la colección de esquemas del archivo PDF

for (int counter = 1; counter <= doc->get_Outlines()->get_Count(); counter++) {


// establecer estado abierto para el elemento de esquema


doc->get_Outlines()->idx_get(counter)->set_Open(true);

}

// guardar el archivo PDF

doc->Save(_dataDir + u"Bookmarks_Expanded.pdf");
}