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
79 lines
4.0 KiB
4 years ago
|
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());
|
||
|
}
|
||
|
}
|