Praca z zakładkami
Zakładki identyfikują w dokumencie Microsoft Word lokalizacje lub fragmenty, które nazywasz i identyfikujesz do wykorzystania w przyszłości. Na przykład możesz użyć zakładki do zidentyfikowania tekstu, który chcesz później zmienić. Zamiast przewijać dokument w celu zlokalizowania tekstu, możesz przejść do niego za pomocą okna dialogowego Zakładka.
Czynności, które można wykonać za pomocą zakładek za pomocą Aspose.Words, są takie same, jak te, które można wykonać za pomocą Microsoft Word. Możesz wstawić nową zakładkę, usunąć, przejść do zakładki, pobrać lub ustawić nazwę zakładki, pobrać lub ustawić tekst w niej zawarty. Za pomocą Aspose.Words możesz także użyć zakładek w raportach lub dokumentach, aby wstawić niektóre dane do zakładki lub zastosować specjalne formatowanie do jej zawartości. Możesz także użyć zakładek, aby pobrać tekst z określonej lokalizacji w dokumencie.
Wstaw zakładkę
Użyj StartBookmark i EndBookmark, aby utworzyć zakładkę, zaznaczając odpowiednio jej początek i koniec. Nie zapomnij przekazać tej samej nazwy zakładki do obu metod. Zakładki w dokumencie mogą nakładać się i obejmować dowolny zakres. Źle utworzone zakładki lub Zakładki ze zduplikowanymi nazwami będą ignorowane po zapisaniu dokumentu.
Poniższy przykład kodu pokazuje, jak utworzyć nową zakładkę:
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); |
Uzyskaj Zakładki
Czasami konieczne jest uzyskanie kolekcji zakładek do iteracji przez Zakładki lub do innych celów. Użyj właściwości Node.Range ujawnionej przez dowolny węzeł dokumentu, który zwraca obiekt Range reprezentujący część dokumentu zawartą w tym węźle. Użyj tego obiektu, aby pobrać BookmarkCollection, a następnie użyj indeksatora kolekcji, aby uzyskać określoną zakładkę.
Poniższy przykład kodu pokazuje, jak uzyskać zakładki z kolekcji zakładek:
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"); |
Poniższy przykład kodu pokazuje, jak uzyskać lub ustawić nazwę zakładki i tekst:
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."); |
Poniższy przykład kodu pokazuje, jak dodać tabelę do zakładek:
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); |
Jeśli zmienisz nazwę Zakładki na nazwę, która już istnieje w dokumencie, nie zostanie wygenerowany żaden błąd i tylko pierwsza zakładka zostanie zapisana podczas zapisywania dokumentu.
Przejdź do zakładki
Jeśli chcesz wstawić bogatą zawartość (nie tylko zwykły tekst) do zakładki, użyj MoveToBookmark, aby przesunąć kursor do zakładki, a następnie użyj metod i właściwości DocumentBuilder’s, aby wstawić zawartość.
Pokaż Ukryj Zawartość Zakładek
Całą zakładkę (including the bookmarked content) można zamknąć w prawdziwej części pola IF
za pomocą Aspose.Words. Może być tak, że pole IF
zawiera zagnieżdżone pole scalania w wyrażeniu (Left of Operator) i w zależności od wartości pola scalania pole IF
pokazuje lub ukrywa zawartość zakładki w dokumencie Word.
Poniższy przykład kodu pokazuje, jak wyświetlać / ukrywać zakładki:
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"); |