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

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

我如何保持原来的大小?

我的代码:

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坐标和列/行。 位置并不重要,它横向拉伸图像的问题。 谢谢

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

我一直面对类似的问题,我添加的图像变得扭曲。 我试过pict.resize()和sheet.autoSizeColumn(),但没有奏效。 最后我find了下面的URL: – https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/ss/examples/AddDimensionedImage.java

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

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