Работа с закладками
Закладки определяют в документе Microsoft Word местоположения или фрагменты, которые вы указываете и идентифицируете для дальнейшего использования. Например, вы можете использовать закладку для определения текста, который хотите просмотреть позже. Вместо того чтобы прокручивать документ в поисках нужного текста, вы можете перейти к нему с помощью диалогового окна “Закладки”.
Действия, которые можно выполнить с закладками с помощью Aspose.Words, аналогичны тем, которые вы можете выполнить с помощью Microsoft Word. Вы можете вставить новую закладку, удалить, переместить в закладку, получить или задать название закладки, получить или задать текст, заключенный в ней. С помощью Aspose.Words вы также можете использовать закладки в отчетах или документах, чтобы вставить в них некоторые данные или применить специальное форматирование к их содержимому. Вы также можете использовать закладки для извлечения текста из определенного места в вашем документе.
Вставить закладку
Используйте start_bookmark и end_bookmark для создания закладки, отметив ее начало и конец соответственно. Не забудьте указать одинаковое имя закладки в обоих методах. Закладки в документе могут перекрываться и охватывать любой диапазон. Неправильно оформленные закладки или закладки с повторяющимися названиями будут проигнорированы при сохранении документа.
В следующем примере кода показано, как создать новую закладку:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
builder = aw.DocumentBuilder(doc) | |
builder.start_bookmark("My Bookmark") | |
builder.writeln("Text inside a bookmark.") | |
builder.start_bookmark("Nested Bookmark") | |
builder.writeln("Text inside a NestedBookmark.") | |
builder.end_bookmark("Nested Bookmark") | |
builder.writeln("Text after Nested Bookmark.") | |
builder.end_bookmark("My Bookmark") | |
options = aw.saving.PdfSaveOptions() | |
options.outline_options.bookmarks_outline_levels.add("My Bookmark", 1) | |
options.outline_options.bookmarks_outline_levels.add("Nested Bookmark", 2) | |
doc.save(docs_base.artifacts_dir + "WorkingWithBookmarks.create_bookmark.pdf", options) |
Получать закладки
Иногда необходимо получить коллекцию закладок для перебора закладок или для других целей. Используйте свойство Node.range, предоставляемое любым узлом документа, которое возвращает объект Range, представляющий часть документа, содержащуюся в этом узле. Используйте этот объект для извлечения BookmarkCollection, а затем используйте индексатор коллекции, чтобы получить определенную закладку.
В следующем примере кода показано, как получить закладки из коллекции закладок:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "Bookmarks.docx") | |
# By index: | |
bookmark1 = doc.range.bookmarks[0] | |
# By name: | |
bookmark2 = doc.range.bookmarks.get_by_name("MyBookmark3") |
В следующем примере кода показано, как получить или задать название закладки и текст:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "Bookmarks.docx") | |
bookmark = doc.range.bookmarks.get_by_name("MyBookmark1") | |
name = bookmark.name | |
text = bookmark.text | |
bookmark.name = "RenamedBookmark" | |
bookmark.text = "This is a new bookmarked text." |
В следующем примере кода показано, как добавить таблицу в закладки:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
builder = aw.DocumentBuilder(doc) | |
builder.start_table() | |
builder.insert_cell() | |
builder.start_bookmark("MyBookmark") | |
builder.write("This is row 1 cell 1") | |
builder.insert_cell() | |
builder.write("This is row 1 cell 2") | |
builder.end_row() | |
builder.insert_cell() | |
builder.writeln("This is row 2 cell 1") | |
builder.insert_cell() | |
builder.writeln("This is row 2 cell 2") | |
builder.end_row() | |
builder.end_table() | |
builder.end_bookmark("MyBookmark") |
Если вы измените название закладки на имя, которое уже существует в документе, ошибка сгенерирована не будет, и при сохранении документа будет сохранена только первая закладка.
Обратите внимание, что некоторые закладки в документе назначены полям формы. При переходе к такой закладке и вставке текста в нее текст будет вставлен в код поля формы. Хотя это не приведет к аннулированию поля формы, вставленный текст не будет виден, поскольку он станет частью кода поля.
В следующем примере кода показано, как получить доступ к столбцам таблицы с закладками:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
for bookmark in doc.range.bookmarks : | |
print("Bookmark: " + bookmark.name + " (Column)" if bookmark.is_column else "") | |
if (bookmark.is_column) : | |
row = bookmark.bookmark_start.get_ancestor(aw.NodeType.ROW).as_row() | |
if (bookmark.first_column < row.cells.count) : | |
print(row.cells[bookmark.first_column].get_text().trim_end(aw.ControlChar.CELL_CHAR)) | |
Перейти к закладке
Если вам нужно вставить расширенный контент (не только обычный текст) в закладку, вы должны использовать move_to_bookmark для перемещения курсора на закладку, а затем использовать DocumentBuilder’s методы и свойства для вставки содержимого.
Показывать и скрывать содержимое закладок
Вся закладка (including the bookmarked content) может быть заключена в истинную часть поля IF
с помощью Aspose.Words. Это может быть сделано таким образом, что поле IF
содержит вложенное поле объединения в выражении (Left of Operator), и в зависимости от значения поля объединения поле IF
отображает или скрывает содержимое закладки в документе Word.
В следующем примере кода показано, как показывать/ скрывать закладки:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "Bookmarks.docx") | |
self.show_hide_bookmarked_content(doc, "MyBookmark1", False) | |
doc.save(docs_base.artifacts_dir + "WorkingWithBookmarks.show_hide_bookmarks.docx") |
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
@staticmethod | |
def show_hide_bookmarked_content(doc : aw.Document, bookmarkName : str, showHide : bool) : | |
bm = doc.range.bookmarks.get_by_name(bookmarkName) | |
builder = aw.DocumentBuilder(doc) | |
builder.move_to_document_end() | |
# IF "MERGEFIELD bookmark" = "True" "" "" | |
field = builder.insert_field("IF \"", None) | |
builder.move_to(field.start.next_sibling) | |
builder.insert_field("MERGEFIELD " + bookmarkName + "", None) | |
builder.write("\" = \"True\" ") | |
builder.write("\"") | |
builder.write("\"") | |
builder.write(" \"\"") | |
currentNode = field.start | |
flag = True | |
while (currentNode != None and flag) : | |
if (currentNode.node_type == aw.NodeType.RUN) : | |
if (currentNode.to_string(aw.SaveFormat.TEXT).strip() == "\"") : | |
flag = False | |
nextNode = currentNode.next_sibling | |
bm.bookmark_start.parent_node.insert_before(currentNode, bm.bookmark_start) | |
currentNode = nextNode | |
endNode = bm.bookmark_end | |
flag = True | |
while (currentNode != None and flag) : | |
if (currentNode.node_type == aw.NodeType.FIELD_END) : | |
flag = False | |
nextNode = currentNode.next_sibling | |
bm.bookmark_end.parent_node.insert_after(currentNode, endNode) | |
endNode = currentNode | |
currentNode = nextNode | |
doc.mail_merge.execute([ bookmarkName ], [ showHide ]) | |