Práce se záložkami

Záložky identifikovat v Microsoft Word dokumentovat místa nebo fragmenty, které jmenujete a identifikovat pro budoucí odkaz. Například můžete použít záložku k identifikaci textu, který chcete později revidovat. Místo procházení dokumentem k nalezení textu můžete přejít k němu pomocí dialogového okna Záložka.

S Aspose.Words, můžete použít záložky ve zprávách nebo dokumentech pro vložení některých dat do záložky nebo použít speciální formátování na její obsah. Můžete také použít záložky pro získání textu z určitého místa ve vašem dokumentu.

Akce, které lze provádět pomocí záložek Aspose.Words jsou stejné jako ty, které můžete provádět pomocí Microsoft Word. Můžete vložit novou záložku, vymazat, přesunout se do záložky, získat nebo nastavit název záložky, získat nebo nastavit text připojený v ní.

Vložit záložku

Použití startBookmark a endBookmark vytvořit záložku tím, že označí její začátek a konec, resp. Nezapomeňte předat stejný název záložky oběma metodám. Záložky v dokumentu se mohou překrývat a rozšířit libovolný rozsah. Špatně vytvořené záložky nebo záložky s duplikátními jmény budou při uložení dokumentu ignorovány.

Následující příklad kódu ukazuje, jak vytvořit novou záložku:

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

Získat záložky

Někdy je nutné získat sbírku záložek pro iteraci prostřednictvím záložek nebo pro jiné účely. Použijte Uzel.getRange vlastnost exponovaná jakýmkoliv uzelem dokumentu, který vrací a Range předmět představující část dokumentu obsaženého v tomto uzlu. Pomocí tohoto objektu získat BookmarkCollection a pak použít indexer sbírky získat konkrétní záložku.

Následující příklad kódu ukazuje, jak získat záložky ze sbírky záložek:

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

Následující příklad kódu ukazuje, jak získat nebo nastavit název záložky a text:

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

Následující příklad kódu ukazuje, jak záložka tabulky:

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

Pokud změníte název záložky na jméno, které již existuje v dokumentu, žádná chyba nebude generována a při uložení dokumentu bude uložena pouze první záložka.

Všimněte si, že některé záložky v dokumentu jsou přiřazeny k vytvoření polí. Přechod do takové záložky a vložení textu tam vloží text do kódu pole formuláře. I když to nebude rušit pole formuláře, vložený text nebude viditelný, protože se stane součástí kódu pole.

Následující příklad kódu ukazuje, jak přistupovat ke sloupcům záložky tabulky:

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

Přesunout do záložky

Pokud potřebujete vložit bohatý obsah (nejen prostý text) do záložky, měli byste použít moveToBookmark přesunout kurzor do záložky a pak použít DocumentBuilder metody a vlastnosti pro vložení obsahu.

Zobrazit obsah záložky

Celá Záložka (* včetně záložky obsahu*) může být zapouzdřena v části True IF použití pole Aspose.Words. Může to být takovým způsobem, že IF pole obsahuje vnořené pole sloučení ve výrazu (*Left of Operator*) a v závislosti na hodnotě pole sloučení IF pole zobrazuje nebo skrývá obsah záložky ve Word Document.

Následující příklad kódu ukazuje, jak zobrazit/ skrýt záložky.

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