Apache POI: Word получает размеры изображения

Я пытаюсь определить фактический размер встроенных изображений в документах MS Word, используя

        HWPFDocument docB = new HWPFDocument(fileInputStream);
        PicturesTable picB = docB.getPicturesTable();
        List picturesB = picB.getAllPictures();
        for (Object o : picturesB) {
            Picture pic = (Picture) o;
            int height = pic.getHeight();
            int width = pic.getWidht();
        }

Это отлично работает для некоторых изображений, но для других getHeight () и getWidth () вернет только -1, как указано в документация. Так есть ли другой способ получить реальный размер этих изображений в документе?


person silent    schedule 22.04.2014    source источник
comment
А как насчет их копирования и сохранения на диск, чтобы управлять ими другим способом? Я бы побеспокоился, что это векторная графика без определяемых размеров.   -  person Kieveli    schedule 22.04.2014
comment
хорошо, если я сохраню их как изображения, я больше не смогу определить размер в Word. Даже векторная графика будет иметь некоторый размер в документе Word.   -  person silent    schedule 22.04.2014
comment
Интересно, нужно ли вам связать документ с какой-либо формой рендеринга или предварительного просмотра до того, как станет известен размер макета. (извините, я не могу быть более полезным)   -  person Kieveli    schedule 22.04.2014
comment
Вы пробовали перебирать разделы, абзацы и символы? Документация предполагает, что это лучший способ получить точный список изображений. (Не уверен, что это решит проблему с размером)   -  person Kieveli    schedule 22.04.2014
comment
Нет, я еще не знал, но могу попробовать. Однако я не ожидаю, что это будет иметь большое значение.   -  person silent    schedule 23.04.2014
comment
// Обновление: только что попробовал, результат тот же :(   -  person silent    schedule 23.04.2014


Ответы (1)


Вместо getHeight() и getWidth() вы можете использовать getDxaGoal(), соотв. getDyaGoal(). Они представляют исходный размер изображения до масштабирования / обрезки в твипах.

Затем вы можете умножить это на getVerticalScalingFactor() / 1000.0 соотв. getHorizontalScalingFactor() / 1000.0, чтобы получить окончательный (визуализированный) размер. Деление на 1000,0 необходимо, потому что эти коэффициенты масштабирования даны промилле.

person morido    schedule 20.01.2016