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

本贴最后更新于 318 天前,其中的信息可能已经时过境迁

前言

鉴于之前使用过的腾讯文档支持文档水印,后来使用思源笔记,在上课展示文档的时候,习惯性会给弄上水印,思源笔记本身似乎不支持直接在编辑器区域添加水印,故自己写了个 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);
  • 思源笔记

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

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

    25914 引用 • 107393 回帖 • 2 关注

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • LazyXP

    技术贴,比较好评。

  • 其他回帖
  • visduo via macOS

    秀,哈哈

  • 优秀

  • 我让 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 回复

推荐标签 标签

  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 97 关注
  • 反馈

    Communication channel for makers and users.

    120 引用 • 906 回帖 • 279 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    496 引用 • 934 回帖 • 1 关注
  • 大疆创新

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

    2 引用 • 14 回帖
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    107 引用 • 127 回帖 • 342 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖 • 7 关注
  • gRpc
    11 引用 • 9 回帖 • 99 关注
  • 自由行
    1 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    240 引用 • 224 回帖 • 1 关注
  • 思源笔记

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

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

    25914 引用 • 107392 回帖 • 2 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    92 引用 • 752 回帖
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 36 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    43 引用 • 44 回帖 • 2 关注
  • OneDrive
    2 引用 • 3 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    298 引用 • 763 回帖
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 1 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 152 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    167 引用 • 597 回帖
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 233 回帖 • 3 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 65 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    42 引用 • 130 回帖 • 250 关注
  • 安全

    安全永远都不是一个小问题。

    199 引用 • 818 回帖 • 1 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 708 关注
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖
  • jQuery

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

    63 引用 • 134 回帖 • 734 关注