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());
|
}
|
}
|
|
}
|