java.lang.Object
com.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());