怎么获取一个文档的所有图片

请问怎么获取一个文档的所有 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来获取形状位置,并根据这些数据计算顺序。