使用 POI 3.2 版
问题:无法将图像调整为其原始高度和宽度。我可以将图像添加到 excel 文件中。
添加图像后,我调用 picture.resize(); 方法。
后来我通过调用 sheet.setColumnWidth(columnindex, columnwidth) 来调整 excel 文件的列大小,图像丢失其原始高度/宽度。
请帮忙。
使用 POI 3.2 版
问题:无法将图像调整为其原始高度和宽度。我可以将图像添加到 excel 文件中。
添加图像后,我调用 picture.resize(); 方法。
后来我通过调用 sheet.setColumnWidth(columnindex, columnwidth) 来调整 excel 文件的列大小,图像丢失其原始高度/宽度。
请帮忙。
我发现即使您没有在图片所锚定的列上调用,也不能调用picture.resize()
直到之后。sheet.autoSizeColumn(i)
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 错误 52504或此新闻组讨论有关 poiPicture.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);
好的解决方案是使用带有 scale 参数的 resize() 函数:
double scale = 0.3;
Picture pict = drawing.createPicture(anchor, pictureIdx);
pict.resize(scale);
在完成 setcolumnwidth() 之后,您不应该只握住图片对象并最后调用 resize() 吗?