Apache POI禁用图片的自动调整大小



我正在使用Apache POI将图像放入Excel工作表中。当我用Excel打开文件并手动调整包含图像的单元格的大小时,图像也会调整大小。

如何将图片插入不根据单元格大小调整大小的单元格?

我的代码:

private void addImageToExcelReport(InputStream is, OutputStream os, File image) {
try (BufferedReader br = new BufferedReader(new FileReader(image))) {
if (br.readLine() != null) {
XSSFWorkbook wb = new XSSFWorkbook(is);
XSSFSheet sheet = wb.getSheetAt(0);
InputStream inputStream = new FileInputStream(image);
byte[] bytes = IOUtils.toByteArray(inputStream);
int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
inputStream.close();
CreationHelper helper = wb.getCreationHelper();
Drawing drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = helper.createClientAnchor();
sheet.createRow(1).createCell(0);
anchor.setRow1(0);
anchor.setRow2(1);
anchor.setCol1(0);
anchor.setCol2(1);
drawing.createPicture(anchor, pictureIdx);
wb.write(os);
wb.close();
}
} catch (IOException e) {
loggerService.traceError(e.getMessage(), e);
}
}

正如Alex Richter所建议的,答案是设置锚类型。以下代码适用于我:

private void addImageToExcelReport(InputStream is, OutputStream os, File image) {
if (image != null) {
try {
Workbook wb = new XSSFWorkbook(is);
Sheet sheet = wb.getSheetAt(0);
InputStream inputStream = new FileInputStream(image);
byte[] bytes = IOUtils.toByteArray(inputStream);
int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
inputStream.close();
CreationHelper helper = wb.getCreationHelper();
Drawing<?> drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = helper.createClientAnchor();
anchor.setAnchorType(AnchorType.DONT_MOVE_AND_RESIZE);
sheet.createRow(1).createCell(0);
anchor.setRow1(0);
anchor.setRow2(1);
anchor.setCol1(0);
anchor.setCol2(1);
drawing.createPicture(anchor, pictureIdx);
wb.write(os);
wb.close();
} catch (IOException e) {
loggerService.traceError(e.getMessage(), e);
}
}
}

另外,一定要有合适的图书馆。我的pom.xml包含以下库:

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.4</version>
</dependency>

最新更新