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