请问怎么获取一个文档的所有 Shape 和 GroupShape 节点,并且保证获取到的节点集合顺序和文档中本来的节点顺序一致
@ouchli 您可以使用 DocumentVisitor 循环遍历文档节点。 例如看下面的代码:
Document doc = new Document("C:\\Temp\\in.docx");
doc.accept(new ShapeVisitor());
private static class ShapeVisitor extends DocumentVisitor
{
@Override
public int visitGroupShapeStart(GroupShape groupShape) throws Exception {
System.out.println("GroupShape start");
return VisitorAction.CONTINUE;
}
@Override
public int visitGroupShapeEnd(GroupShape groupShape) throws Exception {
System.out.println("GroupShape end");
return VisitorAction.CONTINUE;
}
@Override
public int visitShapeStart(Shape shape) throws Exception {
System.out.println("Shape start");
return VisitorAction.CONTINUE;
}
@Override
public int visitShapeEnd(Shape shape) throws Exception {
System.out.println("Shape end");
return VisitorAction.CONTINUE;
}
}
请问返回的节点集合怎么获取呢
@ouchli 您可以创建一个列表,在其中添加找到的形状。但即使是DocumentVisitor也无法根据文档中的视觉顺序获得正确的顺序。您可以尝试使用LayoutEnumerator来获取形状位置,并根据这些数据计算顺序。