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

نشانک‌ها در سند Microsoft Word مکان‌ها یا قطعاتی را که نام‌گذاری می‌کنید و برای مراجعات بعدی شناسایی می‌کنید، شناسایی می‌کنند. برای مثال، ممکن است از یک نشانک برای شناسایی متنی که می‌خواهید بعداً آن را اصلاح کنید، استفاده کنید. به جای پیمایش در سند برای مکان یابی متن، می توانید با استفاده از کادر محاوره ای نشانک به آن بروید.

اقداماتی که می توان با بوکمارک ها با استفاده از Aspose.Words انجام داد، همان اقداماتی است که می توانید با استفاده از Microsoft Word انجام دهید. می توانید یک نشانک جدید وارد کنید، حذف کنید، به یک نشانک منتقل کنید، یک نام نشانک دریافت کنید یا تنظیم کنید، متن محصور در آن را دریافت یا تنظیم کنید.

یک نشانک درج کنید

از StartBookmark و EndBookmark برای ایجاد یک نشانک با علامت گذاری شروع و پایان آن به ترتیب استفاده کنید. فراموش نکنید که یک نام نشانک را به هر دو روش ارسال کنید. نشانک‌ها در یک سند می‌توانند همپوشانی داشته باشند و در هر محدوده‌ای قرار بگیرند. نشانک‌های بد شکل یا نشانک‌هایی با نام‌های تکراری هنگام ذخیره سند نادیده گرفته می‌شوند.

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

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_WorkingWithBookmarks();
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.StartBookmark("My Bookmark");
builder.Writeln("Text inside a bookmark.");
builder.StartBookmark("Nested Bookmark");
builder.Writeln("Text inside a NestedBookmark.");
builder.EndBookmark("Nested Bookmark");
builder.Writeln("Text after Nested Bookmark.");
builder.EndBookmark("My Bookmark");
PdfSaveOptions options = new PdfSaveOptions();
options.OutlineOptions.BookmarksOutlineLevels.Add("My Bookmark", 1);
options.OutlineOptions.BookmarksOutlineLevels.Add("Nested Bookmark", 2);
dataDir = dataDir + "Create.Bookmark_out.pdf";
doc.Save(dataDir, options);

بوک مارک ها را دریافت کنید

گاهی اوقات لازم است یک مجموعه نشانک برای تکرار از طریق نشانک ها یا برای اهداف دیگر به دست آورید. از ویژگی Node.Range استفاده کنید که توسط هر گره سندی که یک شی Range را نشان می دهد که بخشی از سند موجود در این گره را نشان می دهد، در معرض دید قرار می گیرد. از این شی برای بازیابی BookmarkCollection استفاده کنید و سپس از نمایه ساز مجموعه برای دریافت یک نشانک خاص استفاده کنید.

مثال کد زیر نحوه به دست آوردن نشانک ها از مجموعه نشانک ها را نشان می دهد:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_WorkingWithBookmarks();
Document doc = new Document(dataDir + "Bookmarks.doc");
// By index.
Bookmark bookmark1 = doc.Range.Bookmarks[0];
// By name.
Bookmark bookmark2 = doc.Range.Bookmarks["Bookmark2"];

مثال کد زیر نحوه دریافت یا تنظیم نام و متن نشانک را نشان می دهد:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_WorkingWithBookmarks();
Document doc = new Document(dataDir + "Bookmark.doc");
// Use the indexer of the Bookmarks collection to obtain the desired bookmark.
Bookmark bookmark = doc.Range.Bookmarks["MyBookmark"];
// Get the name and text of the bookmark.
string name = bookmark.Name;
string text = bookmark.Text;
// Set the name and text of the bookmark.
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-.NET
// Create empty document
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Table table = builder.StartTable();
// Insert a cell
builder.InsertCell();
// Start bookmark here after calling InsertCell
builder.StartBookmark("MyBookmark");
builder.Write("This is row 1 cell 1");
// Insert a cell
builder.InsertCell();
builder.Write("This is row 1 cell 2");
builder.EndRow();
// Insert a cell
builder.InsertCell();
builder.Writeln("This is row 2 cell 1");
// Insert a cell
builder.InsertCell();
builder.Writeln("This is row 2 cell 2");
builder.EndRow();
builder.EndTable();
// End of bookmark
builder.EndBookmark("MyBookmark");
dataDir = dataDir + "Bookmark.Table_out.doc";
doc.Save(dataDir);

اگر نام یک نشانک را به نامی که قبلاً در سند وجود دارد تغییر دهید، هیچ خطایی ایجاد نخواهد شد و تنها اولین نشانک زمانی که سند را ذخیره می کنید ذخیره می شود.

توجه داشته باشید که برخی از نشانک ها در سند به شکل فیلدها اختصاص داده شده اند. حرکت به چنین نشانکی و درج متن در آنجا، متن را در کد فیلد فرم وارد می کند. اگرچه این کار فیلد فرم را باطل نمی کند، متن درج شده قابل مشاهده نخواهد بود زیرا بخشی از کد فیلد می شود.

مثال کد زیر نحوه دسترسی به ستون های جدول نشانک شده را نشان می دهد:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// Create empty document
Document doc = new Document(dataDir + "Bookmark.Table_out.doc");
foreach (Bookmark bookmark in doc.Range.Bookmarks)
{
Console.WriteLine("Bookmark: {0}{1}", bookmark.Name, bookmark.IsColumn ? " (Column)" : "");
if (bookmark.IsColumn)
{
Row row = bookmark.BookmarkStart.GetAncestor(NodeType.Row) as Row;
if (row != null && bookmark.FirstColumn < row.Cells.Count)
Console.WriteLine(row.Cells[bookmark.FirstColumn].GetText().TrimEnd(ControlChar.CellChar));
}
}

به یک نشانک انتقال دهید

اگر نیاز به درج محتوای غنی (نه فقط متن ساده) در یک نشانک دارید، باید از MoveToBookmark برای انتقال مکان نما به نشانک و سپس از روش ها و ویژگی های 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-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_WorkingWithBookmarks();
Document doc = new Document(dataDir + "Bookmarks.doc");
ShowHideBookmarkedContent(doc, "Bookmark2", false);
doc.Save(dataDir + "Updated_Document.doc");
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
public static void ShowHideBookmarkedContent(Document doc, String bookmarkName, bool showHide)
{
DocumentBuilder builder = new DocumentBuilder(doc);
Bookmark bm = doc.Range.Bookmarks[bookmarkName];
builder.MoveToDocumentEnd();
// {IF "{MERGEFIELD bookmark}" = "true" "" ""}
Field field = builder.InsertField("IF \"", null);
builder.MoveTo(field.Start.NextSibling);
builder.InsertField("MERGEFIELD " + bookmarkName + "", null);
builder.Write("\" = \"true\" ");
builder.Write("\"");
builder.Write("\"");
builder.Write(" \"\"");
Node currentNode = field.Start;
bool flag = true;
while (currentNode != null && flag)
{
if (currentNode.NodeType == NodeType.Run)
if (currentNode.ToString(SaveFormat.Text).Trim().Equals("\""))
flag = false;
Node nextNode = currentNode.NextSibling;
bm.BookmarkStart.ParentNode.InsertBefore(currentNode, bm.BookmarkStart);
currentNode = nextNode;
}
Node endNode = bm.BookmarkEnd;
flag = true;
while (currentNode != null && flag)
{
if (currentNode.NodeType == NodeType.FieldEnd)
flag = false;
Node nextNode = currentNode.NextSibling;
bm.BookmarkEnd.ParentNode.InsertAfter(currentNode, endNode);
endNode = currentNode;
currentNode = nextNode;
}
doc.MailMerge.Execute(new String[] { bookmarkName }, new Object[] { showHide });
//MailMerge can be avoided by using the following
//builder.MoveToMergeField(bookmarkName);
//builder.Write(showHide ? "true" : "false");
}