我可以使用 jxl 将图像插入到我的 excel 文件中sheet.addImage(WritableImage obj)
。我的问题是,它基于WritableImage
. 我想知道是否有一种方法可以让我插入的图像不会像我插入 200x200 大小的图像那样拉伸,它会在工作表中显示为 200x200。
问问题
11985 次
2 回答
7
尽管这让我对 jxl 感到困扰,但我从来没有找到一种方法来插入图像而不将纵横比与单元格而不是像素/英寸/任何标准测量单位相关联,而且我过去做了不错的研究这样做。
您可以做的最好的事情是使图像适应您要插入的单元格的高度/宽度,或者更好的是,为要放入图像的单元格设置单元格宽度/高度。
来自 JExcel 常见问题 - http://jexcelapi.sourceforge.net/resources/faq/
private static final double CELL_DEFAULT_HEIGHT = 17;
private static final double CELL_DEFAULT_WIDTH = 64;
File imageFile = new File(GIF_OR_JPG_IMAGE_FILE);
BufferedImage input = ImageIO.read(imageFile);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(input, "PNG", baos);
sheet.addImage(new WritableImage(1,1,input.getWidth() / CELL_DEFAULT_WIDTH,
input.getHeight() / CELL_DEFAULT_HEIGHT,baos.toByteArray()));
为了保持纵横比,如果用户更改行高或列宽,您还需要将 WritableImage 设置为不重新调整大小。使用以下任一方法执行此操作(您的偏好取决于您是否希望图像锚锁定或调整大小移动):
WritableImage.MOVE_WITH_CELLS;
WritableImage.NO_MOVE_OR_SIZE_WITH_CELLS;
于 2011-11-15T20:06:17.420 回答
0
实际上,这是可能的。假设您要包含的图片的宽度为 4000。然后您执行以下操作:
CellView cv = excelSheetTemp.getColumnView(0);
//get the width of the column where you want to insert the picture
int width = forLogo.getSize();
//if the width is less than the size you want, set the column width to
//the width. This will ensure that your image does not shrink
if (width < 4000) {
forLogo.setSize(4000);
excelSheetTemp.setColumnView(0, cv);
width = 4000;
}
double c = 4000/width;
WritableImage im = new WritableImage(0, 1, c, 3, the image file);
excelSheetTemp.addImage(im);
于 2016-08-15T12:10:22.480 回答