2016-06-26 5 views
4

Я могу получить изображение из таблицы слов ms, но не смог получить фигуры и клипарты.Прочитайте фигуры (прямоугольник, квадрат, круг, стрелка и т. Д.), Клип-арт из файла MS Word с помощью java

public static void main(String[] args) throws Exception { 
    // The path to the documents directory. 
    try { 
     String dataDir = "E://test//demo.docx"; 
     generatePicturesAsImages(dataDir); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public static void generatePicturesAsImages(String sourcePath) { 
    try { 
     Document doc = new Document(sourcePath); 
     ImageSaveOptions options = new ImageSaveOptions(SaveFormat.JPEG); 
     options.setJpegQuality(100); 
     options.setResolution(100); 
     // options.setUseHighQualityRendering(true); 
     List<ShapeRenderer> pictures = getAllPictures(doc); 
     if (pictures != null) { 
      for (int i = 0; i < pictures.size(); i++) { 
       ShapeRenderer picture = pictures.get(i); 
       String imageFilePath = sourcePath + "_output_" + i + ".jpeg"; 
       picture.save(imageFilePath, options); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

private static List<ShapeRenderer> getAllPictures(final Document document) throws Exception { 
    List<ShapeRenderer> images = null; 
    @SuppressWarnings("unchecked") 
    NodeCollection<DrawingML> nodeCollection = document.getChildNodes(NodeType.DRAWING_ML, Boolean.TRUE); 
    if (nodeCollection.getCount() > 0) { 
     images = new ArrayList<ShapeRenderer>(); 
     for (DrawingML drawingML : nodeCollection) { 
      images.add(drawingML.getShapeRenderer()); 
     } 
    } 
    return images; 
} 

Над программы получает изображения из таблицы, так что я должен добавить больше, чтобы получить формы .. Пожалуйста, предложите мне любую помощь будет признательна!

ответ

1

Вы используете старую версию Aspose.Words. Если вы хотите использовать более старую версию Aspose.Words, получите коллекцию узлов Shape и DrawingML, используя Document.getChildNodes в методе getAllPictures.

NodeCollection<DrawingML> drwingmlnodes = document.getChildNodes(NodeType.DRAWING_ML, Boolean.TRUE); 

NodeCollection<Shape> shapenodes = document.getChildNodes(NodeType.SHAPE, Boolean.TRUE); 

Заметим, что мы удалили DrawingML from our APIs in Aspose.Words 15.2.0. Если вы хотите использовать последнюю версию Aspose.Words v16.5.0, используйте только NodeType.SHAPE.

Я работаю с Aspose в качестве разработчика-евангелиста.