POI 3.2 Управление высотой / шириной изображения - PullRequest
4 голосов
/ 17 апреля 2009

Использование POI версии 3.2

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

После добавления изображения я вызываю picture.resize (); способ.

Позже я изменяю размер столбцов файла Excel, вызывая sheet.setColumnWidth (columnindex, columnwidth) изображение теряет свою первоначальную высоту / ширину.

Пожалуйста, помогите.

Ответы [ 4 ]

11 голосов
/ 26 августа 2011

Я обнаружил, что вы НЕ должны вызывать picture.resize() до тех пор, пока sheet.autoSizeColumn(i), даже если вы не звоните autoSizeColumn(i) в столбце, к которому привязана картинка.

4 голосов
/ 10 мая 2012

На HSSFWorkbook с пользовательским шрифтом я сделал следующее, чтобы логотип отображался в нужных размерах:

CreationHelper helper = wb.getCreationHelper();
Drawing drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = helper.createClientAnchor();
anchor.setDx1(LOGO_MARGIN * XSSFShape.EMU_PER_PIXEL);
anchor.setDx2(LOGO_WIDTH_IN_FUNNY_POI_FORMAT * XSSFShape.EMU_PER_PIXEL);
anchor.setDy1(LOGO_MARGIN * XSSFShape.EMU_PER_PIXEL);
anchor.setDy2(LOGO_HEIGHT_IN_FUNNY_POI_FORMAT * XSSFShape.EMU_PER_PIXEL);
drawing.createPicture(anchor, pictureIndex);

Где я установил LOGO_HEIGHT ... и LOGO_WIDTH .. на требуемый размер изображения в пикселях.

Полученное изображение не было в исходном соотношении и не соответствует ожидаемому размеру пикселя. Поэтому я использовал ожидаемое соотношение размера и текущего размера и скорректировал значения LOGO_WIDTH .. и LOGO_HEIGHT .. соответственно. Не красиво, но работает: /

И не звоните Picture.resize() потом.

См. Apache POI Bug 52504 или , обсуждение этой группы новостей о poi Picture.resize() и Краткое руководство по POI для вставки изображений .

Обновление : текущий код выглядит следующим образом, исходное изображение 2000x450:

LOGO_MARGIN = 2;
int index = getLogoPictureIndex();
CreationHelper helper = this.wb.getCreationHelper();

Drawing drawing = this.sheet.createDrawingPatriarch();
ClientAnchor anchor = helper.createClientAnchor();

anchor.setDx1(LOGO_MARGIN * XSSFShape.EMU_PER_PIXEL);
anchor.setDy1(LOGO_MARGIN * XSSFShape.EMU_PER_PIXEL);

Picture pic = drawing.createPicture(anchor, index);
pic.resize(0.064);
1 голос
/ 09 июня 2014

Хорошим решением является использование функции resize () с аргументом scale:

double scale = 0.3;
Picture pict = drawing.createPicture(anchor, pictureIdx);
pict.resize(scale);
0 голосов
/ 16 июля 2009

Разве вы не должны просто удерживать объект изображения и вызывать resize () в последний раз, после того как ваши setcolumnwidth () завершены?

...