1controller层

2service层

红框内是需要加水印的
如果不要红框,就是不加水印

下面是

package cn.com.doone.sc.tx.cloud.ap.ht.controller.excel;

import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFRelation;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

/**

  • @PackageName:cn.com.doone.sc.tx.cloud.ap.ht.controller.excel

  • @ClassName:WaterMarkHandler

  • @Description:

  • @author:@liufei

  • @date 2021/6/16 11:10
    */
    @RequiredArgsConstructor
    public class WaterMarkHandler implements SheetWriteHandler {

    private final String WATER_MARK;

    public static ByteArrayOutputStream createWaterMark(String content) throws IOException {
    int width = 200;
    int height = 150;
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 获取bufferedImage对象
    String fontType = “微软雅黑”;
    int fontStyle = Font.BOLD;
    int fontSize = 20;
    Font font = new Font(fontType, fontStyle, fontSize);
    Graphics2D g2d = image.createGraphics(); // 获取Graphics2d对象
    image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
    g2d.dispose();
    g2d = image.createGraphics();
    g2d.setColor(new Color(0, 0, 0, 20)); //设置字体颜色和透明度,最后一个参数为透明度
    g2d.setStroke(new BasicStroke(1)); // 设置字体
    g2d.setFont(font); // 设置字体类型 加粗 大小
    g2d.rotate(-0.5, (double) image.getWidth() / 2, (double) image.getHeight() / 2);//设置倾斜度
    FontRenderContext context = g2d.getFontRenderContext();
    Rectangle2D bounds = font.getStringBounds(content, context);
    double x = (width - bounds.getWidth()) / 2;
    double y = (height - bounds.getHeight()) / 2;
    double ascent = -bounds.getY();
    double baseY = y + ascent;
    // 写入水印文字原定高度过小,所以累计写水印,增加高度
    g2d.drawString(content, (int) x, (int) baseY);
    // 设置透明度
    g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
    // 释放对象
    g2d.dispose();
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    ImageIO.write(image, “png”, os);
    return os;
    }

    /**

    • 为Excel打上水印工具函数
    • @param sheet excel sheet
    • @param bytes 水印图片字节数组
      */
      public static void putWaterRemarkToExcel(XSSFSheet sheet, byte[] bytes) {
      //add relation from sheet to the picture data
      XSSFWorkbook workbook = sheet.getWorkbook();
      int pictureIdx = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
      String rID = sheet.addRelation(null, XSSFRelation.IMAGES, workbook.getAllPictures().get(pictureIdx))
      .getRelationship().getId();
      //set background picture to sheet
      sheet.getCTWorksheet().addNewPicture().setId(rID);
      }

    @Override
    public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
    }

    @SneakyThrows
    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
    try (ByteArrayOutputStream waterMark = createWaterMark(WATER_MARK)){
    XSSFSheet sheet = (XSSFSheet) writeSheetHolder.getSheet();
    putWaterRemarkToExcel(sheet, waterMark.toByteArray());
    }
    }
    }

easyExcel添加水印相关推荐

  1. EasyExcel导出添加水印

    [EasyExcel]导出添加水印 自定义拦截器 @RequiredArgsConstructor public class WaterMarkHandler implements SheetWrit ...

  2. EasyExcel导出添加水印(设置背景,非插入图片的方式)

    引言 本文添加水印通过java生成图片,设置为excel背景图片实现.不仅仅局限于EasyExcel,凡是采用POI实现都可以采用该方案,但唯一的局限在于必须使用POI中的XSSFWorkbook对象 ...

  3. Java为 pdf、word和excel添加水印

    1. 引入依赖 <!--easyexcel--><dependency><groupId>com.alibaba</groupId><artifa ...

  4. easyExcel设置水印

    1.依赖导入 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</a ...

  5. Java - 导出Excel添加水印、密码

    需求: 导出excel时,添加操作人的用户名.手机号水印.文件密码.基于若依框架的excel导出工具类改造,有三种添加水印方式,此处仅做一个记录. 目录 一. 添加依赖 二.工具类 1.水印处理类 2 ...

  6. EasyExcel 实现设置水印(只支持07版Excel文档)

    目录 1 Maven依赖 2 WaterMarkModel 3 CustomWaterMarkHandler 4 调试代码 5 调试结果 注: 1 Maven依赖 <!-- easyExcel ...

  7. 知识积累:EasyExcel导出Excel带中文水印,中文乱码处理,JDK8 jwt.font中文乱码解决方案

    最近项目中,有个需求是将我们系统导出的Excel增加水印设置. EasyExcel导出带水印Excel类 /*** created by etc.* EasyExcel导出带水印类* @author: ...

  8. EasyExcell导出excel添加水印

    EasyExcell导出excel添加水印 1.添加easyExcel相关依赖 2.准备基础工具类 3.创建水印handler类 4.创建单元测试类WriteTest.class 5.测试结果 1.添 ...

  9. 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)

    javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 javaCV图像处理之2:实时视频添加图片水 ...

最新文章

  1. WPF自定义控件(1)——仪表盘设计[1]
  2. android 美颜录像,Android 关于美颜/滤镜 利用PBO从OpenGL录制视频
  3. RabbitMQ消息幂等性问题
  4. win10基于anaconda下的tensorflow2.0.0及cuda10.0、cudnn安装成功
  5. 微软Windows2003的正版安装序列号
  6. J2ee项目环境搭建常用工具
  7. c数据库读写分离和负载均衡策略
  8. onvif 模拟摄像头_ONVIF协议测试工具(ONVIF Device Test Tool)
  9. python 画图 线标注_Python中画图时候的线类型
  10. 一步步教你装超强插件~油猴插件管理器Tampermonkey
  11. nginx实现反向代理及负载均衡
  12. Element UI 的日历控件,并在日期中做标注
  13. 经典光流估计算法和光流对齐方法
  14. 全国英语计算机等级考试报名费,通知 | 全国大学生英语竞赛计算机等级考试报名...
  15. 【应用随机过程】04. 马尔可夫链的平稳分布
  16. 【Java UI】HarmonyOs如何集成Hawk
  17. 70行代码撸一个桌面自动翻译神器!
  18. android计步器开源,开源Android项目pedometer计步器源码
  19. [Windows]批处理变更用户文件夹到其他位置
  20. 如何批量将接口加入VLAN

热门文章

  1. 【经验分享】抖音电商金句200条,条条干货,句句扎心!
  2. 移动电源最好的品牌推荐,移动电源牌子排行榜
  3. 探索者STM32F407开发板与独立惯导MPU6050配置
  4. python输出去空格_Python去除多余空格
  5. CSS——文本文字属性继承
  6. 芯片之家一周精选,毛线上拉电阻?电容开花了?
  7. CS61C学习 —— 第一课
  8. excel 自动换行填充 日期
  9. Windows照片查看器提示内存不足,无法显示此图片
  10. Java运算符的优先级