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

我正在使用 Apache POI 创建一个 xlsx 文件,其中在左上角插入了一个徽标。问题是,当单元格的大小增加时,图像也会扩展。如何冻结或保护图像的大小和位置,以便当单元格大小增加时,图像保持不变(不扩展)。


下面是插入图片的代码。


rowNo = 1;

row = sheet.createRow(rowNo);

//For Adding sample Logo

addImage(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;

    }


德玛西亚99
浏览 322回答 1
1回答

富国沪深

设置Format Picture- Size and Properties-Don't move or size with cells将apache 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将不会通过更改单元格大小来移动和/或调整大小。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java