aspose-words / Aspose.Words-for-Java

Aspose.Words for Java examples, plugins and showcases
https://products.aspose.com/words/java
MIT License
402 stars 206 forks source link

请问解析word的时候,发现有一些图片在调用remove的时候没有删除当前图片 #46

Closed zuwensong closed 4 years ago

zuwensong commented 6 years ago
        NodeCollection shapeCollection  = doc.getChildNodes(NodeType.DRAWING_ML, true);
        for (int i=0; i<shapeCollection.getCount(); i++) {
            DrawingML drawingML = (DrawingML) shapeCollection.get(i);
            if(drawingML.hasImage()) {
                  String imageFileName = java.text.MessageFormat.format(
                        "Image.ExportImages.{0} Out{1}", i, FileFormatUtil.imageTypeToExtension(drawingML.getImageData().getImageType()));
                  DrawingMLImageData imageData = drawingML.getImageData();
                  imageData.save("D:\\company\\pic\\" + imageFileName);
                drawingML.remove(); // There are some images that are not effective
            }
        }
aspose-words commented 6 years ago

@zuwensong, 请尝试使用以下代码:

Document doc = new Document("D:\\Temp\\in.docx");

ArrayList shapesToRemove = new ArrayList();
NodeCollection shapeCollection  = doc.getChildNodes(NodeType.SHAPE, true);
for (int i=0; i<shapeCollection.getCount(); i++) {
    Shape shape = (Shape) shapeCollection.get(i);
    if(shape.hasImage()) {
        String imageFileName = java.text.MessageFormat.format(
                "Image.ExportImages.{0} Out{1}", i, FileFormatUtil.imageTypeToExtension(shape.getImageData().getImageType()));
        ImageData imageData = shape.getImageData();
        imageData.save("D:\\temp\\pic\\" + imageFileName);

        shapesToRemove.add(shape);
    }
}

for(Shape shape : (Iterable<Shape>) shapesToRemove) {
    shape.remove();
}

doc.save("D:\\Temp\\awjava-18.4.docx");