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