poi导出自定义文字水印excel文件
直接上代码
注意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文件相关推荐
- POI动态导出多层表头的EXCEL文件
POI动态导出多层表头的EXCEL文件 表格表头导出 单行表头 多行表头 以前接触过一个很古老的导出Excel,实现的逻辑是先声明一个导出的Excel模板,模板里报表的表头名称和顺序是固定的,这样执行 ...
- 通过Java批量导出带有图片的Excel文件数据
批量导出带有图片的Excel文件 一.思路解析 二.关键源码 三.总结 Java通过POI或者一些常见的Excel工具类能够轻易导出后台的结构化数据,但是最近面临一个新需求,需要将对应记录数据和图片网 ...
- php mysql生成excel文件,PHP导出MySQL数据到Excel文件简单示例
这篇文章主要为大家详细介绍了PHP导出MySQL数据到Excel文件简单示例,具有一定的参考价值,可以用来参考一下. 对phpPHP导出MySQL数据到Excel文件简单示例感兴趣的小伙伴,下面一起跟 ...
- anki 插入表格_Anki之导出卡牌组到Excel文件
最近有导出Anki卡牌组到Excel文件的需要,查到了这个教程,Anki插件--导出卡牌到Excel文件-LearnHacks,但结果并不令人满意,所导出的Excel文件只有一列,所选中的卡片字段全部 ...
- 使用poi导出大量数据到excel遇到的问题
最近在工作遇到利用poi导出大量数据到excel并提供下载的运用场景,并遇到了一个问题,当数据量过大时(几十万),后台在进行数据写入excel中的过程会非常耗时,导致迟迟没有响应前台,结果数据还没导完 ...
- POI3.8解决导出大数据量excel文件时内存溢出的问题
POI3.8解决导出大数据量excel文件时内存溢出的问题 参考文章: (1)POI3.8解决导出大数据量excel文件时内存溢出的问题 (2)https://www.cnblogs.com/feng ...
- php按列导出excel2010,excel2010官方下载 免费完整版 PHP导出MySQL数据到Excel文件fputcsv...
这里的方法是利用fputcsv写CSV文件的方法,直接向浏览器输出Excel文件. 复制代码 代码如下: // 输出Excel文件头,可把user.csv换成你要的文件名 header('Conten ...
- Java poi api插入文字水印到docx文件
使用apache poi api实现wps插入水印效果. Office Open XML介绍 Microsoft Office从2007版开始使用xml格式存储.zip解压一个docx的word文档后 ...
- EasyExcel导出自定义合并单元格文件
目标 需要使用阿里的EasyExcel库来导出excel,并要自定义合并单元格. 思路 这里自定义的CellWriteHandler需要将数据进行如下处理: 1.Excel每一行数据必须对应一个对象: ...
最新文章
- 238. Product of Array Except Self
- 超微服务器使用IPMI安装操作系统小记
- 你最想要的圣诞礼物是什么?
- 为什么说下一个十年的主战场在Serverless?
- 我的世界服务器linux加mod,在Linux下搭建带MOD 我的世界(Minecraft)服务器
- 生日排序(洛谷P1104题题解,Java语言描述)
- mysql GRANT
- 制打印如下所示的n行数字金字塔_关于央行数字货币的技术猜测
- 最新!泰晤士2021亚洲大学排名发布:91所中国大陆高校上榜!
- shl归纳推理测试题库_shl归纳推理测试答案
- 在matlab中产生dsp程序学习
- 【转】科普贴:BIOS和UEFI的启动项
- Keil uVison4下载、安装、使用说明
- 小议新版GB9706.1-2020的基本性能
- 最新仿淘宝源码使用原生HTML+CSS描写
- 无法使用资源管理器打开FTP,别被百度的结果坑了
- java锟斤拷锟斤拷锟_锟斤拷?UTF-8与GBK互转乱码问题
- 计算机网络如何新建vlan和划分vlan,[单选] 划分VLAN后,不同VLAN的计算机之间不能实现二层通信。如果在VLAN间通信,需要建立()...
- 云管平台 | 云成本分析优化管理
- Devops 开发运维基础篇之使用Maven构建项目