2013-04-22 2 views
4

У кого-нибудь был опыт анализа файла docx с помощью Apache poi? при извлечении изображения из CharacterRun используяПолучение размера изображения из документа XWPF (Apache POI)

paragraph.getRun().getEmbeddedPictures(); 

Я не смог найти способ, чтобы получить масштабирования и/или ширина/высота данные изображения.

Есть ли функциональность для этого?

спасибо.

ответ

7

Понял, что!

Я не уверен, что это официальный способ, но вот как вы можете это сделать.

XWPFRun оленья кожа специально дать вам любую информацию, но XWPFPicture, имеет метод, называемый, getCTPicture, который возвращает XML часть изображения в DOCX файл, используя ваш любимый XML-анализатор, все, что вам нужно, чтобы найти эту «/ XML -фрагмент/pic: spPr/a: xfrm/a: ext "(xpath) в структуре XML, этот тег будет иметь атрибуты cx и cy, это в основном ширина отображения и высота изображения в английских метрических единицах EMU. Если вы указали Google, вы можете найти EMUS_PER_INCH = 914400, чтобы вы могли преобразовать это в дюймы (или позже конвертировать дюймы в пиксели, если я не ошибаюсь, должно быть 96 пикселей на дюйм) , поэтому сделайте подсчет вы можете выяснить новая ширина и высота изображения.

Сложно, но это то, что есть. И это работает.

Надеюсь, что кому-то поможет.

+3

Это просто УДИВИТЕЛЬНО! Большое спасибо, Аветис, ты спас мой день! Это отлично работает: 'picture.getCTPicture(). GetSpPr(). GetXfrm(). GetExt(). GetCx()' (то же самое для Cy). Тогда нам даже не нужно использовать такие вещи, как 'Units.toEMU()' или 'Units.toPoints', поскольку метод' run.addPicture() 'принимает ширину и высоту (4-й и 5-й аргументы) в формате EMU. – DenisFLASH

+0

Да, и я помню, что я сошел с ума от этого, так здорово, что это сэкономило некоторое время для вас. есть так много страшных проблем с этим вперед, хотя, так что удачи: D –

+0

docx вовсе не «открытый» формат, поэтому, вероятно, было трудной задачей для парней Apache создать такой инструмент, как POI, но, тем не менее, это очень плохо документированы. Можно сказать «так в чем проблема: идти и вносить свой вклад!», Но я действительно надеюсь, что мы все забудем docx как кошмар :-) – DenisFLASH