微信小程序预览PDF、H5预览PDF、网页预览PDF,并添加专属文字水印

news2024/9/20 19:35:10

下载PDF.js

点击PDF.js下载地址

在这里插入图片描述

引入预览PDF 文件

// const url = new URL("./1.pdf", import.meta.url).href // 在本地项目获取pdf
// const url = "https://xxxx/05d833041f.pdf" // 在线上链接获取pdf
const url = query.get('url') // 在地址栏获取pdf
const query = new URLSearchParams(window.location.search.split('?')[1])
const watermarkText = query.get('text') || 'xxx' // 添加水印
const baseUrl = import.meta.env.BASE_URL; // 如果有更改基本路径则添加

<!-- 注意引入路径是否正确 -->
<iframe :src="`${baseUrl}/pdfjs-dist/web/viewer.html?file=${url}&watermarkText=${watermarkText}`" width="100%" height="100%" frameborder="0"></iframe>

AddWatermark.js 添加水印的功能

(() => {
    // 添加水印
    window.AddWatermark = (ctx, that) => {
        // 水印数据 start
        const watermarkPoint = [
            [45, 35], [310, 35], [45, 165], [310, 165],
        ] // 水印坐标
        const query = new URLSearchParams(window.location.search.split('?')[1])
        let watermarkText = query.get('watermarkText')

        // 水印数据 end
        // 添加水印
        const scale = that.scale
        ctx.font = `${16 / scale}px Microsoft Yahei`;
        // ctx.fillStyle = 'rgba(255, 0, 0, 1)'
        ctx.fillStyle = 'rgba(0, 0, 0, .1)'
        ctx.textAlign = 'center'
        ctx.textBaseline = 'middle'
        watermarkPoint.forEach(point => {
            ctx.translate( point[0] / scale,  point[1] / scale )
            ctx.rotate(-30 * Math.PI / 180)
            ctx.fillText(watermarkText, 0, 0)
            ctx.resetTransform()
        })
    }
})()

viewer.html引入添加水印的js

/pdfjs-dist/web/viewer.html

<!-- 注意引入路径是否正确 -->
<script src="../js/AddWatermark.js" type="module"></script>

更改/pdfjs-dist/web/viewer.mjs文件

  • 注释掉校验
// validateFileURL(file);
  • 搜索“await this.#renderDrawLayer();”关键字
    在这里插入图片描述
// 添加水印
AddWatermark(ctx, this)

使用的PDF.js版本

4.5.136

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2038320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年Q2震撼来袭!AMD数据中心与笔记本CPU市场独占鳌头,强劲表现引爆业界关注!

根据CPU市场追踪机构Mercury Research的最新报告&#xff0c;AMD在2024年第二季度再次取得了显著成绩&#xff0c;在数据中心和笔记本电脑CPU市场上份额有所增加。然而&#xff0c;Intel在台式机市场仍占据优势&#xff0c;并在整体出货量上保持领先地位。 在2024年第二季度&a…

本地查看的Git远程仓库分支与远程仓库分支数量不一致

说明&#xff1a;一次&#xff0c;在IDEA中想切换到某分支&#xff0c;但是查看Remote没有找到要切换的分支&#xff0c;但是打开GitLab&#xff0c;查看远程仓库&#xff0c;是有这个分支的。 解决&#xff1a;1&#xff09;在IDEA的Git中&#xff0c;点下面Fatch获取一下远程…

Grype:用于容器镜像、文件系统的开源漏洞扫描程序

容器镜像和文件系统的漏洞扫描器 Grype 是一个开源漏洞扫描器&#xff0c;专为容器镜像和文件系统设计&#xff0c;可与强大的软件物料清单 (SBOM) 工具 Syft 无缝集成。 扫描容器镜像或文件系统的内容以查找已知漏洞。 查找主要操作系统软件包的漏洞 Alpine Amazon Linux B…

计算机毕业设计 招生宣传管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

Linux基础入门---Centos安装步骤

&#x1f600;前言 本篇博文是关于Centos的详细安装&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x1f609…

20240814 每日AI必读资讯

号称全球最强AI程序员 “Genie” 横空出世&#xff0c;击败Devin与GPT-4! - Genie在SWE-Bench测试中得分高达30.08%&#xff0c;成为全球最强AI程序员。 - 采用特殊数据集和自我改进机制&#xff0c;使Genie在复杂编码中表现出色。 - 目前已开放申请试用&#xff0c;未来将推…

Android12 SystemUI QS面板新增截屏功能

问题:Android12 中SystemUI版本,QS下拉快捷面板式没有截屏功能的。 需求:客户要求在项目中实现下拉快捷面板具备一键截屏功能 目前自己只针对Android12 mtk/RK平台实践过,接触的全志平台暂未实验验证。 文章目录 前言一、实际实现效果二、修改点1.新增文件2.修改文件三、基…

Redis缓存——缓存更新策略和常见的缓存问题

一.什么是缓存&#xff1f; 前言&#xff1a;什么是缓存? 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码 前言&#xff1a;为什么要使用缓存&#xff1f; 一句话:因为速度快,好用 缓存数据存储于代码中,而代码运行在内存…

初识C++ · C++11(3)

前言&#xff1a; 本文介绍的是包装器以及线程库的简单了解&#xff0c;但是呢&#xff0c;线程是基于对Linux有一定的了解&#xff0c;所以本文就是简单介绍一下&#xff0c;介绍完包装器以及线程库的简单理解之后C11的特性就到此为止&#xff0c;当然C11远不止于此&#xff…

Pixel Adventure Unity2D开发完整指南

本文参考&#xff1a;2-2. Get and Setup Assets_哔哩哔哩_bilibili 1、下载资源 在Asset Store中下载Pix Adventure1 2的资源&#xff1a; 在import的时候&#xff0c;不用到Scene import进来&#xff0c;如下图所示&#xff0c;Scenes目录反勾选一下。 两个资源都下载完成后…

朱利亚集合和曼德布洛特集合及其图像

朱利亚集合和曼德布洛特集合及其图像 朱利亚集合&#xff08;Julia Set&#xff09;和 曼德布洛特集合&#xff08;Mandelbrot Set&#xff09;除了数学理论上的意义&#xff0c;所生成的分形图像&#xff0c;因其独特的几何美感和无限的复杂性&#xff0c;还被广泛应用于计算机…

增强现实系列—深入探索ARKit:平面检测、三维模型放置与增强现实交互

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

技术研究:Redis 实现消息队列

综述 我们先看看消息队列的消息存取到底有哪些需求吧&#xff1a; 需求1&#xff1a;消息保序&#xff1a;由于消费者是异步处理消息&#xff0c;但是消费者需要按照生产者发送消息的顺序来处理消息&#xff0c;避免后发送的消息被先处理了。 需求2&#xff1a;重复消息处理&…

【区块链+金融服务】河北股权交易所综合金融服务平台 | FISCO BCOS应用案例

区域性股权市场是我国资本市场的重要组成部分&#xff0c;是多层次资本市场体系的基石。河北股权交易所&#xff08;简称&#xff1a;河交所&#xff09; 作为河北省唯一一家区域性股权市场运营机构&#xff0c;打造河北股权交易所综合金融服务平台&#xff0c;将区块链技术与区…

信号与系统MATLAB实验:连续信号的采样与恢复

一、实验内容 &#xff08;1&#xff09;修改示例中的门信号宽度、采样周期等参数&#xff0c;重新运行程序&#xff0c;观察得到的采样信号时域和频域特性&#xff0c;以及重构信号与误差信号的变化。 示例1&#xff1a;选取门信号f(t) g2(t)为被采样信号。利用MATLAB实现对…

搭建超好用的个人网盘

目录 前言filebrowser下载地址介绍优点缺点部署效果 cloudreve官网介绍优点缺点部署效果 总结 前言 目前我使用过的文件存储管理软件&#xff0c;包括fastdfs、minio、filebrowser、cloudreve&#xff0c;这4款软件&#xff0c;我自己亲自搭建且都使用过&#xff0c;fastdfs很…

Datawhale X 魔搭 AI夏令营第四期 AIGC方向 task02笔记

AI工具使用 1. baseline 代码2. 使用通义千问理解代码2.1 工作流程2.2 逐行释意 3. 使用通义千问生成 Prompt3.1 生成的 Prompt3.1 根据 Prompt 生成的图片 1. baseline 代码 !pip install simple-aesthetics-predictor!pip install -v -e data-juicer!pip uninstall pytorch-…

docker的基本管理和应用

1、概念 docker是一个开源的应用容器引擎&#xff0c;基于go语言开发的。 docker是运行在linux的容器化工具&#xff0c;可以理解为轻量级的虚拟机。 可以在任何主机上轻松创建的一个轻量级、可移植的、自给自足的容器 2、设计的理念 鲸鱼——宿主机 集装箱——独立运行的…

07:【stm32】中断一:NVIC的配置

中断 1、中断的简介1.1、什么是中断1.2、为什么需要中断 2、中断的优先级2.1、中断优先级的表示方法 3、NVIC3.1、什么的NVIC3.2、NVIC的内部结构3.3、中断向量表3.4、程序实现①开启中断源②配置NVIC③中断响应函数 1、中断的简介 1.1、什么是中断 正在进行的事务被突发事件打…

1688商品详情API返回值中的供应商信息

在使用1688&#xff08;阿里巴巴中国站&#xff09;的商品详情API时&#xff0c;API的返回值中通常会包含丰富的产品信息&#xff0c;包括供应商&#xff08;卖家&#xff09;的信息。不过&#xff0c;具体的返回值内容可能会根据API的版本、调用参数以及API的更新情况有所不同…