5

使用 POI 3.2 版

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

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

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

请帮忙。

4

4 回答 4

11

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

于 2011-08-26T13:04:25.750 回答
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 错误 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);
于 2012-05-10T14:46:26.437 回答
2

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

double scale = 0.3;
Picture pict = drawing.createPicture(anchor, pictureIdx);
pict.resize(scale);
于 2014-06-09T09:54:03.473 回答
0

在完成 setcolumnwidth() 之后,您不应该只握住图片对象并最后调用 resize() 吗?

于 2009-07-15T21:38:18.167 回答