package com.ruoyi.basic.excel; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.IdUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.enums.WriteDirectionEnum; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.fill.FillConfig; import com.alibaba.excel.write.metadata.fill.FillWrapper; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.production.dto.ExportProductionPrintOrderDto; import com.ruoyi.production.pojo.ProductionPrintOrder; import lombok.SneakyThrows; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFDrawing; import org.apache.poi.xssf.usermodel.XSSFPicture; import org.apache.poi.xssf.usermodel.XSSFShape; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.springframework.stereotype.Component; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.util.List; /** * @author buhuazhen * @date 2026/4/25 * @email 3038525872@qq.com */ @Component public class ProductionPrintOrderExcel { @SneakyThrows public void createPrintOrderTemplate(ExportProductionPrintOrderDto printOrderDto, InputStream templateInputStream) { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); try (ExcelWriter excelWriter = EasyExcel.write(byteArrayOutputStream) .withTemplate(templateInputStream) .build()) { FillConfig fillConfig = FillConfig.builder() .forceNewRow(true) .autoStyle(true) .direction(WriteDirectionEnum.VERTICAL) .build(); WriteSheet writeSheet = EasyExcel.writerSheet().build(); excelWriter.fill(printOrderDto, writeSheet); excelWriter.fill(new FillWrapper("materialInfo", printOrderDto.getMaterialInfo()), fillConfig, writeSheet); excelWriter.fill(new FillWrapper("processContent", printOrderDto.getProcessContent()), fillConfig, writeSheet); excelWriter.fill(new FillWrapper("plateMaking", printOrderDto.getPlateMaking()), fillConfig, writeSheet); excelWriter.finish(); } catch (Exception e) { throw new ServiceException("excel 生成失败! " + e.getMessage()); } try { Workbook workbook = WorkbookFactory.create( new ByteArrayInputStream(byteArrayOutputStream.toByteArray()) ); Sheet sheet = workbook.getSheetAt(0); // ===== 插入图片 ===== byte[] imageBytes = printOrderDto.getCuttingImage(); int pictureIdx = workbook.addPicture(imageBytes, Workbook.PICTURE_TYPE_JPEG); CreationHelper helper = workbook.getCreationHelper(); Drawing drawing = sheet.createDrawingPatriarch(); ClientAnchor anchor = helper.createClientAnchor(); anchor.setCol1(6); // 第7列(G列) anchor.setRow1(7); anchor.setDx1(1082700); // 向右移动(约半格) Picture picture = drawing.createPicture(anchor, pictureIdx); picture.resize(); ByteArrayOutputStream out = new ByteArrayOutputStream(); workbook.write(out); workbook.close(); FileUtil.writeBytes( out.toByteArray(), "/Users/ONEX/Downloads/uploads/" + IdUtil.simpleUUID() + ".xlsx" ); } catch (Exception e) { throw new ServiceException("图片处理失败! " + e.getMessage()); } } }