Yer imleriyle Çalışma

Yer imleri, ileride başvurmak üzere adlandırdığınız ve tanımladığınız konumları veya parçaları Microsoft Word belgesinde tanımlar. Örneğin, daha sonra gözden geçirmek istediğiniz metni tanımlamak için bir yer imi kullanabilirsiniz. Metni bulmak için belgede gezinmek yerine, Yer İmi iletişim kutusunu kullanarak belgeye gidebilirsiniz.

Aspose.Words kullanılarak yer imleriyle gerçekleştirilebilecek eylemler, Microsoft Word kullanılarak gerçekleştirebileceğinizle aynıdır. Yeni bir yer imi ekleyebilir, silebilir, bir yer imine gidebilir, bir yer imi adı alabilir veya ayarlayabilir, içine alınmış metni alabilir veya ayarlayabilirsiniz. Aspose.Words ile, yer imine bazı veriler eklemek veya içeriğine özel biçimlendirme uygulamak için raporlardaki veya belgelerdeki yer imlerini de kullanabilirsiniz. Belgenizdeki belirli bir konumdan metin almak için yer imlerini de kullanabilirsiniz.

Yer imi Ekleme

Sırasıyla başlangıcını ve sonunu işaretleyerek bir yer imi oluşturmak için StartBookmark ve EndBookmark kullanın. Her iki yönteme de aynı yer imi adını iletmeyi unutmayın. Bir belgedeki yer imleri üst üste gelebilir ve herhangi bir aralığı kapsayabilir. Belge kaydedildiğinde kötü biçimlendirilmiş yer imleri veya yinelenen adlara sahip yer imleri göz ardı edilir.

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

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// The path to the documents directory.
System::String outputDataDir = GetOutputDataDir_WorkingWithBookmarks();
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
builder->StartBookmark(u"My Bookmark");
builder->Writeln(u"Text inside a bookmark.");
builder->StartBookmark(u"Nested Bookmark");
builder->Writeln(u"Text inside a NestedBookmark.");
builder->EndBookmark(u"Nested Bookmark");
builder->Writeln(u"Text after Nested Bookmark.");
builder->EndBookmark(u"My Bookmark");
System::SharedPtr<PdfSaveOptions> options = System::MakeObject<PdfSaveOptions>();
options->get_OutlineOptions()->get_BookmarksOutlineLevels()->Add(u"My Bookmark", 1);
options->get_OutlineOptions()->get_BookmarksOutlineLevels()->Add(u"Nested Bookmark", 2);
System::String outputPath = outputDataDir + u"CreateBookmark.pdf";
doc->Save(outputPath, options);

Yer imlerini Edinme

Bazen yer imleri arasında yinelemek veya başka amaçlar için bir yer imi koleksiyonu elde etmek gerekir. Belgenin bu düğümde bulunan bölümünü temsil eden bir Range nesnesi döndüren herhangi bir belge düğümü tarafından gösterilen Node.Range özelliğini kullanın. Bir BookmarkCollection almak için bu nesneyi kullanın ve ardından belirli bir yer işareti almak için koleksiyon dizinleyicisini kullanın.

Aşağıdaki kod örneği, bir yer imi koleksiyonundan yer imlerinin nasıl elde edileceğini gösterir:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// The path to the documents directory.
System::String inputDataDir = GetInputDataDir_WorkingWithBookmarks();
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"Bookmarks.doc");
// By index.
System::SharedPtr<Bookmark> bookmark1 = doc->get_Range()->get_Bookmarks()->idx_get(0);
// By name.
System::SharedPtr<Bookmark> bookmark2 = doc->get_Range()->get_Bookmarks()->idx_get(u"Bookmark2");

Aşağıdaki kod örneği, bir yer imi 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-C
// The path to the documents directory.
System::String inputDataDir = GetInputDataDir_WorkingWithBookmarks();
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"Bookmark.doc");
// Use the indexer of the Bookmarks collection to obtain the desired bookmark.
System::SharedPtr<Bookmark> bookmark = doc->get_Range()->get_Bookmarks()->idx_get(u"MyBookmark");
// Get the name and text of the bookmark.
System::String name = bookmark->get_Name();
System::String text = bookmark->get_Text();
// Set the name and text of the bookmark.
bookmark->set_Name(u"RenamedBookmark");
bookmark->set_Text(u"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-C
// Create empty document
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
System::SharedPtr<Table> table = builder->StartTable();
// Insert a cell
builder->InsertCell();
// Start bookmark here after calling InsertCell
builder->StartBookmark(u"MyBookmark");
builder->Write(u"This is row 1 cell 1");
// Insert a cell
builder->InsertCell();
builder->Write(u"This is row 1 cell 2");
builder->EndRow();
// Insert a cell
builder->InsertCell();
builder->Writeln(u"This is row 2 cell 1");
// Insert a cell
builder->InsertCell();
builder->Writeln(u"This is row 2 cell 2");
builder->EndRow();
builder->EndTable();
// End of bookmark
builder->EndBookmark(u"MyBookmark");
System::String outputPath = outputDataDir + u"BookmarkTable.doc";
doc->Save(outputPath);

Yer iminin adını belgede zaten var olan bir adla değiştirirseniz, hata oluşmaz ve belgeyi kaydettiğinizde yalnızca ilk yer imi saklanır.

Bir yer imine Gitme

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

Yer imi içeriğini Gizle’yi Göster

Tüm yer imi (including the bookmarked content), Aspose.Words kullanılarak IF alanının Gerçek kısmı içinde kapsüllenebilir. IF alanı, ifadede (Left of Operator) iç içe geçmiş bir Birleştirme Alanı içerecek şekilde olabilir ve Birleştirme Alanının değerine bağlı olarak IF alanı, Word Belgesindeki Yer İminin içeriğini gösterir veya gizler.

Aşağıdaki kod örneği, yer imlerinin 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-C
typedef System::SharedPtr<System::Object> TObjectPtr;
System::String bookmarkName = u"Bookmark2";
// The path to the documents directory.
System::String inputDataDir = GetInputDataDir_WorkingWithBookmarks();
System::String outputDataDir = GetOutputDataDir_WorkingWithBookmarks();
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"Bookmarks.doc");
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
System::SharedPtr<Bookmark> bm = doc->get_Range()->get_Bookmarks()->idx_get(bookmarkName);
builder->MoveToDocumentEnd();
// {IF "{MERGEFIELD bookmark}" = "true" "" ""}
System::SharedPtr<Field> field = builder->InsertField(u"IF \"", nullptr);
builder->MoveTo(field->get_FieldStart()->get_NextSibling());
builder->InsertField(System::String(u"MERGEFIELD ") + bookmarkName + u"", nullptr);
builder->Write(u"\" = \"true\" ");
builder->Write(u"\"");
builder->Write(u"\"");
builder->Write(u" \"\"");
System::SharedPtr<Node> currentNode = field->get_FieldStart();
bool flag = true;
while (currentNode != nullptr && flag)
{
if (currentNode->get_NodeType() == Aspose::Words::NodeType::Run)
{
if (System::ObjectExt::Equals(currentNode->ToString(Aspose::Words::SaveFormat::Text).Trim(), u"\""))
{
flag = false;
}
}
System::SharedPtr<Node> nextNode = currentNode->get_NextSibling();
bm->get_BookmarkStart()->get_ParentNode()->InsertBefore(currentNode, bm->get_BookmarkStart());
currentNode = nextNode;
}
System::SharedPtr<Node> endNode = bm->get_BookmarkEnd();
flag = true;
while (currentNode != nullptr && flag)
{
if (currentNode->get_NodeType() == Aspose::Words::NodeType::FieldEnd)
{
flag = false;
}
System::SharedPtr<Node> nextNode = currentNode->get_NextSibling();
bm->get_BookmarkEnd()->get_ParentNode()->InsertAfter(currentNode, endNode);
endNode = currentNode;
currentNode = nextNode;
}
doc->get_MailMerge()->Execute(System::MakeArray<System::String>({bookmarkName}), System::MakeArray<TObjectPtr>({System::ObjectExt::Box<bool>(false)}));
//MailMerge can be avoided by using the following
//builder.MoveToMergeField(bookmarkName);
//builder.Write(showHide ? "true" : "false");
doc->Save(outputDataDir + u"Updated_Document_out.doc");