ブックマークの操作

ブックマークは、将来の参照のために名前を付けて特定した場所またはフラグメントを Microsoft Word ドキュメント内で識別します。たとえば、ブックマークを使用して、後で修正するテキストを特定できます。ドキュメントをスクロールしてテキストを見つける代わりに、[ブックマーク] ダイアログ ボックスを使用してテキストに移動できます。

Aspose.Words を使用してブックマークで実行できるアクションは、Microsoft Word を使用して実行できるアクションと同じです。新しいブックマークの挿入、削除、ブックマークへの移動、ブックマーク名の取得または設定、ブックマークに囲まれたテキストの取得または設定を行うことができます。 Aspose.Words を使用すると、レポートやドキュメントでブックマークを使用して、ブックマークにデータを挿入したり、そのコンテンツに特別な書式設定を適用したりすることもできます。ブックマークを使用して、文書内の特定の場所からテキストを取得することもできます。

ブックマークを挿入する

start_bookmarkend_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)

ブックマークを取得する

場合によっては、ブックマークを反復処理するため、またはその他の目的でブックマーク コレクションを取得する必要があります。このノードに含まれるドキュメントの部分を表す Range オブジェクトを返すドキュメント ノードによって公開される Node.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 メソッドとプロパティを使用してコンテンツを挿入する必要があります。

表示 ブックマークの内容を非表示にする

ブックマーク全体 (ブックマークされたコンテンツを含む) は、Aspose.Words を使用して IF フィールドの True 部分内にカプセル化できます。 IF フィールドの式 (演算子の左側) にネストされた差し込みフィールドが含まれており、差し込みフィールドの値に応じて、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 ])