POI 3.2图像高度/宽度控制

时间:2009-04-17 10:12:45

标签: java image apache-poi

使用POI版本3.2

问题:无法将图像调整为原始高度和宽度。 我可以将图像添加到excel文件中。

添加图片后,我调用picture.resize();方法

稍后我通过调用调整excel文件的列的大小 sheet.setColumnWidth(columnindex,columnwidth) 图像会丢失其原始高度/宽度。

请帮忙。

4 个答案:

答案 0 :(得分:10)

我发现即使您没有在图片所锚定的列上调用picture.resize(),也不能在sheet.autoSizeColumn(i)之后调用autoSizeColumn(i)

答案 1 :(得分:4)

在带有自定义字体的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 POIU Bug 52504this newsgroup discussion about poi Picture.resize()POI quick guide for inserting pictures

更新:当前代码如下所示,原始图片为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);

答案 2 :(得分:1)

好的解决方案是使用带有scale参数的resize()函数:

double scale = 0.3;
Picture pict = drawing.createPicture(anchor, pictureIdx);
pict.resize(scale);

答案 3 :(得分:0)

你的setcolumnwidth()完成后,你不应该只是抓住图片对象并最后调用resize()吗?