package com.product.print.util; import cn.hutool.extra.spring.SpringUtil; import com.deepoove.poi.converter.ObjectToPictureRenderDataConverter; import com.deepoove.poi.converter.ToRenderDataConverter; import com.deepoove.poi.data.PictureRenderData; import com.deepoove.poi.data.PictureType; import com.deepoove.poi.data.Pictures; import com.deepoove.poi.policy.PictureRenderPolicy; import com.deepoove.poi.render.RenderContext; import com.product.common.lang.StringUtils; import com.product.core.dao.BaseDao; import com.product.core.entity.FieldSetEntity; import com.product.core.spring.context.SpringMVCContextHolder; import com.product.file.service.FileManagerService; import com.product.print.config.CmnCode; import java.io.File; import java.io.FileInputStream; import java.util.Arrays; /** * Copyright © 6c * * @Date 2023年11月16日 17:19 * @Author 6c * @Description */ public class CustomPictureRenderPolicy extends PictureRenderPolicy { private static ToRenderDataConverter converter = new ObjectToPictureRenderDataConverter(); @Override public PictureRenderData cast(Object source) throws Exception { FileManagerService fileManagerService = SpringUtil.getBean(FileManagerService.class); String templateUid = source.toString(); if (StringUtils.isEmpty(templateUid)) { return null; } int width = 0; int height = 0; if (templateUid.contains(" ")) { String[] infoArr = templateUid.split(" "); templateUid = infoArr[0]; width = Integer.parseInt(infoArr[1]); height = Integer.parseInt(infoArr[2]); } BaseDao baseDao = SpringUtil.getBean(BaseDao.class); FieldSetEntity attachmentFse = baseDao.getFieldSetEntity("product_sys_attachments", templateUid, false); // 遇错跳过,默认使用透明背景不拦截,记录日志到文件 try { fileManagerService.getFile(templateUid); } catch (Exception e) { attachmentFse = baseDao.getFieldSetEntityByFilter("product_sys_attachments", "attachment_title=?", new Object[]{"sys_sp_deal_透明背景"}, false); fileManagerService.getFile(attachmentFse.getUUID()); SpringMVCContextHolder.getSystemLogger().error(String.format("%s-附件uuid:%s", CmnCode.EXISTS_FILE_RECORD_BUT_NO_FILE.getText(), templateUid)); } String fileName = attachmentFse.getString("file_name"); String type = fileName.substring(fileName.lastIndexOf(".") + 1); File file = fileManagerService.getFile(attachmentFse); PictureType imgType = PictureType.PNG; if (Arrays.asList("jpg", "jpeg").contains(type)) { imgType = PictureType.JPEG; } else if ("bmp".equals(type)) { imgType = PictureType.BMP; } else if ("gif".equals(type)) { imgType = PictureType.GIF; } else if ("svg".equals(type)) { imgType = PictureType.SVG; } if (width > 0 && height > 0) { return converter.convert(Pictures.ofStream(new FileInputStream(file), imgType).size(width, height).create()); } else { return converter.convert(Pictures.ofStream(new FileInputStream(file), imgType).create()); } } @Override public void doRender(RenderContext context) throws Exception { Helper.renderPicture(context.getRun(), context.getData()); } }