Praca z zakładkami

Zakładki identyfikują się w Microsoft Word dokumentuj miejsca lub fragmenty, które wymieniasz i identyfikujesz dla przyszłych odniesień. Na przykład, możesz użyć zakładki do identyfikacji tekstu, który chcesz zmienić później. Zamiast przewijania dokumentu w celu zlokalizowania tekstu, możesz do niego przejść używając okna dialogowego zakładki.

Z Aspose.Words, Możesz użyć zakładek w raportach lub dokumentach, aby umieścić pewne dane w zakładce lub zastosować specjalne formatowanie do jej zawartości. Można również używać zakładek do pobierania tekstu z określonej lokalizacji w dokumencie.

Działania, które mogą być wykonywane przy użyciu zakładek 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, uzyskać lub ustawić nazwę zakładki, uzyskać lub ustawić tekst dołączony do niej.

Wstaw zakładkę

Stosowanie startBookmark oraz endBookmark utworzyć zakładkę, zaznaczając odpowiednio jej początek i koniec. Nie zapomnij przekazać tej samej nazwy zakładki obu metodom. Zakładki w dokumencie mogą się nakładać i rozpraszać w dowolnym zakresie. Źle utworzone zakładki lub zakładki z podwójnymi 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-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.");

Uzyskaj zakładki

Czasami konieczne jest uzyskanie kolekcji zakładek do powtarzania poprzez zakładki lub do innych celów. Użyj Node.getRange właściwość narażona przez dowolny węzeł dokumentu, który zwraca a Range obiekt reprezentujący część dokumentu zawartą w tym węźle. Użyj tego obiektu, aby pobrać BookmarkCollection a następnie użyć indeksera kolekcji, aby uzyskać konkretną 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-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);

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

Poniższy przykład kodu pokazuje jak założyć zakładkę do tabeli:

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

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 zachowana podczas zapisywania dokumentu.

Należy zauważyć, że niektóre zakładki w dokumencie są przypisane do tworzenia pól. Przechodząc do takiej zakładki i wstawiając tekst wstawia tekst do kodu pola formularza. Chociaż nie unieważni to pola formularza, dodany tekst nie będzie widoczny, ponieważ staje 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-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());
}
}

Przenieś do zakładki

Jeśli musisz umieścić bogatą zawartość (nie tylko zwykły tekst) w zakładce, należy użyć moveToBookmark przesunięcie kursora do zakładki, a następnie użycie DocumentBuilder metody i właściwości do wstawiania zawartości.

Pokaż zawartość ukrytej zakładki

Cała zakładka (* w tym zawartość zakładki *) może być umieszczona w prawdziwej części IF użycie pola Aspose.Words. To może być w taki sposób, że IF pole zawiera zagnieżdżone pole łączenia w wyrażeniu (* Left of Operator *) i w zależności od wartości pola łączenia, IF pole pokazuje lub ukrywa zawartość zakładki w Word Document.

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