Lucrând cu Marcaje

Semnele de carte identifică în Microsoft Word documente locațiile sau fragmente pe care le numiți și identificați pentru referințe ulterioare. Spre exemplu, ai putea folosi un semn de carte pentru a identifica textul pe care vrei să-l revii mai târziu. În loc să derulezi prin document pentru a găsi textul, poți ajunge la el folosind caseta de dialog marcaj.

Acţiunile care pot fi efectuate cu marcaje folosind Aspose.Words sunt aceleaşi ca şi cele pe care le poţi efectua folosind Microsoft Word. Puteți insera un nou semn de carte, șterge, muta la un semn de carte, obține sau seta un nume de semn de carte, obține sau seta textul cuprins în acesta.

Introduce un semn de carte

Utilizați StartBookmark și EndBookmark pentru a crea o semnă de carte prin marcarea începutului și sfârșitului său, respectiv. Nu uitaţi să treci aceeaşi nume de semn de carte la ambele metode. Semnele de carte dintr-un document pot suprapune și cuprinde orice interval. Semnele de carte prost formate sau semne de carte cu nume duplicate vor fi ignorate atunci când documentul este salvat.

Exemplul următor de cod arată cum să creăm un nou semn de carte:

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

Obținerea marcajelor

Uneori este necesar să obţinem o colecţie de marcaje pentru a parcurge marcajele sau pentru alte scopuri. Utilizați proprietatea Node.Range expusă de orice nod de document care returnează un obiect Range, reprezentând partea documentului conținută în acest nod. Foloseşte acest obiect pentru a recupera o BookmarkCollection şi apoi foloseşte indexatorul de colecţie pentru a obţine un anumit bookmark.

Exemplul următor de cod arată cum se obțin semne de carte dintr-o colecție de semne de carte:

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

Exemplul de cod următor arată cum să obții sau să setezi un nume de semn de carte și text:

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

Exemplul de cod următor arată cum să marchezi o tabelă:

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

Dacă schimbi numele unui semn de carte într-unul care există deja în document, nu se va genera o eroare și doar primul semn de carte va fi salvat când salvezi documentul.

Rețineți că unele semne de carte din document sunt atribuite câmpurilor formularului. Mutarea către o astfel de marcă și inserarea unui text în ea inserează textul în codul câmpului formularului. Deși acest lucru nu va invalida câmpul formularului, textul inserat nu va fi vizibil deoarece devine parte din codul câmpului.

Exemplul de cod următor arată cum se accesează coloane din tabelul marcat:

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

Mutare către Semn de carte

Dacă ai nevoie să introduci conținut bogat (nu doar text simplu) într-un semn de carte, ar trebui să folosești MoveToBookmark pentru a muta cursorul la semnul de carte și apoi metodele și proprietățile DocumentBuilder’s pentru a introduce conținut.

Arată Ascunde Marcaj Conținut

Toate marcajele (inclusiv conținutul marcat) pot fi încapsulate într-o parte adevărată a câmpului IF folosind Aspose.Words. Poate fi în felul acesta încât câmpul IF să conțină un câmp de fuziune încorporat în expresia (Stânga operatorului) și în funcție de valoarea câmpului de fuziune, câmpul IF arată sau ascunde conținutul marcajului în documentul Word.

Exemplul de cod de mai jos arată cum să arătați/ ascundeți semnele de carte

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