Yer İşaretleriyle Çalışmak

Yer imleri, bir Microsoft Word belgesinde, ileride başvurmak üzere adlandırdığınız ve tanımladığınız konumları veya parçaları tanımlar. Örneğin, daha sonra düzeltmek istediğiniz metni tanımlamak için yer imini kullanabilirsiniz. Metni bulmak için belgeyi kaydırmak yerine Yer İşareti iletişim kutusunu kullanarak metne gidebilirsiniz.

Aspose.Words kullanarak yer imleriyle gerçekleştirebileceğiniz işlemler, Microsoft Word kullanarak gerçekleştirebileceğiniz işlemlerle aynıdır. Yeni bir yer imi ekleyebilir, silebilir, bir yer imine taşıyabilir, bir yer imi adı alabilir veya ayarlayabilir, içindeki metni alabilir veya ayarlayabilirsiniz.

Yer İşareti Ekle

Sırasıyla başlangıcını ve bitişini işaretleyerek bir yer imi oluşturmak için StartBookmark ve EndBookmark‘yi kullanın. Her iki yönteme de aynı yer imi adını aktarmayı unutmayın. Bir belgedeki yer imleri herhangi bir aralıkla örtüşebilir ve yayılabilir. Kötü biçimlendirilmiş yer imleri veya yinelenen adlara sahip yer imleri, belge kaydedildiğinde göz ardı edilecektir.

Aşağıdaki kod örneği, yeni bir yer işaretinin nasıl oluşturulacağını gösterir:

// 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);

Yer İşaretlerini Alın

Bazen yer imleri arasında geçiş yapmak veya başka amaçlar için bir yer imi koleksiyonu edinmek gerekebilir. Bu düğümde bulunan belgenin bir kısmını temsil eden bir Range nesnesi döndüren herhangi bir belge düğümü tarafından sunulan Node.Range özelliğini kullanın. Bir BookmarkCollection almak için bu nesneyi kullanın ve ardından belirli bir yer işaretini almak için koleksiyon dizin oluşturucuyu kullanın.

Aşağıdaki kod örneği, yer işareti koleksiyonundan yer işaretlerinin nasıl alınacağını gösterir:

// 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"];

Aşağıdaki kod örneği, yer işareti adının ve metninin nasıl alınacağını veya ayarlanacağını gösterir:

// 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.";

Aşağıdaki kod örneği, bir tabloya nasıl yer işareti koyulacağını gösterir:

// 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);

Bir yer iminin adını belgede zaten mevcut olan bir adla değiştirirseniz hiçbir hata oluşturulmayacak ve belgeyi kaydettiğinizde yalnızca ilk yer imi saklanacaktır.

Belgedeki bazı yer imlerinin form alanlarına atandığını unutmayın. Böyle bir yer imine gitmek ve oraya metin eklemek, metni form alanı koduna ekler. Bu, form alanını geçersiz kılmasa da, eklenen metin alan kodunun bir parçası haline geldiğinden görünmeyecektir.

Aşağıdaki kod örneği, yer imlerine eklenen tablonun sütunlarına nasıl erişileceğini gösterir:

// 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));
}
}

Bir Yer İmine Taşı

Bir yer imine zengin içerik (yalnızca düz metin değil) eklemeniz gerekiyorsa, imleci yer imine taşımak için MoveToBookmark‘i, ardından içerik eklemek için DocumentBuilder’s yöntemlerini ve özelliklerini kullanmalısınız.

Göster Yer İşareti İçeriğini Gizle

Yer İminin tamamı (yer imi eklenen içerik dahil), Aspose.Words kullanılarak IF alanının Gerçek kısmı içinde kapsüllenebilir. IF alanı ifadede (İşleticinin Solunda) iç içe bir Birleştirme Alanı içerecek şekilde olabilir ve Birleştirme Alanının değerine bağlı olarak IF alanı Word Belgesindeki Yer İşaretinin içeriğini gösterir veya gizler.

Aşağıdaki kod örneği, yer işaretlerinin nasıl gösterileceğini/gizleneceğini gösterir:

// 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");
}