buhuazhen
2026-04-25 5035c404359e536bcdaa2668318ecd3b38c72584
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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());
        }
    }
 
}