从这个关于使用 Apache POI 将对象嵌入到 Excel 电子表格中的答案:
Workbook wb1 = new XSSFWorkbook();
Sheet sh = wb1.createSheet();
int picIdx = wb1.addPicture(getSamplePng(), Workbook.PICTURE_TYPE_PNG);
byte samplePPTX[] = getSamplePPT(true);
int oleIdx = wb1.addOlePackage(samplePPTX, "dummy.pptx", "dummy.pptx", "dummy.pptx");
Drawing<?> pat = sh.createDrawingPatriarch();
ClientAnchor anchor = pat.createAnchor(0, 0, 0, 0, 1, 1, 3, 6);
pat.createObjectData(anchor, oleIdx, picIdx);
这将创建嵌入对象,其中的图像getSamplePng()作为预览图像。该图像锚定到行 = 1、列 = 1 的单元格,并拉伸到行 = 6、列 = 3。除非图像纵横比完全匹配,否则会导致图像失真。
该Picture接口提供了resize方法,但似乎没有成为一个方式来获得Picture从实例ObjectData。
如果图像尺寸在其锚定到的单元格内,则以下操作有效:
ClientAnchor anchor = drawing.createAnchor(0,
0,
imgDim.width * Units.EMU_PER_PIXEL,
imgDim.height * Units.EMU_PER_PIXEL,
columnIndex,
rowIndex,
columnIndex,
rowIndex);
如果图像大于单元格尺寸,这不起作用;图像最终拉伸到单元格的边界。
我也试过setAnchorType(AnchorType.MOVE_DONT_RESIZE),似乎没有任何效果。
createObjectData用于嵌入对象时,如何将预览图像的大小调整为其原始大小?
PIPIONE
相关分类