当前位置: 首页 > 知识库问答 >
问题:

将图片添加到Excel单元格时,Apache POI-HSSF会使图像大小失真

唐恺
2023-03-14

我正在使用Apache poi-hssf将图片添加到单元格中。该图像是120x100,但无论我做什么,如何调整它的大小,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坐标和col/row。位置无关紧要,它的问题是水平拉伸图像。

共有1个答案

朱风史
2023-03-14

我一直面临着类似的问题,我添加的图像被扭曲了。我尝试了pict.resize()和sheet.autoSizeColumn(),但都不起作用。最后,我找到了下面的URL:https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/examples/ss/addDimenoneDimage.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);
 类似资料:
  • 问题内容: 我有一个在matplotlib中生成的大图。我想在此图的某些(x,y)坐标处添加一些图标。我想知道在matplotlib中是否有任何方法可以做到这一点 谢谢 问题答案: 绝对有可能。这是一个开始: 图标重叠http://up.stevetjoa.com/iconoverlap.png 在此示例中,未根据图的(x,y)坐标定义图标的位置。也许其他人可以帮助您。不过,我希望这个例子对您有所

  • 我是Java新手,需要在Microsoft Excel单元格中添加注释图像我的代码返回异常,有人可以帮助吗?我的Java代码 这是一个例外 线程“main”java中出现异常。lang.NoClassDefFoundError:org/apache/commons/codec/digest/DigestUtils位于org。阿帕奇。波伊。hssf。用户模型。HSSF工作手册。在应用程序中添加图片(

  • 问题内容: 我试图将图像放入带有Java的Excel单元格中,但没有成功,这是我正在使用的代码,但是我唯一要做的就是将图像放入excel工作表中,而不放在指定的单元格中 问题答案: 您已经在做的是将锚定图像定位到左上方的单元格()。然后,您已经将图像调整为原始大小。 如果图像适合该单元格,则必须使用左上单元格 和 右下单元格创建锚点。而且,请勿将图像调整为原始大小。 例: 如果从程序行中删除注释符

  • 错误: 致命异常:main java。java上的lang.NullPointerException。木卫一。文件java上的fixSlashes(File.java:185) 。木卫一。文件(文件:java:134)在ua。罗曼波塔普斯基。安提霍克。普罗卡顿。交付活动。ua的galleryAddPic(DeliverActivity.java:308)。罗曼波塔普斯基。安提霍克。普罗卡顿。交付活

  • 问题内容: 此处已触及该主题,但未提供有关如何创建3D图并在平面中以指定高度插入图像的指示。 因此,要提出一个简单且可复制的案例,假设我使用以下代码创建了一个3D图: 在视觉上,我们有: 在级别上,这里是避免重叠的视觉偏移, 我想插入一张图像, 表示曲线显示特定值的元素。 怎么做? 在此示例中,我并不关心元素与其值之间的完美匹配,因此请随时上传您喜欢的任何图像。另外,如果对匹配不满意,有没有办法让