直接上代码

注意Workbook和sheet都是XSSF开头的这种,水印效果是整个sheet页铺满自定义文本水印

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;/*** @author lzl* @date 2022/10/13* @desc:*/
public class ExcelUtil {/*** add watermark to each sheet of workbook** @param wb* @throws IOException*/public static void addWaterMark(XSSFWorkbook wb) throws IOException {ByteArrayOutputStream byteArrayOutputStream = ExcelUtil.createWaterMark("小烧杯");int pictureIdx = wb.addPicture(byteArrayOutputStream.toByteArray(), Workbook.PICTURE_TYPE_PNG);POIXMLDocumentPart poixmlDocumentPart = wb.getAllPictures().get(pictureIdx);for (int i = 0; i < wb.getNumberOfSheets(); i++) {XSSFSheet xssfSheet = wb.getSheetAt(i);PackagePartName ppn = poixmlDocumentPart.getPackagePart().getPartName();String relType = XSSFRelation.IMAGES.getRelation();PackageRelationship pr = xssfSheet.getPackagePart().addRelationship(ppn, TargetMode.INTERNAL, relType, null);xssfSheet.getCTWorksheet().addNewPicture().setId(pr.getId());// 下面三行代码可设置表格内容不可复制、编辑
//            xssfSheet.protectSheet(UUID.randomUUID().toString());
//            xssfSheet.lockSelectUnlockedCells();
//            xssfSheet.lockSelectLockedCells();}}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;}}

poi导出自定义文字水印excel文件相关推荐

  1. POI动态导出多层表头的EXCEL文件

    POI动态导出多层表头的EXCEL文件 表格表头导出 单行表头 多行表头 以前接触过一个很古老的导出Excel,实现的逻辑是先声明一个导出的Excel模板,模板里报表的表头名称和顺序是固定的,这样执行 ...

  2. 通过Java批量导出带有图片的Excel文件数据

    批量导出带有图片的Excel文件 一.思路解析 二.关键源码 三.总结 Java通过POI或者一些常见的Excel工具类能够轻易导出后台的结构化数据,但是最近面临一个新需求,需要将对应记录数据和图片网 ...

  3. php mysql生成excel文件,PHP导出MySQL数据到Excel文件简单示例

    这篇文章主要为大家详细介绍了PHP导出MySQL数据到Excel文件简单示例,具有一定的参考价值,可以用来参考一下. 对phpPHP导出MySQL数据到Excel文件简单示例感兴趣的小伙伴,下面一起跟 ...

  4. anki 插入表格_Anki之导出卡牌组到Excel文件

    最近有导出Anki卡牌组到Excel文件的需要,查到了这个教程,Anki插件--导出卡牌到Excel文件-LearnHacks,但结果并不令人满意,所导出的Excel文件只有一列,所选中的卡片字段全部 ...

  5. 使用poi导出大量数据到excel遇到的问题

    最近在工作遇到利用poi导出大量数据到excel并提供下载的运用场景,并遇到了一个问题,当数据量过大时(几十万),后台在进行数据写入excel中的过程会非常耗时,导致迟迟没有响应前台,结果数据还没导完 ...

  6. POI3.8解决导出大数据量excel文件时内存溢出的问题

    POI3.8解决导出大数据量excel文件时内存溢出的问题 参考文章: (1)POI3.8解决导出大数据量excel文件时内存溢出的问题 (2)https://www.cnblogs.com/feng ...

  7. php按列导出excel2010,excel2010官方下载 免费完整版 PHP导出MySQL数据到Excel文件fputcsv...

    这里的方法是利用fputcsv写CSV文件的方法,直接向浏览器输出Excel文件. 复制代码 代码如下: // 输出Excel文件头,可把user.csv换成你要的文件名 header('Conten ...

  8. Java poi api插入文字水印到docx文件

    使用apache poi api实现wps插入水印效果. Office Open XML介绍 Microsoft Office从2007版开始使用xml格式存储.zip解压一个docx的word文档后 ...

  9. EasyExcel导出自定义合并单元格文件

    目标 需要使用阿里的EasyExcel库来导出excel,并要自定义合并单元格. 思路 这里自定义的CellWriteHandler需要将数据进行如下处理: 1.Excel每一行数据必须对应一个对象: ...

最新文章

  1. 238. Product of Array Except Self
  2. 超微服务器使用IPMI安装操作系统小记
  3. 你最想要的圣诞礼物是什么?
  4. 为什么说下一个十年的主战场在Serverless?
  5. 我的世界服务器linux加mod,在Linux下搭建带MOD 我的世界(Minecraft)服务器
  6. 生日排序(洛谷P1104题题解,Java语言描述)
  7. mysql GRANT
  8. 制打印如下所示的n行数字金字塔_关于央行数字货币的技术猜测
  9. 最新!泰晤士2021亚洲大学排名发布:91所中国大陆高校上榜!
  10. shl归纳推理测试题库_shl归纳推理测试答案
  11. 在matlab中产生dsp程序学习
  12. 【转】科普贴:BIOS和UEFI的启动项
  13. Keil uVison4下载、安装、使用说明
  14. 小议新版GB9706.1-2020的基本性能
  15. 最新仿淘宝源码使用原生HTML+CSS描写
  16. 无法使用资源管理器打开FTP,别被百度的结果坑了
  17. java锟斤拷锟斤拷锟_锟斤拷?UTF-8与GBK互转乱码问题
  18. 计算机网络如何新建vlan和划分vlan,[单选] 划分VLAN后,不同VLAN的计算机之间不能实现二层通信。如果在VLAN间通信,需要建立()...
  19. 云管平台 | 云成本分析优化管理
  20. Devops 开发运维基础篇之使用Maven构建项目

热门文章

  1. raid磁盘阵列分析
  2. Canvas画POS机打印小票图片,打印机直接打印图片
  3. 【CISSP备考笔记】第6章:安全评估与测试
  4. SocketPro完整使用教程分享,手把手指导
  5. 智能雷达感应模组,划定感应区域、屏蔽区域外干扰,智能安防应用
  6. vscode 添加用户代码片段(快速生成 vue 模板)
  7. 教你怎么利用豆瓣推广引流粉丝
  8. shell脚本配置运行python程序,小技巧之 Linux 软连接的使用
  9. 云看大熊猫,动物园如何利用视频技术玩转动物IP?
  10. 自己搭建一个语音聊天室