Работа с отметки

Отметките се идентифицират в Microsoft Word документира местата или фрагментите, които назовавате и идентифицирате за бъдеща справка. Например, може да използвате отметки, за да идентифицирате текста, който искате да преразгледате по - късно. Вместо да превъртате през документа, за да намерите текста, можете да отидете до него, като използвате диалоговия прозорец Bookmark.

С Aspose.Words, Можете да използвате отметки в доклади или документи, за да въведете някои данни в отметките или да приложите специален формат към съдържанието им. Можете също така да използвате отметки за извличане на текст от определено място във вашия документ.

Действията, които могат да се извършват с отметки, като се използват Aspose.Words са същите като тези, които можете да изпълните, използвайки Microsoft Word. Можете да поставите нова отметка, да изтриете, да преминете към отметка, да получите или да зададете име на отметките, да получите или да зададете текст в нея.

Вмъкване на отметки

Използване startBookmark както и endBookmark да създадете отметки, като маркирате неговия старт и край съответно. Не забравяйте да предадете едно и също име от отметки на двата метода. Отметките в един документ могат да се припокриват и обхващат всеки обхват. Лошо оформени отметки или отметки с дублиращи се имена ще бъдат игнорирани, когато документът е записан.

Следният пример за код показва как да се създаде нова отметка:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(CreateBookmark.class);
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.startBookmark("MyBookmark");
builder.writeln("Text inside a bookmark.");
builder.endBookmark("MyBookmark");
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.getOutlineOptions().setDefaultBookmarksOutlineLevel(1);
options.getOutlineOptions().setDefaultBookmarksOutlineLevel(2);
doc.save(dataDir + "output.pdf", options);
System.out.println("\nBookmark created successfully.");

Получаване на отметки

Понякога е необходимо да се получи колекция от отметки за итерация чрез отметки или за други цели. Използвайте Node.getRange собственост, изложена на всеки документен възел, който връща Range обект, представляващ частта от документа, съдържаща се в този възел. Използвайте този обект, за да изтеглите BookmarkCollection и след това използвайте индексатора за събиране, за да получите конкретна отметки.

Следният пример за код показва как да получите отметки от колекция от отметки:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(AccessBookmarks.class);
Document doc = new Document(dataDir + "Bookmark.doc");
Bookmark bookmark1 = doc.getRange().getBookmarks().get(0);
Bookmark bookmark = doc.getRange().getBookmarks().get("MyBookmark");
doc.save(dataDir + "output.doc");
System.out.println("\nTable bookmarked successfully.\nFile saved at " + dataDir);

Следният пример с код показва как да получите или зададете име и текст:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(BookmarkNameAndText.class);
Document doc = new Document(dataDir + "Bookmark.doc");
// Use the indexer of the Bookmarks collection to obtain the desired bookmark.
Bookmark bookmark = doc.getRange().getBookmarks().get("MyBookmark");
// Get the name and text of the bookmark.
String name = bookmark.getName();
String text = bookmark.getText();
// Set the name and text of the bookmark.
bookmark.setName("RenamedBookmark");
bookmark.setText("This is a new bookmarked text.");
System.out.println("\nBookmark name and text set successfully.");

Следният пример за код показва как да маркирате таблица:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
//Create empty document
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// We call this method to start building the table.
builder.startTable();
builder.insertCell();
// Start bookmark here after calling InsertCell
builder.startBookmark("MyBookmark");
builder.write("Row 1, Cell 1 Content.");
// Build the second cell
builder.insertCell();
builder.write("Row 1, Cell 2 Content.");
// Call the following method to end the row and start a new row.
builder.endRow();
// Build the first cell of the second row.
builder.insertCell();
builder.write("Row 2, Cell 1 Content");
// Build the second cell.
builder.insertCell();
builder.write("Row 2, Cell 2 Content.");
builder.endRow();
// Signal that we have finished building the table.
builder.endTable();
//End of bookmark
builder.endBookmark("MyBookmark");
doc.save(dataDir + "output.doc");
System.out.println("\nTable bookmarked successfully.\nFile saved at " + dataDir);

Ако промените името на отметките на име, което вече съществува в документа, няма да бъде генерирана грешка и само първата отметка ще бъде съхранена при запис на документа.

Имайте предвид, че някои отметки в документа са предназначени да образуват полета. Преместване към такава отметки и вмъкване на текст там вмъква текста във формата поле код. Въпреки че това няма да обезвреди полето на формата, въведеният текст няма да бъде видим, защото става част от кода на полето.

Следният пример за код показва как да получите достъп до колоните от таблицата с отметки:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Create empty document
Document doc = new Document(dataDir + "Bookmark.Table_out.doc");
for (Bookmark bookmark : doc.getRange().getBookmarks())
{
System.out.printf("Bookmark: {0}{1}", bookmark.getName(), bookmark.isColumn() ? " (Column)" : "");
if (bookmark.isColumn())
{
Row row = (Row) bookmark.getBookmarkStart().getAncestor(NodeType.ROW);
if (row != null && bookmark.getFirstColumn() < row.getCells().getCount())
System.out.print(row.getCells().get(bookmark.getFirstColumn()).getText());
}
}

Преместване в отметки

Ако трябва да въведете богато съдържание (не само обикновен текст) в отметките, трябва да използвате moveToBookmark да преместите курсора в отметките и след това да използвате DocumentBuilder методи и свойства за вмъкване на съдържание.

Показване съдържанието на отметките

Цялата отметки (* включително отметките*) могат да бъдат капсулирани в рамките на True част на IF поле за използване Aspose.Words. Тя може да бъде по такъв начин, че IF поле съдържа гнездене Сливане поле в израза (* Left of Operator*) и в зависимост от стойността на Сливане поле, IF полето показва или скрива съдържанието на Отметките в Word Document.

Следният пример с код показва как да показвате/ криете отметки.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(ShowHideBookmarks.class);
Document doc = new Document(dataDir + "Bookmark.doc");
showHideBookmarkedContent(doc,"MyBookmark",false);
doc.save(dataDir + "Updated_Document.docx");
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
public static void showHideBookmarkedContent(Document doc, String bookmarkName, boolean showHide) throws Exception {
DocumentBuilder builder = new DocumentBuilder(doc);
Bookmark bm = doc.getRange().getBookmarks().get(bookmarkName);
builder.moveToDocumentEnd();
// {IF "{MERGEFIELD bookmark}" = "true" "" ""}
Field field = builder.insertField("IF \"", null);
builder.moveTo(field.getStart().getNextSibling().getNextSibling());
builder.insertField("MERGEFIELD " + bookmarkName + "", null);
builder.write("\" = \"true\" ");
builder.write("\"");
builder.write("\"");
builder.write(" \"\"");
Node currentNode = field.getStart();
boolean flag = true;
while (currentNode != null && flag) {
if (currentNode.getNodeType() == NodeType.RUN)
if (currentNode.toString(SaveFormat.TEXT).trim().equals("\""))
flag = false;
Node nextNode = currentNode.getNextSibling();
bm.getBookmarkStart().getParentNode().insertBefore(currentNode, bm.getBookmarkStart());
currentNode = nextNode;
}
Node endNode = bm.getBookmarkEnd();
flag = true;
while (currentNode != null && flag) {
if (currentNode.getNodeType() == NodeType.FIELD_END)
flag = false;
Node nextNode = currentNode.getNextSibling();
bm.getBookmarkEnd().getParentNode().insertAfter(currentNode, endNode);
endNode = currentNode;
currentNode = nextNode;
}
doc.getMailMerge().execute(new String[]{bookmarkName}, new Object[]{showHide});
//In case, you do not want to use MailMerge then you may use the following lines of code.
//builder.moveToMergeField(bookmarkName);
//builder.write(showHide ? "true" : "false");
}