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
package com.ruoyi.inspect.util;
 
import com.deepoove.poi.data.PictureRenderData;
import com.deepoove.poi.data.Pictures;
 
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
 
/**
 * 报告签名图片工具。
 */
public final class ReportSignaturePictureUtils {
 
    private static final int MAX_WIDTH = 90;
    private static final int MAX_HEIGHT = 45;
 
    private ReportSignaturePictureUtils() {
    }
 
    /**
     * 按原始比例将签名适配到报告签名单元格,避免图片越过单元格边界而被裁剪。
     */
    public static PictureRenderData create(String imageDirectory, String signatureUrl) {
        String signaturePath = imageDirectory + "/" + signatureUrl;
        try {
            BufferedImage image = ImageIO.read(new File(signaturePath));
            if (image != null && image.getWidth() > 0 && image.getHeight() > 0) {
                double scale = Math.min((double) MAX_WIDTH / image.getWidth(),
                        (double) MAX_HEIGHT / image.getHeight());
                int width = Math.max(1, (int) Math.round(image.getWidth() * scale));
                int height = Math.max(1, (int) Math.round(image.getHeight() * scale));
                return Pictures.ofLocal(signaturePath).size(width, height).create();
            }
        } catch (IOException ignored) {
            // 图片元数据读取失败时仍可尝试以默认尺寸写入报告。
        }
        return Pictures.ofLocal(signaturePath).size(MAX_WIDTH, MAX_HEIGHT).create();
    }
}