Praca z zakładkami

Zakładki identyfikują w dokumencie Microsoft Word lokalizacje lub fragmenty, które nadajesz i identyfikujesz do wykorzystania w przyszłości. Możesz na przykład użyć zakładki, aby zidentyfikować tekst, który chcesz później sprawdzić. Zamiast przewijać dokument w celu zlokalizowania tekstu, możesz przejść do niego, korzystając z okna dialogowego Zakładka.

Działania, które można wykonać na zakładkach przy użyciu Aspose.Words, są takie same, jak te, które można wykonać przy użyciu Microsoft Word. Możesz wstawić nową zakładkę, usunąć, przejść do zakładki, uzyskać lub ustawić nazwę zakładki, uzyskać lub ustawić zawarty w niej tekst.

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ę na siebie i obejmować dowolny zakres. Źle utworzone zakładki lub zakładki ze zduplikowanymi nazwami zostaną zignorowane podczas zapisywania 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-.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);

Zdobądź zakładki

Czasami konieczne jest uzyskanie kolekcji zakładek w celu przeglądania zakładek lub w innych celach. Użyj właściwości Node.Range dostępnej w dowolnym węźle dokumentu, który zwraca obiekt Range reprezentujący część dokumentu zawartą w tym węźle. Użyj tego obiektu, aby pobrać plik 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-.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"];

Poniższy przykład kodu pokazuje, jak uzyskać lub ustawić nazwę i tekst zakładki:

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

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

Jeśli zmienisz nazwę zakładki na nazwę, która już istnieje w dokumencie, nie zostanie wygenerowany żaden błąd i podczas zapisywania dokumentu zostanie zapisana tylko pierwsza zakładka.

Należy pamiętać, że niektóre zakładki w dokumencie są przypisane do pól formularzy. Przejście do takiej zakładki i wstawienie tam tekstu powoduje wstawienie tekstu do kodu pola formularza. Chociaż nie spowoduje to unieważnienia pola formularza, wstawiony tekst nie będzie widoczny, ponieważ stanie się częścią kodu pola.

Poniższy przykład kodu pokazuje, jak uzyskać dostęp do kolumn tabeli z zakładkami:

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

Przejdź do zakładki

Jeśli chcesz wstawić bogatą zawartość (nie tylko zwykły tekst) do zakładki, powinieneś użyć MoveToBookmark, aby przesunąć kursor do zakładki, a następnie użyć metod i właściwości DocumentBuilder’s, aby wstawić treść.

Pokaż Ukryj zawartość zakładek

Całą zakładkę (łącznie z zawartością zakładek) można umieścić w części True pola IF przy użyciu formatu Aspose.Words. Może być tak, że pole IF zawiera zagnieżdżone w wyrażeniu pole scalania (na lewo od operatora) 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 pokazać/ukryć zakładki:

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