Werken met bladwijzers

Bladwijzers identificeren in een Microsoft Word documenteer de locaties of fragmenten die u noemt en identificeert voor toekomstige referentie. U kunt bijvoorbeeld een bladwijzer gebruiken om tekst te identificeren die u later wilt herzien. In plaats van door het document te schuiven om de tekst te lokaliseren, kunt u naar het bladwijzervenster gaan.

De acties die kunnen worden uitgevoerd met bladwijzers met behulp van Aspose.Words zijn dezelfde als degenen die u kunt uitvoeren met behulp van Microsoft Word. U kunt een nieuwe bladwijzer invoegen, verwijderen, verplaatsen naar een bladwijzer, een bladwijzernaam krijgen of instellen, tekst insluiten of instellen.

Bladwijzer invoegen

Gebruik StartBookmark en EndBookmark om een bladwijzer aan te maken door het begin en het einde ervan te markeren. Vergeet niet dezelfde bladwijzernaam aan beide methoden door te geven. Bladwijzers in een document kunnen elk bereik overlappen. Slecht gevormde bladwijzers of bladwijzers met dubbele namen worden genegeerd wanneer het document wordt opgeslagen.

Het volgende voorbeeld van code laat zien hoe je een nieuwe bladwijzer aanmaakt:

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

Bladwijzers verkrijgen

Soms is het noodzakelijk om een bladwijzercollectie te verkrijgen om te itereren via bladwijzers of voor andere doeleinden. Gebruik de Node.Range eigenschap blootgesteld door een document knooppunt dat een Range object dat het gedeelte van het document in deze node vertegenwoordigt. Gebruik dit object om een BookmarkCollection en gebruik dan de collectie indexer om een specifieke bladwijzer te krijgen.

Het volgende voorbeeld van code laat zien hoe u bladwijzers kunt verkrijgen uit een bladwijzercollectie:

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

Het volgende voorbeeld van code laat zien hoe u een bladwijzernaam en -tekst kunt verkrijgen of instellen:

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

Het volgende codevoorbeeld laat zien hoe u een tabel bladwijzer kunt maken:

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

Als u de naam van een bladwijzer verandert in een naam die al bestaat in het document, zal er geen fout worden gegenereerd en alleen de eerste bladwijzer wordt opgeslagen wanneer u het document opslaat.

Merk op dat sommige bladwijzers in het document worden toegewezen aan formuliervelden. Door naar zo’n bladwijzer te gaan en tekst in te voegen wordt de tekst in het formulierveld ingevoerd. Hoewel dit het formulierveld niet ongeldig maakt, zal de ingevoegde tekst niet zichtbaar zijn omdat het deel wordt van de veldcode.

Het volgende voorbeeld van code laat zien hoe je de kolommen van de bladwijzertabel kunt benaderen:

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

Naar een bladwijzer verplaatsen

Als je rijke inhoud (niet alleen gewone tekst) in een bladwijzer moet invoegen, moet je deze gebruiken MoveToBookmark om de cursor naar de bladwijzer te verplaatsen en vervolgens te gebruiken DocumentBuilder’s methoden en eigenschappen om inhoud in te voegen.

Bladwijzerinhoud tonen

De gehele bladwijzer (met inbegrip van de bladwijzer) kan worden ingekapseld in het ware deel van de IF veld gebruiken Aspose.Words. Het kan zo zijn dat de IF veld bevat een geneste Samenvoegveld in de expressie (Links van Operator) en afhankelijk van de waarde van Samenvoegveld, de IF veld toont of verbergt de inhoud van bladwijzer in Word Document.

Het volgende codevoorbeeld laat zien hoe bladwijzers getoond/verbergen:

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