获取、更新和扩展书签

获取书签

Document 对象的 OutlineCollection 集合包含了 PDF 文件的所有书签。本文解释了如何从 PDF 文件中获取书签,以及如何获取特定书签所在的页面。

要获取书签,请遍历 OutlineCollection 集合,并在 OutlineItemCollection 中获取每个书签。 The OutlineItemCollection 提供对所有书签属性的访问。以下代码片段显示了如何从 PDF 文件中获取书签。

void GettingBookmarks() {

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

// 打开文档

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

// 遍历所有书签

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


Console::WriteLine(u"标题 :- " + outlineItem->get_Title());


Console::WriteLine(u"是否斜体 :- " + outlineItem->get_Italic());


Console::WriteLine(u"是否加粗 :- " + outlineItem->get_Bold());


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

}
}

获取书签的页码

一旦添加了书签,就可以通过获取与书签对象关联的目标页码来找出它所在的页面。

void GettingBookmarksPageNumber() {


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

// 创建 PdfBookmarkEditor

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

// 打开 PDF 文件

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

// 提取书签

auto bookmarks = bookmarkEditor->ExtractBookmarks();

for (auto bookmark : bookmarks) {


String strLevelSeprator("");


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



strLevelSeprator += u"---- ";


}


Console::WriteLine(u"标题 :- " + strLevelSeprator + bookmark->get_Title());


Console::WriteLine(u"页码 :- " + strLevelSeprator + bookmark->get_PageNumber());


Console::WriteLine(u"页面动作 :- " + strLevelSeprator + bookmark->get_Action());

}
}

更新 PDF 文档中的书签

要更新 PDF 文件中的书签,首先通过指定书签的索引从 Document 对象的 OutlineColletion 集合中获取特定的书签。 一旦将书签检索到 OutlineItemCollection 对象中,就可以更新其属性,然后使用 Save 方法保存更新的 PDF 文件。 以下代码片段展示了如何在 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 文档中的子书签

要更新子书签:

  1. 通过首先获取父书签,然后使用适当的索引值获取子书签,从 PDF 文件中检索要更新的子书签。
  2. 使用 Save 方法保存更新后的 PDF 文件。

以下代码片段向您展示如何更新 PDF 文档中的子书签。

void UpdateChildBookmarksInPDFDocument() {


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

// 打开文档

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

// 获取书签对象

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

// 获取子书签对象

auto childOutline = pdfOutline->idx_get(1);


// 更新书签对象

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

childOutline->set_Italic(true);

childOutline->set_Bold(true);

// 将目标页面设置为 2

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


// 保存输出

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

查看文档时展开书签

书签保存在 Document 对象的 OutlineItemCollection 集合中,后者又在 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());

// 遍历 PDF 文件书签集合中的每个大纲项

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

// 设置大纲项的打开状态

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

}

// 保存 PDF 文件

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