JSD-8649 开源任务材料
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
4.0 KiB

package com.fr.plugin.ws.wapper;
import com.fr.base.iofile.attr.WatermarkAttr;
import com.fr.decision.config.WatermarkConfig;
import com.fr.decision.security.WatermarkData;
import com.fr.decision.webservice.bean.security.WatermarkBean;
import com.fr.decision.webservice.v10.security.SecurityService;
import com.fr.log.FineLoggerFactory;
import com.fr.page.WatermarkPainter;
import com.fr.stable.ImageUtils;
import com.fr.third.springframework.web.context.request.RequestContextHolder;
import com.fr.third.springframework.web.context.request.ServletRequestAttributes;
import com.fr.third.v2.org.apache.poi.POIXMLDocumentPart;
import com.fr.third.v2.org.apache.poi.openxml4j.opc.PackagePartName;
import com.fr.third.v2.org.apache.poi.openxml4j.opc.PackageRelationship;
import com.fr.third.v2.org.apache.poi.openxml4j.opc.TargetMode;
import com.fr.third.v2.org.apache.poi.ss.usermodel.Workbook;
import com.fr.third.v2.org.apache.poi.xssf.streaming.SXSSFWorkbook;
import com.fr.third.v2.org.apache.poi.xssf.usermodel.XSSFRelation;
import com.fr.third.v2.org.apache.poi.xssf.usermodel.XSSFSheet;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class WsUtils {
public static byte[] getWatterMarker(WatermarkBean parsedWatermarkBean) {
WatermarkData watermarkData = WatermarkConfig.getInstance().getWatermarkData();
WatermarkAttr watermarkAttr = new WatermarkAttr(watermarkData);
watermarkAttr.setText(parsedWatermarkBean.getText());
WatermarkPainter painter = WatermarkPainter.createPainter(watermarkAttr);
int width=1024 + parsedWatermarkBean.getHorizontalGap();
int height=768+ parsedWatermarkBean.getVerticalGap();
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 背景透明 开始
Graphics2D g = bufferedImage.createGraphics();
bufferedImage = g.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
g.dispose();
g = bufferedImage.createGraphics();
painter.paint(g, width, height);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ImageUtils.writeImage(bufferedImage, "PNG", byteArrayOutputStream);
try {
ImageIO.write(bufferedImage, "PNG", new FileOutputStream("E:\\11.png"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return byteArrayOutputStream.toByteArray();
}
public static void addWatterMarker2SXSSFWorkbook(SXSSFWorkbook sxssfWorkbook) throws Exception {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
.getRequestAttributes()).getRequest();
if (request == null) {
FineLoggerFactory.getLogger().error("未能获取到请求 使用默认导出程序处理-----");
return;
}
WatermarkBean parsedWatermarkBean = SecurityService.getInstance().getParsedWatermarkBean(request);
byte[] watterMarker = WsUtils.getWatterMarker(parsedWatermarkBean);
int pictureIdx = sxssfWorkbook.addPicture(watterMarker, Workbook.PICTURE_TYPE_PNG);
POIXMLDocumentPart poixmlDocumentPart = sxssfWorkbook.getXSSFWorkbook().getAllPictures().get(pictureIdx);
PackagePartName ppn = poixmlDocumentPart.getPackagePart().getPartName();
String relType = XSSFRelation.IMAGES.getRelation();
XSSFSheet xssfSheet = sxssfWorkbook.getXSSFWorkbook().getSheetAt(sxssfWorkbook.getNumberOfSheets() - 1);
PackageRelationship pr = xssfSheet.getPackagePart().addRelationship(ppn, TargetMode.INTERNAL, relType, null);
xssfSheet.getCTWorksheet().addNewPicture().setId(pr.getId());
FineLoggerFactory.getLogger().error("添加sheet{}并 添加水印成功", sxssfWorkbook.getNumberOfSheets());
}
}