java.lang.ObjectNode
com.aspose.words.BookmarkStart
public class BookmarkStart
A complete bookmark in a Word document consists of a Use the Example:
public void createUpdateAndPrintBookmarks() throws Exception {
// Create a document with 3 bookmarks: "MyBookmark 1", "MyBookmark 2", "MyBookmark 3"
Document doc = createDocumentWithBookmarks();
BookmarkCollection bookmarks = doc.getRange().getBookmarks();
// Look at initial values of our bookmarks
printAllBookmarkInfo(bookmarks);
// Obtain bookmarks from a bookmark collection by index/name and update their values
bookmarks.get(0).setName("Updated name of " + bookmarks.get(0).getName());
bookmarks.get("MyBookmark 2").setText("Updated text content of " + bookmarks.get(1).getName());
// Remove the latest bookmark
// The bookmarked text is not deleted
bookmarks.get(2).remove();
bookmarks = doc.getRange().getBookmarks();
// Check that we have 2 bookmarks after the latest bookmark was deleted
Assert.assertEquals(bookmarks.getCount(), 2);
// Look at updated values of our bookmarks
printAllBookmarkInfo(bookmarks);
}
/// <summary>
/// Create a document with bookmarks using the start and end nodes.
/// </summary>
private static Document createDocumentWithBookmarks() throws Exception {
DocumentBuilder builder = new DocumentBuilder();
Document doc = builder.getDocument();
// An empty document has just one empty paragraph by default
Paragraph p = doc.getFirstSection().getBody().getFirstParagraph();
// Add several bookmarks to the document
for (int i = 1; i <= 3; i++) {
String bookmarkName = "MyBookmark " + i;
p.appendChild(new Run(doc, "Text before bookmark."));
p.appendChild(new BookmarkStart(doc, bookmarkName));
p.appendChild(new Run(doc, "Text content of " + bookmarkName));
p.appendChild(new BookmarkEnd(doc, bookmarkName));
p.appendChild(new Run(doc, "Text after bookmark.\r\n"));
}
return builder.getDocument();
}
/// <summary>
/// Use an iterator and a visitor to print info of every bookmark from within a document.
/// </summary>
private static void printAllBookmarkInfo(BookmarkCollection bookmarks) throws Exception {
// Create a DocumentVisitor
BookmarkInfoPrinter bookmarkVisitor = new BookmarkInfoPrinter();
// Get the enumerator from the document's BookmarkCollection and iterate over the bookmarks
Iterator<Bookmark> enumerator = bookmarks.iterator();
while (enumerator.hasNext()) {
Bookmark currentBookmark = enumerator.next();
// Accept our DocumentVisitor it to print information about our bookmarks
if (currentBookmark != null) {
currentBookmark.getBookmarkStart().accept(bookmarkVisitor);
currentBookmark.getBookmarkEnd().accept(bookmarkVisitor);
// Prints a blank line
System.out.println(currentBookmark.getBookmarkStart().getText());
}
}
}
/// <summary>
/// Visitor that prints bookmark information to the console.
/// </summary>
public static class BookmarkInfoPrinter extends DocumentVisitor {
public int visitBookmarkStart(BookmarkStart bookmarkStart) throws Exception {
System.out.println(MessageFormat.format("BookmarkStart name: \"{0}\", Content: \"{1}\"", bookmarkStart.getName(),
bookmarkStart.getBookmark().getText()));
return VisitorAction.CONTINUE;
}
public int visitBookmarkEnd(BookmarkEnd bookmarkEnd) {
System.out.println(MessageFormat.format("BookmarkEnd name: \"{0}\"", bookmarkEnd.getName()));
return VisitorAction.CONTINUE;
}
}
Constructor Summary |
---|
BookmarkStart(DocumentBase doc, java.lang.String name)
Initializes a new instance of the |
Property Getters/Setters Summary | ||
---|---|---|
Bookmark | getBookmark() | |
Gets the facade object that encapsulates this bookmark start and end. | ||
DocumentBase | getDocument() | → inherited from Node |
Gets the document to which this node belongs. | ||
boolean | isComposite() | → inherited from Node |
Returns true if this node can contain other nodes. | ||
java.lang.String | getName() | |
void | setName(java.lang.String value) | |
Gets or sets the bookmark name. | ||
Node | getNextSibling() | → inherited from Node |
Gets the node immediately following this node. | ||
int | getNodeType() | |
Returns |
||
CompositeNode | getParentNode() | → inherited from Node |
Gets the immediate parent of this node. | ||
Node | getPreviousSibling() | → inherited from Node |
Gets the node immediately preceding this node. | ||
Range | getRange() | → inherited from Node |
Returns a Range object that represents the portion of a document that is contained in this node. |
Method Summary | ||
---|---|---|
boolean | accept(DocumentVisitor visitor) | |
Accepts a visitor. | ||
Node | deepClone(boolean isCloneChildren) | → inherited from Node |
CompositeNode | getAncestor(int ancestorType) | → inherited from Node |
Gets the first ancestor of the specified |
||
CompositeNode | getAncestor(java.lang.Class ancestorType) | → inherited from Node |
Gets the first ancestor of the specified object type. | ||
java.lang.String | getText() | |
Returns an empty string. | ||
Node | nextPreOrder(Node rootNode) | → inherited from Node |
Gets next node according to the pre-order tree traversal algorithm. | ||
Node | previousPreOrder(Node rootNode) | → inherited from Node |
Gets the previous node according to the pre-order tree traversal algorithm. | ||
void | remove() | → inherited from Node |
Removes itself from the parent. | ||
java.lang.String | toString(SaveOptions saveOptions) | → inherited from Node |
Exports the content of the node into a string using the specified save options. | ||
java.lang.String | toString(int saveFormat) | → inherited from Node |
Exports the content of the node into a string in the specified format. |
Constructor Detail |
---|
public BookmarkStart(DocumentBase doc, java.lang.String name)
doc
- The owner document.name
- The name of the bookmark. Cannot be null.Example:
Shows how to add bookmarks and update their contents.public void createUpdateAndPrintBookmarks() throws Exception { // Create a document with 3 bookmarks: "MyBookmark 1", "MyBookmark 2", "MyBookmark 3" Document doc = createDocumentWithBookmarks(); BookmarkCollection bookmarks = doc.getRange().getBookmarks(); // Look at initial values of our bookmarks printAllBookmarkInfo(bookmarks); // Obtain bookmarks from a bookmark collection by index/name and update their values bookmarks.get(0).setName("Updated name of " + bookmarks.get(0).getName()); bookmarks.get("MyBookmark 2").setText("Updated text content of " + bookmarks.get(1).getName()); // Remove the latest bookmark // The bookmarked text is not deleted bookmarks.get(2).remove(); bookmarks = doc.getRange().getBookmarks(); // Check that we have 2 bookmarks after the latest bookmark was deleted Assert.assertEquals(bookmarks.getCount(), 2); // Look at updated values of our bookmarks printAllBookmarkInfo(bookmarks); } /// <summary> /// Create a document with bookmarks using the start and end nodes. /// </summary> private static Document createDocumentWithBookmarks() throws Exception { DocumentBuilder builder = new DocumentBuilder(); Document doc = builder.getDocument(); // An empty document has just one empty paragraph by default Paragraph p = doc.getFirstSection().getBody().getFirstParagraph(); // Add several bookmarks to the document for (int i = 1; i <= 3; i++) { String bookmarkName = "MyBookmark " + i; p.appendChild(new Run(doc, "Text before bookmark.")); p.appendChild(new BookmarkStart(doc, bookmarkName)); p.appendChild(new Run(doc, "Text content of " + bookmarkName)); p.appendChild(new BookmarkEnd(doc, bookmarkName)); p.appendChild(new Run(doc, "Text after bookmark.\r\n")); } return builder.getDocument(); } /// <summary> /// Use an iterator and a visitor to print info of every bookmark from within a document. /// </summary> private static void printAllBookmarkInfo(BookmarkCollection bookmarks) throws Exception { // Create a DocumentVisitor BookmarkInfoPrinter bookmarkVisitor = new BookmarkInfoPrinter(); // Get the enumerator from the document's BookmarkCollection and iterate over the bookmarks Iterator<Bookmark> enumerator = bookmarks.iterator(); while (enumerator.hasNext()) { Bookmark currentBookmark = enumerator.next(); // Accept our DocumentVisitor it to print information about our bookmarks if (currentBookmark != null) { currentBookmark.getBookmarkStart().accept(bookmarkVisitor); currentBookmark.getBookmarkEnd().accept(bookmarkVisitor); // Prints a blank line System.out.println(currentBookmark.getBookmarkStart().getText()); } } } /// <summary> /// Visitor that prints bookmark information to the console. /// </summary> public static class BookmarkInfoPrinter extends DocumentVisitor { public int visitBookmarkStart(BookmarkStart bookmarkStart) throws Exception { System.out.println(MessageFormat.format("BookmarkStart name: \"{0}\", Content: \"{1}\"", bookmarkStart.getName(), bookmarkStart.getBookmark().getText())); return VisitorAction.CONTINUE; } public int visitBookmarkEnd(BookmarkEnd bookmarkEnd) { System.out.println(MessageFormat.format("BookmarkEnd name: \"{0}\"", bookmarkEnd.getName())); return VisitorAction.CONTINUE; } }
Property Getters/Setters Detail |
---|
getBookmark | |
public Bookmark getBookmark() |
Example:
Shows how to add bookmarks and update their contents.public void createUpdateAndPrintBookmarks() throws Exception { // Create a document with 3 bookmarks: "MyBookmark 1", "MyBookmark 2", "MyBookmark 3" Document doc = createDocumentWithBookmarks(); BookmarkCollection bookmarks = doc.getRange().getBookmarks(); // Look at initial values of our bookmarks printAllBookmarkInfo(bookmarks); // Obtain bookmarks from a bookmark collection by index/name and update their values bookmarks.get(0).setName("Updated name of " + bookmarks.get(0).getName()); bookmarks.get("MyBookmark 2").setText("Updated text content of " + bookmarks.get(1).getName()); // Remove the latest bookmark // The bookmarked text is not deleted bookmarks.get(2).remove(); bookmarks = doc.getRange().getBookmarks(); // Check that we have 2 bookmarks after the latest bookmark was deleted Assert.assertEquals(bookmarks.getCount(), 2); // Look at updated values of our bookmarks printAllBookmarkInfo(bookmarks); } /// <summary> /// Create a document with bookmarks using the start and end nodes. /// </summary> private static Document createDocumentWithBookmarks() throws Exception { DocumentBuilder builder = new DocumentBuilder(); Document doc = builder.getDocument(); // An empty document has just one empty paragraph by default Paragraph p = doc.getFirstSection().getBody().getFirstParagraph(); // Add several bookmarks to the document for (int i = 1; i <= 3; i++) { String bookmarkName = "MyBookmark " + i; p.appendChild(new Run(doc, "Text before bookmark.")); p.appendChild(new BookmarkStart(doc, bookmarkName)); p.appendChild(new Run(doc, "Text content of " + bookmarkName)); p.appendChild(new BookmarkEnd(doc, bookmarkName)); p.appendChild(new Run(doc, "Text after bookmark.\r\n")); } return builder.getDocument(); } /// <summary> /// Use an iterator and a visitor to print info of every bookmark from within a document. /// </summary> private static void printAllBookmarkInfo(BookmarkCollection bookmarks) throws Exception { // Create a DocumentVisitor BookmarkInfoPrinter bookmarkVisitor = new BookmarkInfoPrinter(); // Get the enumerator from the document's BookmarkCollection and iterate over the bookmarks Iterator<Bookmark> enumerator = bookmarks.iterator(); while (enumerator.hasNext()) { Bookmark currentBookmark = enumerator.next(); // Accept our DocumentVisitor it to print information about our bookmarks if (currentBookmark != null) { currentBookmark.getBookmarkStart().accept(bookmarkVisitor); currentBookmark.getBookmarkEnd().accept(bookmarkVisitor); // Prints a blank line System.out.println(currentBookmark.getBookmarkStart().getText()); } } } /// <summary> /// Visitor that prints bookmark information to the console. /// </summary> public static class BookmarkInfoPrinter extends DocumentVisitor { public int visitBookmarkStart(BookmarkStart bookmarkStart) throws Exception { System.out.println(MessageFormat.format("BookmarkStart name: \"{0}\", Content: \"{1}\"", bookmarkStart.getName(), bookmarkStart.getBookmark().getText())); return VisitorAction.CONTINUE; } public int visitBookmarkEnd(BookmarkEnd bookmarkEnd) { System.out.println(MessageFormat.format("BookmarkEnd name: \"{0}\"", bookmarkEnd.getName())); return VisitorAction.CONTINUE; } }
getDocument | → inherited from Node |
public DocumentBase getDocument() |
The node always belongs to a document even if it has just been created and not yet added to the tree, or if it has been removed from the tree.
Example:
Shows how to create a node and set its owning document.// Open a file from disk Document doc = new Document(); // Creating a new node of any type requires a document passed into the constructor Paragraph para = new Paragraph(doc); // The new paragraph node does not yet have a parent System.out.println("Paragraph has no parent node: " + (para.getParentNode() == null)); // But the paragraph node knows its document System.out.println("Both nodes' documents are the same: " + (para.getDocument() == doc)); // The fact that a node always belongs to a document allows us to access and modify // properties that reference the document-wide data such as styles or lists para.getParagraphFormat().setStyleName("Heading 1"); // Now add the paragraph to the main text of the first section doc.getFirstSection().getBody().appendChild(para); // The paragraph node is now a child of the Body node System.out.println("Paragraph has a parent node: " + (para.getParentNode() != null));
isComposite | → inherited from Node |
public boolean isComposite() |
Example:
Shows how to efficiently visit all direct and indirect children of a composite node.public void recurseAllNodes() throws Exception { Document doc = new Document(getMyDir() + "Paragraphs.docx"); // Any node that can contain child nodes, such as the document itself, is composite Assert.assertTrue(doc.isComposite()); // Invoke the recursive function that will go through and print all the child nodes of a composite node traverseAllNodes(doc, 0); } /// <summary> /// Recursively traverses a node tree while printing the type of each node with an indent depending on depth as well as the contents of all inline nodes. /// </summary> @Test(enabled = false) public void traverseAllNodes(CompositeNode parentNode, int depth) { // Loop through immediate children of a node for (Node childNode = parentNode.getFirstChild(); childNode != null; childNode = childNode.getNextSibling()) { System.out.println(MessageFormat.format("{0}{1}", String.format(" ", depth), Node.nodeTypeToString(childNode.getNodeType()))); // Recurse into the node if it is a composite node if (childNode.isComposite()) { System.out.println(); traverseAllNodes((CompositeNode) childNode, depth + 1); } else if (childNode instanceof Inline) { System.out.println(" - \"{childNode.GetText().Trim()}\""); } else { System.out.println(); } } }
getName/setName | |
public java.lang.String getName() / public void setName(java.lang.String value) |
Cannot be null.
Example:
Shows how to add bookmarks and update their contents.public void createUpdateAndPrintBookmarks() throws Exception { // Create a document with 3 bookmarks: "MyBookmark 1", "MyBookmark 2", "MyBookmark 3" Document doc = createDocumentWithBookmarks(); BookmarkCollection bookmarks = doc.getRange().getBookmarks(); // Look at initial values of our bookmarks printAllBookmarkInfo(bookmarks); // Obtain bookmarks from a bookmark collection by index/name and update their values bookmarks.get(0).setName("Updated name of " + bookmarks.get(0).getName()); bookmarks.get("MyBookmark 2").setText("Updated text content of " + bookmarks.get(1).getName()); // Remove the latest bookmark // The bookmarked text is not deleted bookmarks.get(2).remove(); bookmarks = doc.getRange().getBookmarks(); // Check that we have 2 bookmarks after the latest bookmark was deleted Assert.assertEquals(bookmarks.getCount(), 2); // Look at updated values of our bookmarks printAllBookmarkInfo(bookmarks); } /// <summary> /// Create a document with bookmarks using the start and end nodes. /// </summary> private static Document createDocumentWithBookmarks() throws Exception { DocumentBuilder builder = new DocumentBuilder(); Document doc = builder.getDocument(); // An empty document has just one empty paragraph by default Paragraph p = doc.getFirstSection().getBody().getFirstParagraph(); // Add several bookmarks to the document for (int i = 1; i <= 3; i++) { String bookmarkName = "MyBookmark " + i; p.appendChild(new Run(doc, "Text before bookmark.")); p.appendChild(new BookmarkStart(doc, bookmarkName)); p.appendChild(new Run(doc, "Text content of " + bookmarkName)); p.appendChild(new BookmarkEnd(doc, bookmarkName)); p.appendChild(new Run(doc, "Text after bookmark.\r\n")); } return builder.getDocument(); } /// <summary> /// Use an iterator and a visitor to print info of every bookmark from within a document. /// </summary> private static void printAllBookmarkInfo(BookmarkCollection bookmarks) throws Exception { // Create a DocumentVisitor BookmarkInfoPrinter bookmarkVisitor = new BookmarkInfoPrinter(); // Get the enumerator from the document's BookmarkCollection and iterate over the bookmarks Iterator<Bookmark> enumerator = bookmarks.iterator(); while (enumerator.hasNext()) { Bookmark currentBookmark = enumerator.next(); // Accept our DocumentVisitor it to print information about our bookmarks if (currentBookmark != null) { currentBookmark.getBookmarkStart().accept(bookmarkVisitor); currentBookmark.getBookmarkEnd().accept(bookmarkVisitor); // Prints a blank line System.out.println(currentBookmark.getBookmarkStart().getText()); } } } /// <summary> /// Visitor that prints bookmark information to the console. /// </summary> public static class BookmarkInfoPrinter extends DocumentVisitor { public int visitBookmarkStart(BookmarkStart bookmarkStart) throws Exception { System.out.println(MessageFormat.format("BookmarkStart name: \"{0}\", Content: \"{1}\"", bookmarkStart.getName(), bookmarkStart.getBookmark().getText())); return VisitorAction.CONTINUE; } public int visitBookmarkEnd(BookmarkEnd bookmarkEnd) { System.out.println(MessageFormat.format("BookmarkEnd name: \"{0}\"", bookmarkEnd.getName())); return VisitorAction.CONTINUE; } }
getNextSibling | → inherited from Node |
public Node getNextSibling() |
Example:
Shows how to enumerate immediate child nodes of a composite node using NextSibling.Document doc = new Document(getMyDir() + "Paragraphs.docx"); // Loop starting from the first child until we reach null for (Node node = doc.getFirstSection().getBody().getFirstChild(); node != null; node = node.getNextSibling()) { // Output the types of the nodes that we come across System.out.println(Node.nodeTypeToString(node.getNodeType())); }
Example:
Shows how to efficiently visit all direct and indirect children of a composite node.public void recurseAllNodes() throws Exception { Document doc = new Document(getMyDir() + "Paragraphs.docx"); // Any node that can contain child nodes, such as the document itself, is composite Assert.assertTrue(doc.isComposite()); // Invoke the recursive function that will go through and print all the child nodes of a composite node traverseAllNodes(doc, 0); } /// <summary> /// Recursively traverses a node tree while printing the type of each node with an indent depending on depth as well as the contents of all inline nodes. /// </summary> @Test(enabled = false) public void traverseAllNodes(CompositeNode parentNode, int depth) { // Loop through immediate children of a node for (Node childNode = parentNode.getFirstChild(); childNode != null; childNode = childNode.getNextSibling()) { System.out.println(MessageFormat.format("{0}{1}", String.format(" ", depth), Node.nodeTypeToString(childNode.getNodeType()))); // Recurse into the node if it is a composite node if (childNode.isComposite()) { System.out.println(); traverseAllNodes((CompositeNode) childNode, depth + 1); } else if (childNode instanceof Inline) { System.out.println(" - \"{childNode.GetText().Trim()}\""); } else { System.out.println(); } } }
getNodeType | |
public int getNodeType() |
Example:
Shows how to efficiently visit all direct and indirect children of a composite node.public void recurseAllNodes() throws Exception { Document doc = new Document(getMyDir() + "Paragraphs.docx"); // Any node that can contain child nodes, such as the document itself, is composite Assert.assertTrue(doc.isComposite()); // Invoke the recursive function that will go through and print all the child nodes of a composite node traverseAllNodes(doc, 0); } /// <summary> /// Recursively traverses a node tree while printing the type of each node with an indent depending on depth as well as the contents of all inline nodes. /// </summary> @Test(enabled = false) public void traverseAllNodes(CompositeNode parentNode, int depth) { // Loop through immediate children of a node for (Node childNode = parentNode.getFirstChild(); childNode != null; childNode = childNode.getNextSibling()) { System.out.println(MessageFormat.format("{0}{1}", String.format(" ", depth), Node.nodeTypeToString(childNode.getNodeType()))); // Recurse into the node if it is a composite node if (childNode.isComposite()) { System.out.println(); traverseAllNodes((CompositeNode) childNode, depth + 1); } else if (childNode instanceof Inline) { System.out.println(" - \"{childNode.GetText().Trim()}\""); } else { System.out.println(); } } }
getParentNode | → inherited from Node |
public CompositeNode getParentNode() |
If a node has just been created and not yet added to the tree, or if it has been removed from the tree, the parent is null.
Example:
Shows how to access the parent node.Document doc = new Document(); // Get the document's first paragraph and append a child node to it in the form of a run with text Paragraph para = doc.getFirstSection().getBody().getFirstParagraph(); // When inserting a new node, the document that the node will belong to must be provided as an argument Run run = new Run(doc, "Hello world!"); para.appendChild(run); // The node lineage can be traced back to the document itself Assert.assertEquals(para, run.getParentNode()); Assert.assertEquals(doc.getFirstSection().getBody(), para.getParentNode()); Assert.assertEquals(doc.getFirstSection(), doc.getFirstSection().getBody().getParentNode()); Assert.assertEquals(doc, doc.getFirstSection().getParentNode());
Example:
Shows how to create a node and set its owning document.// Open a file from disk Document doc = new Document(); // Creating a new node of any type requires a document passed into the constructor Paragraph para = new Paragraph(doc); // The new paragraph node does not yet have a parent System.out.println("Paragraph has no parent node: " + (para.getParentNode() == null)); // But the paragraph node knows its document System.out.println("Both nodes' documents are the same: " + (para.getDocument() == doc)); // The fact that a node always belongs to a document allows us to access and modify // properties that reference the document-wide data such as styles or lists para.getParagraphFormat().setStyleName("Heading 1"); // Now add the paragraph to the main text of the first section doc.getFirstSection().getBody().appendChild(para); // The paragraph node is now a child of the Body node System.out.println("Paragraph has a parent node: " + (para.getParentNode() != null));
getPreviousSibling | → inherited from Node |
public Node getPreviousSibling() |
Example:
Shows how to use of methods of Node and CompositeNode to remove a section before the last section in the document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create a second section by inserting a section break and add text to both sections builder.writeln("Section 1 text."); builder.insertBreak(BreakType.SECTION_BREAK_CONTINUOUS); builder.writeln("Section 2 text."); // Both sections are siblings of each other Section lastSection = (Section) doc.getLastChild(); Section firstSection = (Section) lastSection.getPreviousSibling(); // Remove a section based on its sibling relationship with another section if (lastSection.getPreviousSibling() != null) doc.removeChild(firstSection); // The section we removed was the first one, leaving the document with only the second Assert.assertEquals("Section 2 text.", doc.getText().trim());
getRange | → inherited from Node |
public Range getRange() |
Example:
Shows how to delete all characters of a range.// Insert two sections into a blank document Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.write("Section 1. "); builder.insertBreak(BreakType.SECTION_BREAK_CONTINUOUS); builder.write("Section 2."); // Verify the whole text of the document Assert.assertEquals("Section 1. \fSection 2.", doc.getText().trim()); // Delete the first section from the document doc.getSections().get(0).getRange().delete(); // Check the first section was deleted by looking at the text of the whole document again Assert.assertEquals("Section 2.", doc.getText().trim());
Method Detail |
---|
accept | |
public boolean accept(DocumentVisitor visitor) throws java.lang.Exception |
Calls
For more info see the Visitor design pattern.
visitor
- The visitor that will visit the node.Example:
Shows how to add bookmarks and update their contents.public void createUpdateAndPrintBookmarks() throws Exception { // Create a document with 3 bookmarks: "MyBookmark 1", "MyBookmark 2", "MyBookmark 3" Document doc = createDocumentWithBookmarks(); BookmarkCollection bookmarks = doc.getRange().getBookmarks(); // Look at initial values of our bookmarks printAllBookmarkInfo(bookmarks); // Obtain bookmarks from a bookmark collection by index/name and update their values bookmarks.get(0).setName("Updated name of " + bookmarks.get(0).getName()); bookmarks.get("MyBookmark 2").setText("Updated text content of " + bookmarks.get(1).getName()); // Remove the latest bookmark // The bookmarked text is not deleted bookmarks.get(2).remove(); bookmarks = doc.getRange().getBookmarks(); // Check that we have 2 bookmarks after the latest bookmark was deleted Assert.assertEquals(bookmarks.getCount(), 2); // Look at updated values of our bookmarks printAllBookmarkInfo(bookmarks); } /// <summary> /// Create a document with bookmarks using the start and end nodes. /// </summary> private static Document createDocumentWithBookmarks() throws Exception { DocumentBuilder builder = new DocumentBuilder(); Document doc = builder.getDocument(); // An empty document has just one empty paragraph by default Paragraph p = doc.getFirstSection().getBody().getFirstParagraph(); // Add several bookmarks to the document for (int i = 1; i <= 3; i++) { String bookmarkName = "MyBookmark " + i; p.appendChild(new Run(doc, "Text before bookmark.")); p.appendChild(new BookmarkStart(doc, bookmarkName)); p.appendChild(new Run(doc, "Text content of " + bookmarkName)); p.appendChild(new BookmarkEnd(doc, bookmarkName)); p.appendChild(new Run(doc, "Text after bookmark.\r\n")); } return builder.getDocument(); } /// <summary> /// Use an iterator and a visitor to print info of every bookmark from within a document. /// </summary> private static void printAllBookmarkInfo(BookmarkCollection bookmarks) throws Exception { // Create a DocumentVisitor BookmarkInfoPrinter bookmarkVisitor = new BookmarkInfoPrinter(); // Get the enumerator from the document's BookmarkCollection and iterate over the bookmarks Iterator<Bookmark> enumerator = bookmarks.iterator(); while (enumerator.hasNext()) { Bookmark currentBookmark = enumerator.next(); // Accept our DocumentVisitor it to print information about our bookmarks if (currentBookmark != null) { currentBookmark.getBookmarkStart().accept(bookmarkVisitor); currentBookmark.getBookmarkEnd().accept(bookmarkVisitor); // Prints a blank line System.out.println(currentBookmark.getBookmarkStart().getText()); } } } /// <summary> /// Visitor that prints bookmark information to the console. /// </summary> public static class BookmarkInfoPrinter extends DocumentVisitor { public int visitBookmarkStart(BookmarkStart bookmarkStart) throws Exception { System.out.println(MessageFormat.format("BookmarkStart name: \"{0}\", Content: \"{1}\"", bookmarkStart.getName(), bookmarkStart.getBookmark().getText())); return VisitorAction.CONTINUE; } public int visitBookmarkEnd(BookmarkEnd bookmarkEnd) { System.out.println(MessageFormat.format("BookmarkEnd name: \"{0}\"", bookmarkEnd.getName())); return VisitorAction.CONTINUE; } }
deepClone | → inherited from Node |
public Node deepClone(boolean isCloneChildren) |
Example:
Shows how to clone composite nodes with and without their child nodes.Document doc = new Document(); Paragraph para = doc.getFirstSection().getBody().getFirstParagraph(); para.appendChild(new Run(doc, "Hello world!")); // Clone the paragraph and the child nodes Node cloneWithChildren = para.deepClone(true); Assert.assertTrue(((CompositeNode) cloneWithChildren).hasChildNodes()); Assert.assertEquals("Hello world!", cloneWithChildren.getText().trim()); // Clone the paragraph without its clild nodes Node cloneWithoutChildren = para.deepClone(false); Assert.assertFalse(((CompositeNode) cloneWithoutChildren).hasChildNodes()); Assert.assertEquals("", cloneWithoutChildren.getText().trim());
getAncestor | → inherited from Node |
public CompositeNode getAncestor(int ancestorType) |
ancestorType
- A Example:
Shows how to find out if a table contains another table or if the table itself is nested inside another table.public void calculateDepthOfNestedTables() throws Exception { Document doc = new Document(getMyDir() + "Nested tables.docx"); NodeCollection tables = doc.getChildNodes(NodeType.TABLE, true); for (int i = 0; i < tables.getCount(); i++) { // First lets find if any cells in the table have tables themselves as children int count = getChildTableCount((Table) tables.get(i)); System.out.println(MessageFormat.format("Table #{0} has {1} tables directly within its cells", i, count)); // Now let's try the other way around, lets try find if the table is nested inside another table and at what depth int tableDepth = getNestedDepthOfTable((Table) tables.get(i)); if (tableDepth > 0) System.out.println(MessageFormat.format("Table #{0} is nested inside another table at depth of {1}", i, tableDepth)); else System.out.println(MessageFormat.format("Table #{0} is a non nested table (is not a child of another table)", i)); } } /** * Calculates what level a table is nested inside other tables. * * @returns An integer containing the level the table is nested at. * 0 = Table is not nested inside any other table * 1 = Table is nested within one parent table * 2 = Table is nested within two parent tables etc.. */ private static int getNestedDepthOfTable(final Table table) { int depth = 0; int type = table.getNodeType(); // The parent of the table will be a Cell, instead attempt to find a grandparent that is of type Table Node parent = table.getAncestor(table.getNodeType()); while (parent != null) { // Every time we find a table a level up we increase the depth counter and then try to find an // ancestor of type table from the parent depth++; parent = parent.getAncestor(Table.class); } return depth; } /** * Determines if a table contains any immediate child table within its cells. * Does not recursively traverse through those tables to check for further tables. * * @returns Returns true if at least one child cell contains a table. * Returns false if no cells in the table contains a table. */ private static int getChildTableCount(final Table table) { int tableCount = 0; // Iterate through all child rows in the table for (Row row : table.getRows()) { // Iterate through all child cells in the row for (Cell cell : row.getCells()) { // Retrieve the collection of child tables of this cell TableCollection childTables = cell.getTables(); // If this cell has a table as a child then return true if (childTables.getCount() > 0) tableCount++; } } // No cell contains a table return tableCount; }
getAncestor | → inherited from Node |
public CompositeNode getAncestor(java.lang.Class ancestorType) |
The ancestor type matches if it is equal to ancestorType or derived from ancestorType.
ancestorType
- The object type of the ancestor to retrieve.Example:
Shows how to find out if a table contains another table or if the table itself is nested inside another table.public void calculateDepthOfNestedTables() throws Exception { Document doc = new Document(getMyDir() + "Nested tables.docx"); NodeCollection tables = doc.getChildNodes(NodeType.TABLE, true); for (int i = 0; i < tables.getCount(); i++) { // First lets find if any cells in the table have tables themselves as children int count = getChildTableCount((Table) tables.get(i)); System.out.println(MessageFormat.format("Table #{0} has {1} tables directly within its cells", i, count)); // Now let's try the other way around, lets try find if the table is nested inside another table and at what depth int tableDepth = getNestedDepthOfTable((Table) tables.get(i)); if (tableDepth > 0) System.out.println(MessageFormat.format("Table #{0} is nested inside another table at depth of {1}", i, tableDepth)); else System.out.println(MessageFormat.format("Table #{0} is a non nested table (is not a child of another table)", i)); } } /** * Calculates what level a table is nested inside other tables. * * @returns An integer containing the level the table is nested at. * 0 = Table is not nested inside any other table * 1 = Table is nested within one parent table * 2 = Table is nested within two parent tables etc.. */ private static int getNestedDepthOfTable(final Table table) { int depth = 0; int type = table.getNodeType(); // The parent of the table will be a Cell, instead attempt to find a grandparent that is of type Table Node parent = table.getAncestor(table.getNodeType()); while (parent != null) { // Every time we find a table a level up we increase the depth counter and then try to find an // ancestor of type table from the parent depth++; parent = parent.getAncestor(Table.class); } return depth; } /** * Determines if a table contains any immediate child table within its cells. * Does not recursively traverse through those tables to check for further tables. * * @returns Returns true if at least one child cell contains a table. * Returns false if no cells in the table contains a table. */ private static int getChildTableCount(final Table table) { int tableCount = 0; // Iterate through all child rows in the table for (Row row : table.getRows()) { // Iterate through all child cells in the row for (Cell cell : row.getCells()) { // Retrieve the collection of child tables of this cell TableCollection childTables = cell.getTables(); // If this cell has a table as a child then return true if (childTables.getCount() > 0) tableCount++; } } // No cell contains a table return tableCount; }
getText | |
public java.lang.String getText() |
Example:
Shows how to add bookmarks and update their contents.public void createUpdateAndPrintBookmarks() throws Exception { // Create a document with 3 bookmarks: "MyBookmark 1", "MyBookmark 2", "MyBookmark 3" Document doc = createDocumentWithBookmarks(); BookmarkCollection bookmarks = doc.getRange().getBookmarks(); // Look at initial values of our bookmarks printAllBookmarkInfo(bookmarks); // Obtain bookmarks from a bookmark collection by index/name and update their values bookmarks.get(0).setName("Updated name of " + bookmarks.get(0).getName()); bookmarks.get("MyBookmark 2").setText("Updated text content of " + bookmarks.get(1).getName()); // Remove the latest bookmark // The bookmarked text is not deleted bookmarks.get(2).remove(); bookmarks = doc.getRange().getBookmarks(); // Check that we have 2 bookmarks after the latest bookmark was deleted Assert.assertEquals(bookmarks.getCount(), 2); // Look at updated values of our bookmarks printAllBookmarkInfo(bookmarks); } /// <summary> /// Create a document with bookmarks using the start and end nodes. /// </summary> private static Document createDocumentWithBookmarks() throws Exception { DocumentBuilder builder = new DocumentBuilder(); Document doc = builder.getDocument(); // An empty document has just one empty paragraph by default Paragraph p = doc.getFirstSection().getBody().getFirstParagraph(); // Add several bookmarks to the document for (int i = 1; i <= 3; i++) { String bookmarkName = "MyBookmark " + i; p.appendChild(new Run(doc, "Text before bookmark.")); p.appendChild(new BookmarkStart(doc, bookmarkName)); p.appendChild(new Run(doc, "Text content of " + bookmarkName)); p.appendChild(new BookmarkEnd(doc, bookmarkName)); p.appendChild(new Run(doc, "Text after bookmark.\r\n")); } return builder.getDocument(); } /// <summary> /// Use an iterator and a visitor to print info of every bookmark from within a document. /// </summary> private static void printAllBookmarkInfo(BookmarkCollection bookmarks) throws Exception { // Create a DocumentVisitor BookmarkInfoPrinter bookmarkVisitor = new BookmarkInfoPrinter(); // Get the enumerator from the document's BookmarkCollection and iterate over the bookmarks Iterator<Bookmark> enumerator = bookmarks.iterator(); while (enumerator.hasNext()) { Bookmark currentBookmark = enumerator.next(); // Accept our DocumentVisitor it to print information about our bookmarks if (currentBookmark != null) { currentBookmark.getBookmarkStart().accept(bookmarkVisitor); currentBookmark.getBookmarkEnd().accept(bookmarkVisitor); // Prints a blank line System.out.println(currentBookmark.getBookmarkStart().getText()); } } } /// <summary> /// Visitor that prints bookmark information to the console. /// </summary> public static class BookmarkInfoPrinter extends DocumentVisitor { public int visitBookmarkStart(BookmarkStart bookmarkStart) throws Exception { System.out.println(MessageFormat.format("BookmarkStart name: \"{0}\", Content: \"{1}\"", bookmarkStart.getName(), bookmarkStart.getBookmark().getText())); return VisitorAction.CONTINUE; } public int visitBookmarkEnd(BookmarkEnd bookmarkEnd) { System.out.println(MessageFormat.format("BookmarkEnd name: \"{0}\"", bookmarkEnd.getName())); return VisitorAction.CONTINUE; } }
nextPreOrder | → inherited from Node |
public Node nextPreOrder(Node rootNode) |
rootNode
- The top node (limit) of traversal.Example:
Shows how to delete all images from a document using pre-order tree traversal.Document doc = new Document(getMyDir() + "Images.docx"); Assert.assertEquals(doc.getChildNodes(NodeType.SHAPE, true).getCount(), 10); Node curNode = doc; while (curNode != null) { Node nextNode = curNode.nextPreOrder(doc); if (curNode.previousPreOrder(doc) != null && nextNode != null) { Assert.assertEquals(curNode, nextNode.previousPreOrder(doc)); } if (curNode.getNodeType() == NodeType.SHAPE) { Shape shape = (Shape) curNode; // Several shape types can have an image including image shapes and OLE objects if (shape.hasImage()) { shape.remove(); } } curNode = nextNode; } // The only remaining shape doesn't have an image Assert.assertEquals(1, doc.getChildNodes(NodeType.SHAPE, true).getCount()); Assert.assertFalse(((Shape) doc.getChild(NodeType.SHAPE, 0, true)).hasImage());
previousPreOrder | → inherited from Node |
public Node previousPreOrder(Node rootNode) |
rootNode
- The top node (limit) of traversal.Example:
Shows how to delete all images from a document using pre-order tree traversal.Document doc = new Document(getMyDir() + "Images.docx"); Assert.assertEquals(doc.getChildNodes(NodeType.SHAPE, true).getCount(), 10); Node curNode = doc; while (curNode != null) { Node nextNode = curNode.nextPreOrder(doc); if (curNode.previousPreOrder(doc) != null && nextNode != null) { Assert.assertEquals(curNode, nextNode.previousPreOrder(doc)); } if (curNode.getNodeType() == NodeType.SHAPE) { Shape shape = (Shape) curNode; // Several shape types can have an image including image shapes and OLE objects if (shape.hasImage()) { shape.remove(); } } curNode = nextNode; } // The only remaining shape doesn't have an image Assert.assertEquals(1, doc.getChildNodes(NodeType.SHAPE, true).getCount()); Assert.assertFalse(((Shape) doc.getChild(NodeType.SHAPE, 0, true)).hasImage());
remove | → inherited from Node |
public void remove() |
Example:
Shows how to delete all images from a document.Document doc = new Document(getMyDir() + "Images.docx"); Assert.assertEquals(doc.getChildNodes(NodeType.SHAPE, true).getCount(), 10); // Here we get all shapes from the document node, but you can do this for any smaller // node too, for example delete shapes from a single section or a paragraph NodeCollection shapes = doc.getChildNodes(NodeType.SHAPE, true); // We cannot delete shape nodes while we enumerate through the collection // One solution is to add nodes that we want to delete to a temporary array and delete afterwards ArrayList shapesToDelete = new ArrayList(); for (Shape shape : (Iterable<Shape>) shapes) { // Several shape types can have an image including image shapes and OLE objects if (shape.hasImage()) { shapesToDelete.add(shape); } } // Now we can delete shapes for (Shape shape : (Iterable<Shape>) shapesToDelete) shape.remove(); // The only remaining shape doesn't have an image Assert.assertEquals(1, doc.getChildNodes(NodeType.SHAPE, true).getCount()); Assert.assertFalse(((Shape) doc.getChild(NodeType.SHAPE, 0, true)).hasImage());
Example:
Shows how to remove all nodes of a specific type from a composite node.Document doc = new Document(getMyDir() + "Tables.docx"); Assert.assertEquals(2, doc.getChildNodes(NodeType.TABLE, true).getCount()); // Select the first child node in the body Node curNode = doc.getFirstSection().getBody().getFirstChild(); while (curNode != null) { // Save the next sibling node as a variable in case we want to move to it after deleting this node Node nextNode = curNode.getNextSibling(); // A section body can contain Paragraph and Table nodes // If the node is a Table, remove it from the parent if (curNode.getNodeType() == NodeType.TABLE) { curNode.remove(); } // Continue going through child nodes until null (no more siblings) is reached curNode = nextNode; } Assert.assertEquals(0, doc.getChildNodes(NodeType.TABLE, true).getCount());
toString | → inherited from Node |
public java.lang.String toString(SaveOptions saveOptions) throws java.lang.Exception |
saveOptions
- Specifies the options that control how the node is saved.Example:
Exports the content of a node to String in HTML format.Document doc = new Document(getMyDir() + "Document.docx"); // Extract the last paragraph in the document to convert to HTML Node node = doc.getLastSection().getBody().getLastParagraph(); // When ToString is called using the html SaveFormat overload then the node is converted directly to html Assert.assertEquals("<p style=\"margin-top:0pt; margin-bottom:8pt; line-height:108%; font-size:12pt\">" + "<span style=\"font-family:'Times New Roman'\">Hello World!</span>" + "</p>", node.toString(SaveFormat.HTML)); // We can also modify the result of this conversion using a SaveOptions object HtmlSaveOptions saveOptions = new HtmlSaveOptions(); saveOptions.setExportRelativeFontSize(true); Assert.assertEquals("<p style=\"margin-top:0pt; margin-bottom:8pt; line-height:108%\">" + "<span style=\"font-family:'Times New Roman'\">Hello World!</span>" + "</p>", node.toString(saveOptions));
toString | → inherited from Node |
public java.lang.String toString(int saveFormat) throws java.lang.Exception |
saveFormat
- A SaveFormat value.Example:
Shows how to extract the label of each paragraph in a list as a value or a String.Document doc = new Document(getMyDir() + "Rendering.docx"); doc.updateListLabels(); int listParaCount = 1; for (Paragraph paragraph : (Iterable<Paragraph>) doc.getChildNodes(NodeType.PARAGRAPH, true)) { // Find if we have the paragraph list. In our document our list uses plain arabic numbers, // which start at three and ends at six if (paragraph.getListFormat().isListItem()) { System.out.println(MessageFormat.format("List item paragraph #{0}", listParaCount)); // This is the text we get when actually getting when we output this node to text format // The list labels are not included in this text output. Trim any paragraph formatting characters String paragraphText = paragraph.toString(SaveFormat.TEXT).trim(); System.out.println("Exported Text: " + paragraphText); ListLabel label = paragraph.getListLabel(); // This gets the position of the paragraph in current level of the list. If we have a list with multiple level then this // will tell us what position it is on that particular level System.out.println("\tNumerical Id: " + label.getLabelValue()); // Combine them together to include the list label with the text in the output System.out.println("\tList label combined with text: " + label.getLabelString() + " " + paragraphText); listParaCount++; } }
Example:
Exports the content of a node to String in HTML format.Document doc = new Document(getMyDir() + "Document.docx"); // Extract the last paragraph in the document to convert to HTML Node node = doc.getLastSection().getBody().getLastParagraph(); // When ToString is called using the html SaveFormat overload then the node is converted directly to html Assert.assertEquals("<p style=\"margin-top:0pt; margin-bottom:8pt; line-height:108%; font-size:12pt\">" + "<span style=\"font-family:'Times New Roman'\">Hello World!</span>" + "</p>", node.toString(SaveFormat.HTML)); // We can also modify the result of this conversion using a SaveOptions object HtmlSaveOptions saveOptions = new HtmlSaveOptions(); saveOptions.setExportRelativeFontSize(true); Assert.assertEquals("<p style=\"margin-top:0pt; margin-bottom:8pt; line-height:108%\">" + "<span style=\"font-family:'Times New Roman'\">Hello World!</span>" + "</p>", node.toString(saveOptions));
Example:
Shows the difference between calling the GetText and ToString methods on a node.Document doc = new Document(); // Enter a field into the document DocumentBuilder builder = new DocumentBuilder(doc); builder.insertField("MERGEFIELD Field"); // GetText will retrieve all field codes and special characters Assert.assertEquals("\u0013MERGEFIELD Field\u0014«Field»\u0015\f", doc.getText()); // ToString will give us the plaintext version of the document in the save format we put into the parameter Assert.assertEquals("«Field»\r\n", doc.toString(SaveFormat.TEXT));