POI 3.2图像高度/宽度控制

使用POI版本3.2

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

添加图像后我调用picture.resize(); 方法。

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

请帮忙。

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

在具有自定义字体的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 52504或关于poi Picture.resize()新闻组讨论以及插入图片的POI快速指南 。

更新 :当前代码如下所示,原始图像为2000×450:

 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); 

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

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

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