کار با نشانک ها

نشانک‌ها در سند 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 برای درج محتوا استفاده کنید.

نمایش مخفی کردن محتوای نشانک

کل نشانک (شامل محتوای نشانک شده) را می توان در قسمت True فیلد IF با استفاده از Aspose.Words کپسوله کرد. می تواند به گونه ای باشد که فیلد IF حاوی یک فیلد Merge تو در تو در عبارت (سمت چپ اپراتور) باشد و بسته به مقدار Merge Field، فیلد IF محتوای Bookmark را در Word Document نشان دهد یا پنهان کند.

مثال کد زیر نحوه نمایش/پنهان کردن نشانک ها را نشان می دهد:

# 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 ])