首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache POI-HSSF在将图片添加到Excel单元格时扭曲图像大小

Apache POI-HSSF在将图片添加到Excel单元格时扭曲图像大小
EN

Stack Overflow用户
提问于 2013-04-24 08:59:49
回答 4查看 10.2K关注 0票数 8

我正在使用Apache POI-HSSF将图片添加到单元格中。图像的大小是120x100,但无论我做什么以及如何调整它的大小,Excel电子表格总是显示它跨越多行,并将其扭曲到比宽度大得多的高度。

如何保持原来的大小?

我的代码:

代码语言:javascript
复制
InputStream is = new FileInputStream(getImageURL());
byte[] bytes = IOUtils.toByteArray(is);
int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);
is.close();

//add a picture shape
CreationHelper helper = wb.getCreationHelper();
ClientAnchor anchor = helper.createClientAnchor();
// Create the drawing patriarch.  This is the top level container for all shapes.
Drawing drawing = sheet1.createDrawingPatriarch();
//set top-left corner of the picture,
//subsequent call of Picture#resize() will operate relative to it

anchor.setAnchorType(0);
anchor.setCol1(1);
anchor.setRow1(1);

Picture pict = drawing.createPicture(anchor, pictureIdx);

//auto-size picture relative to its top-left corner
pict.resize();

我已经尝试了所有的dx/dy坐标和列/行。位置无关紧要,问题是它会水平拉伸图像。

EN

回答 4

Stack Overflow用户

发布于 2016-01-21 03:21:48

我一直面临着类似的问题,我添加的图像被扭曲了。我尝试了pict.resize()和sheet.autoSizeColumn(),但不起作用。最后我找到了下面的网址:- https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/examples/ss/AddDimensionedImage.java

我将上面的类添加到我的代码中,并使用它的方法将图像添加到excel中。我能够添加几乎没有失真的图像。希望这对你也有帮助。我写了下面的代码:

代码语言:javascript
复制
BufferedImage imageIO = ImageIO.read(new URL(image));
int height= imageIO.getHeight();
int width=imageIO.getWidth();
int relativeHeight=(int)(((double)height/width)*28.5);
new AddDimensionedImage().addImageToSheet(2,  sheet.getPhysicalNumberOfRows()-1 , sheet, sheet.createDrawingPatriarch(),new URL(image), 30, relativeHeight, AddDimensionedImage.EXPAND_ROW);
票数 6
EN

Stack Overflow用户

发布于 2013-08-07 22:51:35

据我对Apache POI文档的理解,这是因为pict.resize();,因为它说here,如果工作簿的默认字体大小被更改,图片可能会垂直或水平拉伸。

票数 3
EN

Stack Overflow用户

发布于 2018-03-29 00:45:01

我也有同样的问题,我的解决方案是将这个类复制到我的项目AddDimensionedImage中,然后使用这个方法。

代码语言:javascript
复制
protected void addImageInCell(Sheet sheet, URL url, Drawing<?> drawing, int colNumber, int rowNumber) {
    BufferedImage imageIO = ImageIO.read(url);
    int height = imageIO.getHeight();
    int width = imageIO.getWidth();
    int relativeHeight = (int) (((double) height / width) * 28.5);
    new AddDimensionedImage().addImageToSheet(colNumber, rowNumber, sheet, drawing, url, 30, relativeHeight,
            AddDimensionedImage.EXPAND_ROW_AND_COLUMN);

}

您可以使用下面的代码行调用此方法:

代码语言:javascript
复制
URL url = new URL("https://blog.expedia.mx/por-que-los-viajeros-internacionales-visitan-mexico/");
addImageInCell(sheet, url, sheet.createDrawingPatriarch(), 0, 0);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16181674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档