java.lang.Objectcom.aspose.words.LayoutCollector
public class LayoutCollector
This class allows to compute page numbers of document nodes. When you create a You will be able to find out on which page a particular document node (e.g. run, paragraph or table cell) is located
by using the When you no longer need to collect layout information, it is best to set the Example:
// Open a blank document and create a DocumentBuilder
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Create a LayoutCollector object for our document that will have information about the nodes we placed
LayoutCollector layoutCollector = new LayoutCollector(doc);
// The document itself is a node that contains everything, which currently spans 0 pages
Assert.assertEquals(layoutCollector.getDocument(), doc);
Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 0);
// Populate the document with sections and page breaks
builder.write("Section 1");
builder.insertBreak(BreakType.PAGE_BREAK);
builder.insertBreak(BreakType.PAGE_BREAK);
doc.appendChild(new Section(doc));
doc.getLastSection().appendChild(new Body(doc));
builder.moveToDocumentEnd();
builder.write("Section 2");
builder.insertBreak(BreakType.PAGE_BREAK);
builder.insertBreak(BreakType.PAGE_BREAK);
// The collected layout data won't automatically keep up with the real document contents
Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 0);
// After we clear the layout collection and update it, the layout entity collection will be populated with up-to-date information about our nodes
// The page span for the document now shows 5, which is what we would expect after placing 4 page breaks
layoutCollector.clear();
doc.updatePageLayout();
Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 5);
// We can also see the start/end pages of any other node, and their overall page spans
NodeCollection nodes = doc.getChildNodes(NodeType.ANY, true);
for (Node node : (Iterable<Node>) nodes) {
System.out.println(MessageFormat.format("-> NodeType.{0}:", node.getNodeType()));
System.out.println(MessageFormat.format("\tStarts on page {0}, ends on page {1}, spanning {2} pages.", layoutCollector.getStartPageIndex(node), layoutCollector.getEndPageIndex(node), layoutCollector.getNumPagesSpanned(node)));
}
// We can iterate over the layout entities using a LayoutEnumerator
LayoutEnumerator layoutEnumerator = new LayoutEnumerator(doc);
Assert.assertEquals(LayoutEntityType.PAGE, layoutEnumerator.getType());
// The LayoutEnumerator can traverse the collection of layout entities like a tree
// We can also point it to any node's corresponding layout entity like this
layoutEnumerator.setCurrent(layoutCollector.getEntity(doc.getChild(NodeType.PARAGRAPH, 1, true)));
Assert.assertEquals(LayoutEntityType.SPAN, layoutEnumerator.getType());
Assert.assertEquals("¶", layoutEnumerator.getText());
Constructor Summary |
---|
LayoutCollector(Document doc)
Initializes an instance of this class. |
Property Getters/Setters Summary | ||
---|---|---|
Document | getDocument() | |
void | setDocument(Document value) | |
Gets or sets the document this collector instance is attached to. |
Method Summary | ||
---|---|---|
void | clear() | |
Clears all collected layout data. Call this method after document was manually updated, or layout was rebuilt. | ||
int | getEndPageIndex(Node node) | |
Gets 1-based index of the page where node ends. Returns 0 if node cannot be mapped to a page. | ||
java.lang.Object | getEntity(Node node) | |
Returns an opaque position of the |
||
int | getNumPagesSpanned(Node node) | |
Gets number of pages the specified node spans. 0 if node is within a single page.
This is the same as |
||
int | getStartPageIndex(Node node) | |
Gets 1-based index of the page where node begins. Returns 0 if node cannot be mapped to a page. |
Constructor Detail |
---|
public LayoutCollector(Document doc)
doc
- The document to which this collector instance will be attached to.Example:
Shows how to see the page spans of nodes.// Open a blank document and create a DocumentBuilder Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create a LayoutCollector object for our document that will have information about the nodes we placed LayoutCollector layoutCollector = new LayoutCollector(doc); // The document itself is a node that contains everything, which currently spans 0 pages Assert.assertEquals(layoutCollector.getDocument(), doc); Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 0); // Populate the document with sections and page breaks builder.write("Section 1"); builder.insertBreak(BreakType.PAGE_BREAK); builder.insertBreak(BreakType.PAGE_BREAK); doc.appendChild(new Section(doc)); doc.getLastSection().appendChild(new Body(doc)); builder.moveToDocumentEnd(); builder.write("Section 2"); builder.insertBreak(BreakType.PAGE_BREAK); builder.insertBreak(BreakType.PAGE_BREAK); // The collected layout data won't automatically keep up with the real document contents Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 0); // After we clear the layout collection and update it, the layout entity collection will be populated with up-to-date information about our nodes // The page span for the document now shows 5, which is what we would expect after placing 4 page breaks layoutCollector.clear(); doc.updatePageLayout(); Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 5); // We can also see the start/end pages of any other node, and their overall page spans NodeCollection nodes = doc.getChildNodes(NodeType.ANY, true); for (Node node : (Iterable<Node>) nodes) { System.out.println(MessageFormat.format("-> NodeType.{0}:", node.getNodeType())); System.out.println(MessageFormat.format("\tStarts on page {0}, ends on page {1}, spanning {2} pages.", layoutCollector.getStartPageIndex(node), layoutCollector.getEndPageIndex(node), layoutCollector.getNumPagesSpanned(node))); } // We can iterate over the layout entities using a LayoutEnumerator LayoutEnumerator layoutEnumerator = new LayoutEnumerator(doc); Assert.assertEquals(LayoutEntityType.PAGE, layoutEnumerator.getType()); // The LayoutEnumerator can traverse the collection of layout entities like a tree // We can also point it to any node's corresponding layout entity like this layoutEnumerator.setCurrent(layoutCollector.getEntity(doc.getChild(NodeType.PARAGRAPH, 1, true))); Assert.assertEquals(LayoutEntityType.SPAN, layoutEnumerator.getType()); Assert.assertEquals("¶", layoutEnumerator.getText());
Property Getters/Setters Detail |
---|
getDocument/setDocument | |
public Document getDocument() / public void setDocument(Document value) |
null
afterwards,
otherwise the collector continues to accumulate information from subsequent rebuilds of the document's page layout.
Example:
Shows how to see the page spans of nodes.// Open a blank document and create a DocumentBuilder Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create a LayoutCollector object for our document that will have information about the nodes we placed LayoutCollector layoutCollector = new LayoutCollector(doc); // The document itself is a node that contains everything, which currently spans 0 pages Assert.assertEquals(layoutCollector.getDocument(), doc); Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 0); // Populate the document with sections and page breaks builder.write("Section 1"); builder.insertBreak(BreakType.PAGE_BREAK); builder.insertBreak(BreakType.PAGE_BREAK); doc.appendChild(new Section(doc)); doc.getLastSection().appendChild(new Body(doc)); builder.moveToDocumentEnd(); builder.write("Section 2"); builder.insertBreak(BreakType.PAGE_BREAK); builder.insertBreak(BreakType.PAGE_BREAK); // The collected layout data won't automatically keep up with the real document contents Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 0); // After we clear the layout collection and update it, the layout entity collection will be populated with up-to-date information about our nodes // The page span for the document now shows 5, which is what we would expect after placing 4 page breaks layoutCollector.clear(); doc.updatePageLayout(); Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 5); // We can also see the start/end pages of any other node, and their overall page spans NodeCollection nodes = doc.getChildNodes(NodeType.ANY, true); for (Node node : (Iterable<Node>) nodes) { System.out.println(MessageFormat.format("-> NodeType.{0}:", node.getNodeType())); System.out.println(MessageFormat.format("\tStarts on page {0}, ends on page {1}, spanning {2} pages.", layoutCollector.getStartPageIndex(node), layoutCollector.getEndPageIndex(node), layoutCollector.getNumPagesSpanned(node))); } // We can iterate over the layout entities using a LayoutEnumerator LayoutEnumerator layoutEnumerator = new LayoutEnumerator(doc); Assert.assertEquals(LayoutEntityType.PAGE, layoutEnumerator.getType()); // The LayoutEnumerator can traverse the collection of layout entities like a tree // We can also point it to any node's corresponding layout entity like this layoutEnumerator.setCurrent(layoutCollector.getEntity(doc.getChild(NodeType.PARAGRAPH, 1, true))); Assert.assertEquals(LayoutEntityType.SPAN, layoutEnumerator.getType()); Assert.assertEquals("¶", layoutEnumerator.getText());
Method Detail |
---|
clear | |
public void clear() |
Example:
Shows how to see the page spans of nodes.// Open a blank document and create a DocumentBuilder Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create a LayoutCollector object for our document that will have information about the nodes we placed LayoutCollector layoutCollector = new LayoutCollector(doc); // The document itself is a node that contains everything, which currently spans 0 pages Assert.assertEquals(layoutCollector.getDocument(), doc); Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 0); // Populate the document with sections and page breaks builder.write("Section 1"); builder.insertBreak(BreakType.PAGE_BREAK); builder.insertBreak(BreakType.PAGE_BREAK); doc.appendChild(new Section(doc)); doc.getLastSection().appendChild(new Body(doc)); builder.moveToDocumentEnd(); builder.write("Section 2"); builder.insertBreak(BreakType.PAGE_BREAK); builder.insertBreak(BreakType.PAGE_BREAK); // The collected layout data won't automatically keep up with the real document contents Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 0); // After we clear the layout collection and update it, the layout entity collection will be populated with up-to-date information about our nodes // The page span for the document now shows 5, which is what we would expect after placing 4 page breaks layoutCollector.clear(); doc.updatePageLayout(); Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 5); // We can also see the start/end pages of any other node, and their overall page spans NodeCollection nodes = doc.getChildNodes(NodeType.ANY, true); for (Node node : (Iterable<Node>) nodes) { System.out.println(MessageFormat.format("-> NodeType.{0}:", node.getNodeType())); System.out.println(MessageFormat.format("\tStarts on page {0}, ends on page {1}, spanning {2} pages.", layoutCollector.getStartPageIndex(node), layoutCollector.getEndPageIndex(node), layoutCollector.getNumPagesSpanned(node))); } // We can iterate over the layout entities using a LayoutEnumerator LayoutEnumerator layoutEnumerator = new LayoutEnumerator(doc); Assert.assertEquals(LayoutEntityType.PAGE, layoutEnumerator.getType()); // The LayoutEnumerator can traverse the collection of layout entities like a tree // We can also point it to any node's corresponding layout entity like this layoutEnumerator.setCurrent(layoutCollector.getEntity(doc.getChild(NodeType.PARAGRAPH, 1, true))); Assert.assertEquals(LayoutEntityType.SPAN, layoutEnumerator.getType()); Assert.assertEquals("¶", layoutEnumerator.getText());
getEndPageIndex | |
public int getEndPageIndex(Node node) throws java.lang.Exception |
Example:
Shows how to see the page spans of nodes.// Open a blank document and create a DocumentBuilder Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create a LayoutCollector object for our document that will have information about the nodes we placed LayoutCollector layoutCollector = new LayoutCollector(doc); // The document itself is a node that contains everything, which currently spans 0 pages Assert.assertEquals(layoutCollector.getDocument(), doc); Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 0); // Populate the document with sections and page breaks builder.write("Section 1"); builder.insertBreak(BreakType.PAGE_BREAK); builder.insertBreak(BreakType.PAGE_BREAK); doc.appendChild(new Section(doc)); doc.getLastSection().appendChild(new Body(doc)); builder.moveToDocumentEnd(); builder.write("Section 2"); builder.insertBreak(BreakType.PAGE_BREAK); builder.insertBreak(BreakType.PAGE_BREAK); // The collected layout data won't automatically keep up with the real document contents Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 0); // After we clear the layout collection and update it, the layout entity collection will be populated with up-to-date information about our nodes // The page span for the document now shows 5, which is what we would expect after placing 4 page breaks layoutCollector.clear(); doc.updatePageLayout(); Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 5); // We can also see the start/end pages of any other node, and their overall page spans NodeCollection nodes = doc.getChildNodes(NodeType.ANY, true); for (Node node : (Iterable<Node>) nodes) { System.out.println(MessageFormat.format("-> NodeType.{0}:", node.getNodeType())); System.out.println(MessageFormat.format("\tStarts on page {0}, ends on page {1}, spanning {2} pages.", layoutCollector.getStartPageIndex(node), layoutCollector.getEndPageIndex(node), layoutCollector.getNumPagesSpanned(node))); } // We can iterate over the layout entities using a LayoutEnumerator LayoutEnumerator layoutEnumerator = new LayoutEnumerator(doc); Assert.assertEquals(LayoutEntityType.PAGE, layoutEnumerator.getType()); // The LayoutEnumerator can traverse the collection of layout entities like a tree // We can also point it to any node's corresponding layout entity like this layoutEnumerator.setCurrent(layoutCollector.getEntity(doc.getChild(NodeType.PARAGRAPH, 1, true))); Assert.assertEquals(LayoutEntityType.SPAN, layoutEnumerator.getType()); Assert.assertEquals("¶", layoutEnumerator.getText());
getEntity | |
public java.lang.Object getEntity(Node node) throws java.lang.Exception |
This method works for only
Note that the entity returned for a
If you need to navigate to a
If you need to navigate to a
Example:
Shows how to see the page spans of nodes.// Open a blank document and create a DocumentBuilder Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create a LayoutCollector object for our document that will have information about the nodes we placed LayoutCollector layoutCollector = new LayoutCollector(doc); // The document itself is a node that contains everything, which currently spans 0 pages Assert.assertEquals(layoutCollector.getDocument(), doc); Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 0); // Populate the document with sections and page breaks builder.write("Section 1"); builder.insertBreak(BreakType.PAGE_BREAK); builder.insertBreak(BreakType.PAGE_BREAK); doc.appendChild(new Section(doc)); doc.getLastSection().appendChild(new Body(doc)); builder.moveToDocumentEnd(); builder.write("Section 2"); builder.insertBreak(BreakType.PAGE_BREAK); builder.insertBreak(BreakType.PAGE_BREAK); // The collected layout data won't automatically keep up with the real document contents Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 0); // After we clear the layout collection and update it, the layout entity collection will be populated with up-to-date information about our nodes // The page span for the document now shows 5, which is what we would expect after placing 4 page breaks layoutCollector.clear(); doc.updatePageLayout(); Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 5); // We can also see the start/end pages of any other node, and their overall page spans NodeCollection nodes = doc.getChildNodes(NodeType.ANY, true); for (Node node : (Iterable<Node>) nodes) { System.out.println(MessageFormat.format("-> NodeType.{0}:", node.getNodeType())); System.out.println(MessageFormat.format("\tStarts on page {0}, ends on page {1}, spanning {2} pages.", layoutCollector.getStartPageIndex(node), layoutCollector.getEndPageIndex(node), layoutCollector.getNumPagesSpanned(node))); } // We can iterate over the layout entities using a LayoutEnumerator LayoutEnumerator layoutEnumerator = new LayoutEnumerator(doc); Assert.assertEquals(LayoutEntityType.PAGE, layoutEnumerator.getType()); // The LayoutEnumerator can traverse the collection of layout entities like a tree // We can also point it to any node's corresponding layout entity like this layoutEnumerator.setCurrent(layoutCollector.getEntity(doc.getChild(NodeType.PARAGRAPH, 1, true))); Assert.assertEquals(LayoutEntityType.SPAN, layoutEnumerator.getType()); Assert.assertEquals("¶", layoutEnumerator.getText());
getNumPagesSpanned | |
public int getNumPagesSpanned(Node node) throws java.lang.Exception |
Example:
Shows how to see the page spans of nodes.// Open a blank document and create a DocumentBuilder Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create a LayoutCollector object for our document that will have information about the nodes we placed LayoutCollector layoutCollector = new LayoutCollector(doc); // The document itself is a node that contains everything, which currently spans 0 pages Assert.assertEquals(layoutCollector.getDocument(), doc); Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 0); // Populate the document with sections and page breaks builder.write("Section 1"); builder.insertBreak(BreakType.PAGE_BREAK); builder.insertBreak(BreakType.PAGE_BREAK); doc.appendChild(new Section(doc)); doc.getLastSection().appendChild(new Body(doc)); builder.moveToDocumentEnd(); builder.write("Section 2"); builder.insertBreak(BreakType.PAGE_BREAK); builder.insertBreak(BreakType.PAGE_BREAK); // The collected layout data won't automatically keep up with the real document contents Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 0); // After we clear the layout collection and update it, the layout entity collection will be populated with up-to-date information about our nodes // The page span for the document now shows 5, which is what we would expect after placing 4 page breaks layoutCollector.clear(); doc.updatePageLayout(); Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 5); // We can also see the start/end pages of any other node, and their overall page spans NodeCollection nodes = doc.getChildNodes(NodeType.ANY, true); for (Node node : (Iterable<Node>) nodes) { System.out.println(MessageFormat.format("-> NodeType.{0}:", node.getNodeType())); System.out.println(MessageFormat.format("\tStarts on page {0}, ends on page {1}, spanning {2} pages.", layoutCollector.getStartPageIndex(node), layoutCollector.getEndPageIndex(node), layoutCollector.getNumPagesSpanned(node))); } // We can iterate over the layout entities using a LayoutEnumerator LayoutEnumerator layoutEnumerator = new LayoutEnumerator(doc); Assert.assertEquals(LayoutEntityType.PAGE, layoutEnumerator.getType()); // The LayoutEnumerator can traverse the collection of layout entities like a tree // We can also point it to any node's corresponding layout entity like this layoutEnumerator.setCurrent(layoutCollector.getEntity(doc.getChild(NodeType.PARAGRAPH, 1, true))); Assert.assertEquals(LayoutEntityType.SPAN, layoutEnumerator.getType()); Assert.assertEquals("¶", layoutEnumerator.getText());
getStartPageIndex | |
public int getStartPageIndex(Node node) throws java.lang.Exception |
Example:
Shows how to see the page spans of nodes.// Open a blank document and create a DocumentBuilder Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create a LayoutCollector object for our document that will have information about the nodes we placed LayoutCollector layoutCollector = new LayoutCollector(doc); // The document itself is a node that contains everything, which currently spans 0 pages Assert.assertEquals(layoutCollector.getDocument(), doc); Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 0); // Populate the document with sections and page breaks builder.write("Section 1"); builder.insertBreak(BreakType.PAGE_BREAK); builder.insertBreak(BreakType.PAGE_BREAK); doc.appendChild(new Section(doc)); doc.getLastSection().appendChild(new Body(doc)); builder.moveToDocumentEnd(); builder.write("Section 2"); builder.insertBreak(BreakType.PAGE_BREAK); builder.insertBreak(BreakType.PAGE_BREAK); // The collected layout data won't automatically keep up with the real document contents Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 0); // After we clear the layout collection and update it, the layout entity collection will be populated with up-to-date information about our nodes // The page span for the document now shows 5, which is what we would expect after placing 4 page breaks layoutCollector.clear(); doc.updatePageLayout(); Assert.assertEquals(layoutCollector.getNumPagesSpanned(doc), 5); // We can also see the start/end pages of any other node, and their overall page spans NodeCollection nodes = doc.getChildNodes(NodeType.ANY, true); for (Node node : (Iterable<Node>) nodes) { System.out.println(MessageFormat.format("-> NodeType.{0}:", node.getNodeType())); System.out.println(MessageFormat.format("\tStarts on page {0}, ends on page {1}, spanning {2} pages.", layoutCollector.getStartPageIndex(node), layoutCollector.getEndPageIndex(node), layoutCollector.getNumPagesSpanned(node))); } // We can iterate over the layout entities using a LayoutEnumerator LayoutEnumerator layoutEnumerator = new LayoutEnumerator(doc); Assert.assertEquals(LayoutEntityType.PAGE, layoutEnumerator.getType()); // The LayoutEnumerator can traverse the collection of layout entities like a tree // We can also point it to any node's corresponding layout entity like this layoutEnumerator.setCurrent(layoutCollector.getEntity(doc.getChild(NodeType.PARAGRAPH, 1, true))); Assert.assertEquals(LayoutEntityType.SPAN, layoutEnumerator.getType()); Assert.assertEquals("¶", layoutEnumerator.getText());