Получить, обновить и расширить закладку
Получить закладки
Коллекция OutlineCollection объекта Document содержит все закладки PDF файла. Эта статья объясняет, как получить закладки из PDF файла и как узнать, на какой странице находится конкретная закладка.
Чтобы получить закладки, выполните перебор коллекции OutlineCollection и получите каждую закладку в OutlineItemCollection. The OutlineItemCollection предоставляет доступ ко всем атрибутам закладки. Следующий фрагмент кода показывает, как получить закладки из PDF файла.
void GettingBookmarks() {
String _dataDir("C:\\Samples\\Bookmarks\\");
// Open document
auto pdfDocument = MakeObject<Document>(_dataDir + u"UpdateBookmarks.pdf");
// Loop through all the bookmarks
for (auto outlineItem : pdfDocument->get_Outlines()) {
Console::WriteLine(u"Title :- " + outlineItem->get_Title());
Console::WriteLine(u"Is Italic :- " + outlineItem->get_Italic());
Console::WriteLine(u"Is Bold :- " + outlineItem->get_Bold());
Console::WriteLine(u"Color :- {0}", outlineItem->get_Color());
}
}
Получение номера страницы закладки
После добавления закладки вы можете узнать, на какой странице она находится, получив номер страницы назначения, связанный с объектом закладки.
void GettingBookmarksPageNumber() {
String _dataDir("C:\\Samples\\Bookmarks\\");
// Create PdfBookmarkEditor
auto bookmarkEditor = MakeObject<Aspose::Pdf::Facades::PdfBookmarkEditor>();
// Open PDF file
bookmarkEditor->BindPdf(_dataDir + u"UpdateBookmarks.pdf");
// Extract bookmarks
auto bookmarks = bookmarkEditor->ExtractBookmarks();
for (auto bookmark : bookmarks) {
String strLevelSeprator("");
for (int i = 1; i < bookmark->get_Level(); i++) {
strLevelSeprator += u"---- ";
}
Console::WriteLine(u"Title :- " + strLevelSeprator + bookmark->get_Title());
Console::WriteLine(u"Page Number :- " + strLevelSeprator + bookmark->get_PageNumber());
Console::WriteLine(u"Page Action :- " + strLevelSeprator + bookmark->get_Action());
}
}
Обновление закладок в PDF документе
Чтобы обновить закладку в PDF файле, сначала получите конкретную закладку из коллекции OutlineCollection объекта Document, указав индекс закладки. Получив закладку в объект OutlineItemCollection, вы можете обновить её свойства, а затем сохранить обновленный PDF файл, используя метод Save. Примеры кода ниже показывают, как обновить закладки в PDF документе.
void UpdateBookmarksInPDFDocument() {
String _dataDir("C:\\Samples\\Bookmarks\\");
// Открыть документ
auto pdfDocument = MakeObject<Document>(_dataDir + u"UpdateBookmarks.pdf");
// Получить объект закладки
auto pdfOutline = pdfDocument->get_Outlines()->idx_get(1);
// Обновить объект закладки
pdfOutline->set_Title(u"Updated Outline");
pdfOutline->set_Italic(true);
pdfOutline->set_Bold(true);
// Установить целевую страницу как 2
pdfOutline->set_Destination(MakeObject<Aspose::Pdf::Annotations::GoToAction>(pdfDocument->get_Pages()->idx_get(2)));
// Сохранить результат
pdfDocument->Save(_dataDir + u"Bookmarkupdated_output.pdf");
}
Обновление дочерних закладок в PDF-документе
Чтобы обновить дочернюю закладку:
- Извлеките дочернюю закладку, которую вы хотите обновить, из PDF-файла, сначала получив родительскую закладку, а затем дочернюю закладку, используя соответствующие индексные значения.
- Сохраните обновленный PDF-файл, используя метод Save.
Следующий фрагмент кода показывает, как обновить дочерние закладки в PDF-документе.
void UpdateChildBookmarksInPDFDocument() {
String _dataDir("C:\\Samples\\Bookmarks\\");
// Open document
auto pdfDocument = MakeObject<Document>(_dataDir + u"UpdateBookmarks.pdf");
// Get a bookmark object
auto pdfOutline = pdfDocument->get_Outlines()->idx_get(1);
// Get child bookmark object
auto childOutline = pdfOutline->idx_get(1);
// Update the bookmark object
childOutline->set_Title(u"Updated Outline");
childOutline->set_Italic(true);
childOutline->set_Bold(true);
// Set the target page as 2
childOutline->set_Destination(MakeObject<Aspose::Pdf::Annotations::GoToAction>(pdfDocument->get_Pages()->idx_get(2)));
// Save output
pdfDocument->Save(_dataDir + u"Bookmarkupdated_output.pdf");
}
Расширенные закладки при просмотре документа
Закладки хранятся в коллекции OutlineItemCollection объекта Document, которая, в свою очередь, находится в коллекции OutlineCollection. Однако у нас может возникнуть необходимость, чтобы все закладки были развернуты при просмотре PDF файла.
Чтобы выполнить это требование, мы можем установить открытый статус для каждого элемента плана/закладки как Open. Следующий фрагмент кода показывает, как установить открытый статус для каждой закладки как развернутой в PDF документе.
void ExpandedBookmarks() {
String _dataDir("C:\\Samples\\Bookmarks\\");
auto doc = MakeObject<Document>(_dataDir + u"UpdateBookmarks.pdf");
// установить режим просмотра страницы, т.е. показать миниатюры, полноэкранный режим, показать панель вложений
doc->set_PageMode(PageMode::UseOutlines);
// вывести общее количество закладок в PDF файле
Console::WriteLine(doc->get_Outlines()->get_Count());
// пройти через каждый элемент Outline в коллекции планов PDF файла
for (int counter = 1; counter <= doc->get_Outlines()->get_Count(); counter++) {
// установить открытый статус для элемента Outline
doc->get_Outlines()->idx_get(counter)->set_Open(true);
}
// сохранить PDF файл
doc->Save(_dataDir + u"Bookmarks_Expanded.pdf");
}