inspect-server/src/main/java/com/ruoyi/inspect/util/UserUtils.java
@@ -11,6 +11,8 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Base64;
/**
 * Author: yuan
 * Date: 2024-12-17 星期二 10:35:50
@@ -87,4 +89,48 @@
        }
        return StringUtils.isNotBlank(userSignatureUrl) ? Pictures.ofLocal(imgUrl + "/" + userSignatureUrl).create() : null;
    }
    /**
     * 全透明 1x1 PNG, 签名未配置/签名文件缺失时的兜底图片
     */
    private static final byte[] TRANSPARENT_PNG = Base64.getDecoder().decode(
            "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAANSURBVBhXY2BgYGAAAAAFAAGKM+MAAAAAAElFTkSuQmCC");
    /**
     * 图片值兜底: null 或本地图片读取失败(如签名文件缺失)时返回透明图片
     */
    public static PictureRenderData orTransparentPicture(PictureRenderData picture) {
        if (picture != null) {
            try {
                byte[] data = picture.readPictureData();
                if (data != null && data.length > 0) {
                    return picture;
                }
            } catch (Exception ignored) {
            }
        }
        return Pictures.ofBytes(TRANSPARENT_PNG).create();
    }
    /**
     * 渲染Word用户签名对象(按人员id, 带兜底): 人员不存在或签名未配置/文件缺失时返回透明图片, 不抛错
     */
    public static PictureRenderData getFinalUserSignatureOrTransparent(Integer userId) {
        try {
            return orTransparentPicture(getFinalUserSignatureUrl(userId));
        } catch (Exception e) {
            return Pictures.ofBytes(TRANSPARENT_PNG).create();
        }
    }
    /**
     * 渲染Word用户签名对象(按人员姓名, 带兜底): 人员不存在或签名未配置/文件缺失时返回透明图片, 不抛错
     */
    public static PictureRenderData getFinalUserSignatureOrTransparent(String userName) {
        try {
            return orTransparentPicture(getFinalUserSignatureUrl(userName));
        } catch (Exception e) {
            return Pictures.ofBytes(TRANSPARENT_PNG).create();
        }
    }
}