思源笔记编辑器区域水印 JS 代码块分享

前言

鉴于之前使用过的腾讯文档支持文档水印,后来使用思源笔记,在上课展示文档的时候,习惯性会给弄上水印,思源笔记本身似乎不支持直接在编辑器区域添加水印,故自己写了个 JS 代码片段。

iShot2024072918.02.42.png

代码片段

提醒:水印文本比较多的时候,改一下水印的宽度高度即 watermarkWidth、watermarkHeight,否则水印展示不全。

JS 代码片段:

let watermarkContent = "多仔ヾ";
let watermarkWidth = 120;
let watermarkHeight = 70;

let canvas = document.createElement("canvas");
let ctx = canvas.getContext('2d');
canvas.width = watermarkWidth;
canvas.height = watermarkHeight;
ctx.font = "14px Arial";
ctx.fillStyle = "rgba(211, 211, 211, .3)";
ctx.rotate((-25 * Math.PI) / 180);
ctx.fillText(watermarkContent, 0, canvas.height/2);

let watermarkDataURL = canvas.toDataURL('image/png');
const defaultStyle = document.createElement('style');
defaultStyle.innerHTML = `.protyle::before {
    content: '';
    display: block;
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 100%;
    background-image: url(${watermarkDataURL});
    background-repeat: repeat;
    pointer-events: none;
    z-index: 10;
}`;
document.head.appendChild(defaultStyle);

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    20505 引用 • 79948 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 我让 GPT 改了一下,可以适应更长的文本:

    //编辑器区域水印 JS片段 https://ld246.com/article/1722247445881
    let watermarkContent = "JeffreyChen"; // 设置水印内容
    let watermarkWidth = 120; // 定义水印画布的宽度
    let watermarkHeight = 70; // 定义水印画布的高度
    
    // 创建一个新的canvas元素,用于绘制水印
    let canvas = document.createElement("canvas");
    let ctx = canvas.getContext('2d'); // 获取canvas的2D渲染上下文
    
    // 计算旋转角度
    const angle = (-25 * Math.PI) / 180; // 旋转角度转换为弧度
    
    // 保存初始状态
    ctx.save();
    
    // 计算文本的宽度和高度
    ctx.font = "18px Arial"; // 设置字体样式,确保与填充文本一致
    const textWidth = ctx.measureText(watermarkContent).width; // 计算文本宽度
    const textHeight = 18; // 字体大小就是文本的高度
    
    // 设置canvas的大小,考虑到旋转后的文本位置
    canvas.width = Math.max(watermarkWidth, textHeight * Math.abs(Math.sin(angle)) + textWidth * Math.abs(Math.cos(angle)));
    canvas.height = Math.max(watermarkHeight, textHeight * Math.abs(Math.cos(angle)) + textWidth * Math.abs(Math.sin(angle)));
    
    // 清空canvas
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    
    // 移动Canvas的原点到中心
    ctx.translate(canvas.width / 2, canvas.height / 2);
    
    // 旋转canvas中的文本
    ctx.rotate(angle); // 执行旋转操作
    
    // 设置填充颜色
    ctx.fillStyle = "rgba(211, 211, 211, .3)"; // 设置填充颜色为浅灰色,并设置其透明度
    
    // 在canvas的指定位置绘制水印文本
    ctx.fillText(watermarkContent, -textWidth / 2, textHeight / 2); // 使文本中心对齐
    
    // 恢复canvas原始状态
    ctx.restore();
    
    // 将canvas内容转为data URL格式的图片
    let watermarkDataURL = canvas.toDataURL('image/png');
    
    // 创建一个style标签用于定义水印样式
    const defaultStyle = document.createElement('style');
    defaultStyle.innerHTML = `
    .protyle::before {
        content: ''; /* 创建一个空的伪元素 */
        display: block; /* 将伪元素设为块级元素 */
        position: absolute; /* 绝对定位,使其覆盖在目标元素上 */
        top: 0; /* 伪元素的上边距设置为0 */
        left: 0; /* 伪元素的左边距设置为0 */
        height: 100%; /* 伪元素的高度设置为100%,覆盖整个目标元素 */
        width: 100%; /* 伪元素的宽度设置为100%,覆盖整个目标元素 */
        background-image: url(${watermarkDataURL}); /* 设置背景图片为之前生成的水印图像 */
        background-repeat: repeat; /* 背景图像重复,形成密集的水印效果 */
        pointer-events: none; /* 禁用伪元素的鼠标事件,确保底层元素可以接收事件 */
        z-index: 2; /* 设置z-index,使其在堆叠上下文中显示在其他元素之上 */
    }`;
    
    // 将样式标签添加到文档的<head>部分
    document.head.appendChild(defaultStyle);
    
    1 回复
  • visduo

    秀,哈哈

推荐标签 标签

  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    324 引用 • 1395 回帖 • 1 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 23 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    45 引用 • 113 回帖 • 274 关注
  • danl
    94 关注
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    34 引用 • 37 回帖 • 512 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1056 回帖 • 1 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    17 引用 • 7 回帖 • 1 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    10 引用 • 88 回帖
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 615 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    86 引用 • 122 回帖 • 615 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 190 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 617 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    109 引用 • 54 回帖 • 2 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    62 引用 • 289 回帖
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    97 引用 • 344 回帖
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 727 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 141 关注
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    188 引用 • 499 回帖
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 615 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    404 引用 • 3553 回帖 • 2 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    103 引用 • 294 回帖
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    7201 引用 • 32792 回帖 • 204 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 6 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 24 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    146 引用 • 3767 回帖