为了账号安全,请及时绑定邮箱和手机立即绑定

使用 apache POI 保护/冻结 xslx 工作表中图像的位置和大小

使用 apache POI 保护/冻结 xslx 工作表中图像的位置和大小

德玛西亚99 2023-02-23 17:38:51
我正在使用 Apache POI 创建一个 xlsx 文件,其中在左上角插入了一个徽标。问题是,当单元格的大小增加时,图像也会扩展。如何冻结或保护图像的大小和位置,以便当单元格大小增加时,图像保持不变(不扩展)。下面是插入图片的代码。rowNo = 1;row = sheet.createRow(rowNo);//For Adding sample LogoaddImage(1, 1, 3, 4, appPath + "/images/sample_logo.png"); public boolean addImage(int col1, int row1, int col2, int row2, String FileName) {        try {            FileInputStream fileInputStream = null;            try {                fileInputStream = new FileInputStream(FileName);            } catch (FileNotFoundException e) {                return false;            }            ByteArrayOutputStream imgBytes = new ByteArrayOutputStream();            int b;            try {                while ((b = fileInputStream.read()) != -1) {                    imgBytes.write(b);                }                fileInputStream.close();            } catch (IOException e) {                return false;            }        sheet.addMergedRegion(new CellRangeAddress(row1, row2 - 1, col1, col2 - 1));        // sheet.addMergedRegion(new CellRangeAddress(1, 3, 1, 2));            XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, col1, row1, col2, row2);            int index = workBook.addPicture(imgBytes.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG); //index = 4            XSSFDrawing patriarch = sheet.createDrawingPatriarch();            patriarch.createPicture(anchor, index);            anchor.setAnchorType(2);        } catch (Exception ex) {            LOGGER.error(ex);        }        return true;    }
查看完整描述

1 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

设置Format PictureSize and Properties-Don't move or size with cellsapache poi使用XSSFClientAnchor.setAnchorType设置为ClientAnchor.AnchorType DONT_MOVE_AND_RESIZE

例子:


import java.io.InputStream;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import org.apache.poi.util.IOUtils;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.ss.usermodel.ClientAnchor;

import org.apache.poi.xssf.usermodel.*;


class CreateExcelPictures {


 static String excelPath = "./ExcelWithLogo.xlsx";

 static String appPath = "./";

 static XSSFWorkbook workbook;

 static XSSFSheet sheet;


 static void addImage(int col1, int row1, int col2, int row2, String imageFileName, ClientAnchor.AnchorType anchorType) throws Exception {


  InputStream imageInputStream = new FileInputStream(imageFileName);

  byte[] bytes = IOUtils.toByteArray(imageInputStream);

  int pictureId = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);

  imageInputStream .close();


  XSSFClientAnchor anchor = workbook.getCreationHelper().createClientAnchor();

  anchor.setAnchorType(anchorType);

  anchor.setCol1(col1);

  anchor.setRow1(row1);

  anchor.setCol2(col2);

  anchor.setRow2(row2);


  XSSFDrawing drawing = sheet.createDrawingPatriarch();


  XSSFPicture picture = drawing.createPicture(anchor, pictureId);


 }


 public static void main(String args[]) throws Exception {


  workbook = new XSSFWorkbook();

  sheet = workbook.createSheet();


  addImage(1, 1, 3, 4, appPath + "sample_logo.png", ClientAnchor.AnchorType.DONT_MOVE_AND_RESIZE); 


  FileOutputStream fos = new FileOutputStream(excelPath);

  workbook.write(fos);

  fos.close();

  workbook.close();


 }

}

之后sample_logo.png锚定的图片B4:C4将不会通过更改单元格大小来移动和/或调整大小。


查看完整回答
反对 回复 2023-02-23
  • 1 回答
  • 0 关注
  • 310 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号