参考:https://www.jianshu.com/p/4332f5feab2e

1、添加水印所需的jar包

<dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><exclusions><!--去掉poi-xmlbeans的依赖,使其与easyexcel中的版本一致 --><exclusion><groupId>org.apache.xmlbeans</groupId><artifactId>xmlbeans</artifactId></exclusion></exclusions><version>1.4</version>
</dependency>

2、编写水印策略

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.ByteArrayOutputStream;
import java.io.IOException;@RequiredArgsConstructor
public class WaterMarkStrategy implements SheetWriteHandler {private final String WATER_MARK;public static ByteArrayOutputStream createWaterMark(String content) throws IOException {int width = 180;int height = 90;// 获取bufferedImage对象BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);String fontType = "微软雅黑";int fontStyle = Font.BOLD;int fontSize = 12;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(236, 88, 104, 80));// 设置字体 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) {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();//设置背景图片----关键代码sheet.getCTWorksheet().addNewPicture().setId(rID);}@Overridepublic void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {}@SneakyThrows@Overridepublic void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {try (ByteArrayOutputStream waterMark = createWaterMark(WATER_MARK)) {XSSFSheet sheet = (XSSFSheet) writeSheetHolder.getSheet();putWaterRemarkToExcel(sheet, waterMark.toByteArray());}}}

3、easyExcel导出时,添加水印策略

       // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);String contentStr = WebUtil.getCurrentUser(request).getChineseName().concat(" ").concat(DateTime.now().toString("yyyy-MM-dd HH:mm"));ExcelWriterBuilder excelWriterBuilder = EasyExcel.write(out);if ("1".equals(watermarkSwitch)) {//excel添加水印,只支持XSSFWorkbook。 easyExcel使用时需要设置inMemory(true),否者默认使用的是SXSSFWorkbook,会报错!excelWriterBuilder.inMemory(true).registerWriteHandler(new WaterMarkStrategy(contentStr));}excelWriter = excelWriterBuilder.registerWriteHandler(horizontalCellStyleStrategy)//自动设置列宽度.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).head(excelHead).build();

4、效果图如下:

easyExcel添加背景水印相关推荐

  1. JS 添加背景水印(适用于 PC 端和移动端)

    前言 因为这个看网上已经有很多的案例了,所以我就简单的记录一下,方式都是大差不差的. 正文 JS 调用示例,参数配置可自己调节,适用于移动端和PC端 调用方法:watermark({ watermar ...

  2. php生成背景并加字,PHP给图片添加文字水印实例

    PHP给图片添加文字水印实例,支持中文文字水印,是否覆盖原图,自定义设置水印背景色.文字颜色.字体等. 水印类water.class.php var $Path = "./"; / ...

  3. echarts添加背景图片,背景色及水印

    2022-1-9学习记录 添加背景图 遇到的问题: 添加本地图片为背景图片时不显示图片 解决: 在templates同级目录下创建一个static目录,将图片文件放置此文件夹内即可 法一: 在div标 ...

  4. 如何用SpreadJS添加背景图片和水印?

    SpreadJS是一个面向企业级应用开发的综合性.高效能的基于HTML5的纯JavaScript的电子表格控件.SpreadJS有着强大的表单处理能力和电子表格功能.这些功能包括跨表单引用和计算,这样 ...

  5. 快速给视频添加背景和水印的步骤

    前几天有几个剪辑视频的小伙伴们来问,有没有批量给视频添加背景和水印的简单操作,这不,今天就给大家安排上,下面就来教大家给视频批量添加背景和水印的小技巧. 在这里我们会用到一个叫[固乔剪辑助手]的软件, ...

  6. 如何使用PowerPoint在幻灯片背景中添加DRAFT水印?

    使用PowerPoint如何在幻灯片背景中添加DRAFT水印?使用PowerPoint你可以快速轻松地创建.编辑.查看.演示或共享演示文稿,但是PowerPoint没有像Word那样的现成水印库,但您 ...

  7. php加图片源码_PHP添加文字水印或图片水印的水印类完整源代码与使用示例

    PHP实现的给图片添加水印功能,可添加文字水印或图片水印,使用文字水印时需要提供字体文件,使用图片水印时需要提供水印图片,水印图片不能比要添加水印的图片大,请使用背景透明的水印图片. 该水印类支持自定 ...

  8. c# 添加图片水印,可以指定水印位置+生成缩略图[付上帅图1,2,3,4]

    早上,一哥儿发来添加图片水印的资料.有三个信息,如下:              xx 09:57:35 http://index.cnblogs.com/archive/2004/10/20/544 ...

  9. c#程序设计教程 唐大仕pdf_C# 添加PDF水印

    概述 一般我们在向文档添加水印时,会分为直接添加文字水印和加载图片添加图片水印两种情况.常见的,在添加文字水印时会多以声明文档版权.权威性的文字.标语或者名称等:同样的,图片水印也通常可以是某组织的L ...

  10. 盒马员工因工资单意外被同事看到,遭强制开除;微博被传大面积裁员、员工被要求主动离职,官方否认;豆瓣在截图中添加盲水印|雷峰早报...

    微博回应大面积裁员:调整部分组织架构 2月19日,微博上了脉脉App热搜,在"传微博正在优化员工"的话题中,有经过职位信息认证的微博员工表示,微博正在大面积裁员,有的员工还被要求主 ...

最新文章

  1. 【高并发】又一个朋友面试栽在了Thread类的stop()方法和interrupt()方法上!
  2. 针对淡入淡出的定时轮播效果js
  3. python 仪表盘数据显示_跟小白学Python数据分析——绘制仪表盘
  4. hosts和resolv.conf区别
  5. 11-直接内存 Direct Memory
  6. SET ARITHABORT ON 对UI的影响
  7. SlimYOLOv3:更窄、更快、更好的无人机目标检测算法
  8. web developer tips (29):在web应用项目里启用“编辑并继续”功能
  9. 文档服务器备份吗,本地资料和云服务器备份吗
  10. FFmpeg源代码简单分析:avformat_find_stream_info()
  11. as 怎么将多个cpp文件代码编译成so_你编写的Java代码是咋跑起来的?
  12. Java web切面编程
  13. css 垂直居中_当面试官问起CSS布局之水平垂直居中时~~
  14. ussd代码大全_魅族ussd补电代码 | 手游网游页游攻略大全
  15. HDU6070(线段树)
  16. origin2018 柱状图_学术干货 | 科研人请收藏—Origin画出双Y轴柱状图
  17. Flash Video DRM 视频版权保护技术
  18. 现代公司制度的法理学基础 (贾登勋 王勇)
  19. 数据结构:单链表中在P结点前插入S结点
  20. 压缩机的 压缩比、内容积比、内压力比概念你不要搞混淆了

热门文章

  1. 设计必备的配色工具01
  2. c语言编程软件v,c语言编程工具mytc下载
  3. 申请谷歌地图API介绍
  4. apply for KPMG preparing
  5. 太阳直射点纬度计算公式_计算太阳高度角和太阳方位角确定太阳在天空中的位置...
  6. Facebook努力回归中国,微博会被人们放弃吗?
  7. 知其然更要知其所以然
  8. Hook 迅游手游加速器
  9. Flutter 使用 GetIt 容器将新增和编辑后的数据同步更新到列表
  10. 如何用计算机制作思维导向图,mindmaster使用方法,手把手教你制作思维导图