前端页面添加水印

该文章介绍了如何在前端页面添加水印,提供了一个JavaScript函数createWaterMark,该函数使用HTML5canvas创建自定义水印,并允许设置字体、颜色、位置等参数。用户可以导入此插件并自定义配置来在指定DOM元素上添加水印。
摘要由CSDN通过智能技术生成

前端页面添加水印


源码

/**
 * 给页面打水印
 *
 *
 *  参数介绍:
 *      message: 显示水印的文字;
 *      {
 *          font: 水印字体大小,样式,如:16px sans-serif
 *          color: 水印字体颜色,如:#ccc
 *      };
 *      dom元素,非必填,不填的情况下为body;
 */

function createWaterMark (
  message,
  {font, color, position, width, height, angleCount, globalAlpha, zIndex} = {},
  dom = document.body) {
  const WIDTH = width || 160
  const HEIGHT = height || 160

  const canvas = document.createElement('canvas')
  canvas.width = WIDTH
  canvas.height = HEIGHT
  const ctx = canvas.getContext('2d')
  if (!ctx) {
    return
  }

  ctx.font = font || '16px sans-serif'
  ctx.fillStyle = color || '#7f7f7f'
  ctx.globalAlpha = globalAlpha || 0.1
  ctx.translate(WIDTH / 2, HEIGHT / 2)
  ctx.rotate(-Math.PI / (angleCount || 6))
  ctx.textAlign = 'center'
  ctx.fillText(message || '', 0, 0)
  const dataURL = canvas.toDataURL('image/png')

  const mask = document.createElement('div')
  mask.style.width = '100%'
  mask.style.height = '100%'
  mask.style.position = position || 'fixed'
  mask.style.left = '0'
  mask.style.top = '0'
  if (_.isNumber(zIndex)) {
    mask.style.zIndex = String(zIndex)
  } else {
    mask.style.zIndex = '10000'
  }
  mask.style.pointerEvents = 'none'
  mask.style.backgroundImage = `url(${dataURL})`

  dom.append(mask)
}

export default createWaterMark

水印插件使用方法

// 引入
import createWaterMark from '@/plugins/water-mark'

createWaterMark(
'developer', //打水印的内容
{
position: 'absolute', //水印样式
color: '#333',
font: '30px sans-serif',
width: 400,
height: 300,
angleCount: 8,
globalAlpha: 0.1
},
document.getElementById('xxxx') //被打水印的Dom, 非必填,不填的情况下为body
)

//简易使用方法
createWaterMark(
'developer', //打水印的内容
{
color: '#333',
font: '30px sans-serif'
})

页面效果:
在这里插入图片描述


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java EasyExcel 是一款非常好用的 Excel 操作工具,提供了丰富的 API 接口,可以方便地进行 Excel 文件的读写操作。而在实际应用中,我们可能需要在 Excel 文件中添加一些自定义的水印,以便于区分文件的来源或者保护文件的安全性。本文将介绍如何使用 Java EasyExcel 自定义水印插件。 1. 创建水印插件类 首先,我们需要创建一个自定义的水印插件类,实现 com.alibaba.excel.write.handler.WriteHandler 接口,该接口提供了 beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) 方法,允许我们在生成 Excel 文件之前对 Sheet 进行一些自定义操作。以下是一个简单的水印插件类示例: ```java public class WaterMarkHandler implements WriteHandler { private String waterMark; // 水印内容 public WaterMarkHandler(String waterMark) { this.waterMark = waterMark; } @Override public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { Sheet sheet = writeSheetHolder.getSheet(); Drawing<?> drawing = sheet.createDrawingPatriarch(); // 创建水印文本框 ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 0, 10, 10); Textbox textBox = drawing.createTextbox(anchor); // 设置文本框属性 textBox.setLineStyleColor(255, 255, 255); textBox.setFillColor(255, 255, 255); textBox.setVerticalAlignment(VerticalAlignment.CENTER); textBox.setHorizontalAlignment(HorizontalAlignment.CENTER); textBox.setText(new HSSFRichTextString(waterMark)); } @Override public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { // do nothing } } ``` 在上面的代码中,我们通过实现 beforeSheetCreate() 方法,在生成 Sheet 之前创建了一个水印文本框,并设置了文本框的属性和文本内容。 2. 使用水印插件 在使用 Java EasyExcel 生成 Excel 文件时,我们可以将上面定义的 WaterMarkHandler 类作为参数传递给 ExcelWriter 的构造函数,从而实现添加自定义水印的功能。以下是一个简单的示例: ```java public void writeExcelWithWaterMark(OutputStream outputStream, List<List<String>> data, String waterMark) throws IOException { ExcelWriter writer = new ExcelWriter(outputStream, ExcelTypeEnum.XLSX); WriteSheet sheet = new WriteSheet(); sheet.setSheetName("Sheet1"); sheet.setClazz(String.class); sheet.setHead(Collections.emptyList()); sheet.setTableStyle(new TableStyle()); sheet.setWriteHandler(new WaterMarkHandler(waterMark)); // 设置水印插件 writer.write1(data, sheet); writer.finish(); } ``` 在上面的代码中,我们通过调用 setWriteHandler() 方法将 WaterMarkHandler 对象传递给 WriteSheet,从而在生成 Excel 文件时添加自定义水印。完整的代码实现可以参考下面的示例: ```java import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.metadata.TableStyle; import com.alibaba.excel.metadata.VerticalAlignment; import com.alibaba.excel.metadata.WriteSheet; import com.alibaba.excel.write.handler.WriteHandler; import com.alibaba.excel.write.handler.WriteHandlerHolder; import com.alibaba.excel.write.handler.WriteWorkbookHolder; import com.alibaba.excel.write.handler.context.CellWriteHandlerContext; import com.alibaba.excel.write.handler.context.RowWriteHandlerContext; import com.alibaba.excel.write.handler.context.SheetWriteHandlerContext; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.poi.ss.usermodel.drawing.ClientAnchor; import org.apache.poi.ss.usermodel.drawing.Drawing; import org.apache.poi.ss.usermodel.drawing.Textbox; import org.apache.poi.ss.util.CellAddress; import java.io.IOException; import java.io.OutputStream; import java.util.Collections; import java.util.List; public class WaterMarkHandler implements WriteHandler { private String waterMark; public WaterMarkHandler(String waterMark) { this.waterMark = waterMark; } @Override public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { Sheet sheet = writeSheetHolder.getSheet(); Drawing<?> drawing = sheet.createDrawingPatriarch(); // 创建水印文本框 ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 0, 10, 10); Textbox textBox = drawing.createTextbox(anchor); // 设置文本框属性 textBox.setLineStyleColor(255, 255, 255); textBox.setFillColor(255, 255, 255); textBox.setVerticalAlignment(VerticalAlignment.CENTER); textBox.setHorizontalAlignment(HorizontalAlignment.CENTER); textBox.setText(new HSSFRichTextString(waterMark)); } @Override public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { // do nothing } public static void writeExcelWithWaterMark(OutputStream outputStream, List<List<String>> data, String waterMark) throws IOException { ExcelWriter writer = new ExcelWriter(outputStream, ExcelTypeEnum.XLSX); WriteSheet sheet = new WriteSheet(); sheet.setSheetName("Sheet1"); sheet.setClazz(String.class); sheet.setHead(Collections.emptyList()); sheet.setTableStyle(new TableStyle()); sheet.setWriteHandler(new WaterMarkHandler(waterMark)); writer.write1(data, sheet); writer.finish(); } } ``` 这样,我们就可以使用 Java EasyExcel 实现自定义水印插件的功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值