easyExcel添加水印
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添加水印相关推荐
- EasyExcel导出添加水印
[EasyExcel]导出添加水印 自定义拦截器 @RequiredArgsConstructor public class WaterMarkHandler implements SheetWrit ...
- EasyExcel导出添加水印(设置背景,非插入图片的方式)
引言 本文添加水印通过java生成图片,设置为excel背景图片实现.不仅仅局限于EasyExcel,凡是采用POI实现都可以采用该方案,但唯一的局限在于必须使用POI中的XSSFWorkbook对象 ...
- Java为 pdf、word和excel添加水印
1. 引入依赖 <!--easyexcel--><dependency><groupId>com.alibaba</groupId><artifa ...
- easyExcel设置水印
1.依赖导入 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</a ...
- Java - 导出Excel添加水印、密码
需求: 导出excel时,添加操作人的用户名.手机号水印.文件密码.基于若依框架的excel导出工具类改造,有三种添加水印方式,此处仅做一个记录. 目录 一. 添加依赖 二.工具类 1.水印处理类 2 ...
- EasyExcel 实现设置水印(只支持07版Excel文档)
目录 1 Maven依赖 2 WaterMarkModel 3 CustomWaterMarkHandler 4 调试代码 5 调试结果 注: 1 Maven依赖 <!-- easyExcel ...
- 知识积累:EasyExcel导出Excel带中文水印,中文乱码处理,JDK8 jwt.font中文乱码解决方案
最近项目中,有个需求是将我们系统导出的Excel增加水印设置. EasyExcel导出带水印Excel类 /*** created by etc.* EasyExcel导出带水印类* @author: ...
- EasyExcell导出excel添加水印
EasyExcell导出excel添加水印 1.添加easyExcel相关依赖 2.准备基础工具类 3.创建水印handler类 4.创建单元测试类WriteTest.class 5.测试结果 1.添 ...
- 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)
javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 javaCV图像处理之2:实时视频添加图片水 ...
最新文章
- WPF自定义控件(1)——仪表盘设计[1]
- android 美颜录像,Android 关于美颜/滤镜 利用PBO从OpenGL录制视频
- RabbitMQ消息幂等性问题
- win10基于anaconda下的tensorflow2.0.0及cuda10.0、cudnn安装成功
- 微软Windows2003的正版安装序列号
- J2ee项目环境搭建常用工具
- c数据库读写分离和负载均衡策略
- onvif 模拟摄像头_ONVIF协议测试工具(ONVIF Device Test Tool)
- python 画图 线标注_Python中画图时候的线类型
- 一步步教你装超强插件~油猴插件管理器Tampermonkey
- nginx实现反向代理及负载均衡
- Element UI 的日历控件,并在日期中做标注
- 经典光流估计算法和光流对齐方法
- 全国英语计算机等级考试报名费,通知 | 全国大学生英语竞赛计算机等级考试报名...
- 【应用随机过程】04. 马尔可夫链的平稳分布
- 【Java UI】HarmonyOs如何集成Hawk
- 70行代码撸一个桌面自动翻译神器!
- android计步器开源,开源Android项目pedometer计步器源码
- [Windows]批处理变更用户文件夹到其他位置
- 如何批量将接口加入VLAN