Получить положение изображения в Apache POI из Excel XLS HSSF - PullRequest
2 голосов
/ 10 февраля 2012

Мне нужно получить данные изображения в байтах, затем их привязки и, наконец, отобразить результат на экране в целевом положении и размере для моих пользователей ...

API показывает, что мы можем получить списоквсех изображений через объект книги, например:

List<HSSFPictureData> picturesData = workbook.getAllPictures();

, а также мы можем получить все детали привязки (см. HSSFClientAnchor details здесь ).

Проблема в HSSFPicture.getPictureIndex (), на который ссылается якорь, не соответствует индексу коллекции HSSFPictureData метода getAllPictures (), описанному выше ...

... теперь возникает вопрос: как сопоставить экземпляры HSSFClientAnchor с конкретными экземплярами HSSFPictureData или наоборот?

1 Ответ

1 голос
/ 25 апреля 2012
List<HSSFShape> shapes  = this.tSheet.sheet().getDrawingPatriarch().getChildren();
        for (int i = 0; i < shapes.size(); i++)
        {
            if(shapes.get(i) instanceof HSSFPicture)
            {   
                HSSFPicture pic = (HSSFPicture) shapes.get(i);
                HSSFPictureData picdata = this.tSheet.sheet().getWorkbook().getAllPictures().get(pic.getPictureIndex());
                int pictureIndex = this.newSheet.getWorkbook().addPicture( picdata.getData(), picdata.getFormat());

this.newSheet.createDrawingPatriarch().createPicture((HSSFClientAnchor)pic.getAnchor()r, pictureIndex);

            }


        }

ПРИМЕЧАНИЕ. Приведенный выше код будет считывать данные рис. С одного листа на другой лист. This.tSheet.sheet () - исходный лист this.newSheet - новый лист

...