Java基于POI来给导出的Excel动态添加水印

起因

客户提了一个要在导出的Excel里添加导出人员账号和姓名水印的功能,水印常见于ppt和pdf中,Excel用到水印的情况大部分用于打印,而客户这里的Excel加上水印后还要求可以编辑Excel,所以网上大部分插入图片的水印方法就不能用了,这里用到的是将水印设为背景图片的方法。
这是生成水印图片的方法

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背景(导出用的公司封装的方法,这里就不写了)

     XSSFWorkbook workbook = new XSSFWorkbook();XSSFSheet sheet = workbook.createSheet("Sheet1");//userxx是导出人员账号和姓名的动态变量,根据自己的需求设置ByteArrayOutputStream byteArrayOutputStream = WaterMarkHandler.createWaterMark(userxx);            int pictureIdx = workbook.addPicture(byteArrayOutputStream.toByteArray(),Workbook.PICTURE_TYPE_PNG);   String rID = sheet.addRelation(null, XSSFRelation.IMAGES,workbook.getAllPictures().get(pictureIdx)).getRelationship().getId();             sheet.getCTWorksheet().addNewPicture().setId(rID);

效果图

主要参考学习于这篇文章https://www.jianshu.com/p/4332f5feab2e,如果不理解的可以去看看原文章。
小白的工作心得,写的第一篇文章,有不对的地方望指出,希望对大家有所帮助。

Java基于POI来给导出的Excel动态添加水印相关推荐

  1. java基于easypoi实现对导出的excel文档加密

    **项目背景 随着项目日新月异的变化,对数据的安全性也越来越高,特别是政府类型的项目,数据安全往往是非常重要的,最近项目中导出的文件被要求需要密码才能打开,所以写下这篇文章,特此记录一下. 文章目录 ...

  2. java 基于poi数据的导出与导入

    导出word 前言 一.使用步骤 1.pom.xml 2.导出 3.读入数据 4.导入 前言 列如:导出榜单信息 一.使用步骤 1.pom.xml <!-- poi操作excel -->& ...

  3. 基于 POI 封装 ExcelUtil 精简的 Excel 导入导出

    由于 poi 本身只是针对于 excel 等office软件的一个工具包,在一些常规的 excel 导入导出时,还需要再做一次精简的封装,简化代码耦合. 一.现状 本人经历过几家公司的代码封装,导入导 ...

  4. JAVA实现数据库数据导入/导出到Excel(POI)

    原文地址为: JAVA实现数据库数据导入/导出到Excel(POI) 准备工作: 1.导入POI包:POI下载地址http://mirrors.tuna.tsinghua.edu.cn/apache/ ...

  5. Java基于POI对PPT的基本操作

    Java基于POI对PPT的基本操作 在Java中对PPT文件进行操作的话,我使用的是Apache的开源项目POI.该项目的功能主要是使用Java开发或生成微软办公文件,比如:Word.Excel.P ...

  6. java使用poi.xssf 写入内容到excel表格中 和 读取 表格里面的数据

    一.java使用poi.xssf 写入内容到excel表格中 public class TestExcel {//创建一个excel工作簿public static String outputFile ...

  7. java使用poi读取跨行跨列excel

    java使用poi读取跨行跨列excel 1.需求背景 2.实现思路分析 3.重要代码片码说明 4.完整的代码类如下: 5.完整的demo代码提供如下 6.demo执行结果 1.需求背景 最近有一个工 ...

  8. java的poi技术读,写Excel[2003-2007,2010]

    在上一篇blog:java的poi技术读取Excel[2003-2007,2010] 中介绍了关于java中的poi技术读取excel的相关操作 读取excel和MySQL相关: java的poi技术 ...

  9. 使用POI将数据库导出为excel表格

    使用POI将数据库导出为excel表格 准备 使用的是POI,是Apache项目,目前已经很少有人用jxl了,学就学习常用的东西,没有必要去学冷门. 此种方式使用的map封装的数据,操作比较的简单使用 ...

  10. java使用POI工具类导出excel

    POI导出excel 1.导入maven依赖 <dependency><groupId>org.apache.poi</groupId><artifactId ...

最新文章

  1. 杀掉某个进程的 Shell
  2. Linux 修改mac 地址方法记录
  3. matlab训练神经网络模型并导入simulink详细步骤
  4. 【今晚七点半】:主编对话李宇翔——我所经历的“前端”开发
  5. 问题 C: 【例2-3】围圈报数
  6. LeetCode 314. 二叉树的垂直遍历(BFS/DFS)
  7. 语音识别已逐渐普及 搜狗讯飞各具特色
  8. 【pytorch】pytorch-LSTM
  9. GPS定位可以使用物联卡吗?信号稳定吗?
  10. 【Matlab学习笔记】【函数学习】eps
  11. 现场打分实时展示系统-Web版(英文名:WebShow)使用疑难问题汇编
  12. 安卓开发3d模型展示源码_Android(安卓)全套开发资料视频+源码
  13. 集成第三方单点登录JIRA(Colfluence同理)
  14. javaweb简单的外卖平台系统(一)
  15. C语言程序设计第六次作业——循环结构(2)
  16. 【2023年1月·第二周】-单词学习记录(1月9日-1月15日)
  17. Zabbix监控学习系列(2):agent的安装与Server端添加客户端
  18. DDOS\CC流量攻击
  19. python设备分组(部门分组等)功能设计
  20. Python---format格式化

热门文章

  1. android禁止屏幕自动旋转_Android 禁止屏幕旋转 屏幕旋转不刷新 Activity 动态更改屏幕方向...
  2. 纠正口呼吸,信医生别信“神器”
  3. 上海电信光猫超级管理员密码后门
  4. linux驱动开发:mma7660 sensor的配置
  5. 一种可以自我修改的计算机器
  6. 洛必达法则-求导的方法求解出极限
  7. 二次bootloader关于boot28.asm应用的注意事项,28035的
  8. Android 集成支付宝第三方登录
  9. win7看不到共享打印机的计算机,win7搜不到共享打印机怎么办?-解决win7找不到共享打印机的方法 - 河东软件园...
  10. 拉格朗日插值法总结模板(1~n)