使用POI版本3.2
问题:无法将图像调整为原始高度和宽度。 我可以将图像添加到excel文件中。
添加图片后,我调用picture.resize();方法
稍后我通过调用调整excel文件的列的大小 sheet.setColumnWidth(columnindex,columnwidth) 图像会丢失其原始高度/宽度。
请帮忙。
答案 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 52504或this 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()吗?