PDF.js 在线pdf阅读插件(禁止打印,下载,每页水印)

前端实现在线预览PDF,水印方案,真水印哦。 前端实现PDF预览,并且加水印 公司要做一个PDF预览并且加水印的功能,思考的很久,找了很久的资料,但是没有一篇文章给我完整的解决方案。一般都是用假的水印…发现了 pdf-lib 可以操作 pdf 文件,pdf.js可以预览文件。于是把两个东西组合起来实现了,在后端的帮助下,前端加水印并且预览。想把自己解决这个问题的历程写下来,帮助更多的开发者。 1.准备 实现这个功能需要两个包 PDFJS下载地址 PDF-LIB官网 2.开搞 下载PDFJS的项目目录,然后就用这个开发就好了。集成进Vue项目也是一样。 阅读详情
AI摘要

本文介绍如何使用PDF.js在网页上加载PDF文档,并提供了一些高级功能的实现方法,如禁止打印和下载、添加每页水印及处理F12开发者工具带来的问题。

PDF.js实际运行起来的页面UI效果:http://mozilla.github.io/pdf.js/web/viewer.html

插件下载:https://pan.baidu.com/s/1jIDxrYA

1.调用方法:

把generic文件放在项目代码中

<a href="resources/js/pdfJs/generic/web/viewer.html?file=../../../../instruction/instruction.pdf" target="view_window">系统操作指南</a>

直接在页面里使用a标签,打开的位置为viewer.html的位置
file书写想要加载的pdf相对于viewer.html的相对地址
这样就可以把pdf加载到viewer页面里了。
这里写图片描述

2.禁止打印,下载:

  • 寻找方法
    右键打印的按钮观察打印按钮的id,为print。我们可以在viewer.html中找到这个按钮,(同理还有download的下载按钮)。注释掉它们。
    这里写图片描述
    运行会发现页面报错,如果懒得研究js可以

  • 解决方法:

    1. 直接隐藏掉按钮为button添加style样式style="visibility:hidden"
    2. .这时我们右键点击页面仍然会出现弹出菜单,里面有打印选项:
      在js里通过oncontextmenu事件,屏蔽系统自带的右键列表。同样可以自定右键菜单制定自己想要的效果。
 document.oncontextmenu=function(ev){
        return false;
    }

3.每页水印

这里写图片描述

  • 水印的效果原理:

    1.水印用我们可以通过遮挡层来实现。
    2.水印的位置:在每一个pdf页面里添加一个对于当前pdf页面相对定位的div。
    3.定义遮挡层css样式,制作想要的水印效果
    4.考虑页面缩放问题

  • 分析页面寻找解决方法:

右键检查pdf页面,我们可以看到页面放在class="page"的div里,页码由data-page-number设置,在viewer.js里搜寻查看相关的内容。通过这种方式,我们可以设想,在页面添加class="page"时,添加遮挡层cover为孩子节点。继续观察canvasWrapper和textLayer的代码, 我们不难发现需要添加修改的位置.

  • 解决方法:
    修改viewer.js
    在3503行前后修改,添加以下代码。即为在在page中添加textLayer的孩子节点的同时,我们添加cover节点,并根据页面大小修改div大小

textLayerDiv = document.createElement('div');
textLayerDiv.className = 'textLayer';
textLayerDiv.style.width = canvas.style.width;
textLayerDiv.style.height = canvas.style.height; 
---------------------------------------------------   
var cover = document.createElement('div');
cover.className = "cover";
cover.innerText = "仅供参考,禁止下载。";
if (this.annotationLayer) {
    // annotationLayer needs to stay on top
    div.insertBefore(textLayerDiv, this.annotationLayer.div);                  
    div.appendChild(cover);                         
} else {
   div.appendChild(textLayerDiv);
   div.appendChild(cover);    
}
var cover = document.getElementsByClassName('cover'),size = 0,
nowWidth = +canvas.style.width.split("p")[0],
//714为100%时,每页的宽度。对比当前的宽度可以计算出页面变化后字体的数值
size = 50*nowWidth/714 +"px";  
for(var i=0, len=cover.length; i<len; i++){     
    cover[i].style.fontSize = size;
    cover[i].style.width = canvas.style.width;
    cover[i].style.height = canvas.style.height;            
 }
}               

css文件:利用 position: absolute;
top和left用百分比定位。

.cover{
 z-index: 100;
 position: absolute;
 top: 41%;
 left: -13%;
 transform: rotate(9deg);
 text-align: center;
 font-size: 310%;
 padding-left: 30px;
 letter-spacing: 18px;
 color:rgba(162, 162, 162, 0.4);    
}

效果如下(这马赛克加的也没谁了-_-!)
这里写图片描述

4.F12带来的隐患

这里写图片描述

打开F12开发者,你会很明显的发现。PDF.js会每个页面进行一个请求.如果你再双击一下这些请求。。。你会发现。。。。。
这里写图片描述
mmp,这不又用浏览器默认pdf加载器打开了吗!!??进一步的,我们可以监听F12按键,关闭F12的开发者选项弹出。

依然是那个问题:网页是面向普通客户还是有心的程序员。

参考文章:
http://blog.youkuaiyun.com/xiangcns/article/details/42089189

IE浏览器PDF禁止下载打印复制另存:四层权限管控与溯源方案 PDF文档安全预览的核心,是在浏览器展示、文件权限与服务端访问控制之间建立分层边界。内容层通过PDF权限位与加密限制复制、打印、修改;传输层用动态token和短时链接隐藏真实路径,阻断下载与另存;表现层借助pdf.js渲染、事件拦截、透明遮罩和打印样式覆盖,提高顺手复制与打印的门槛;水印则把绝对禁止转化为可追责。这一思路尤其适用于IE浏览器仍占存量、且对PDF禁止下载、禁止打印、禁止复制要求严格的企业内网、政务办公和教务系统。围绕IE兼容、pdf.js版本选择、iText权限加密、响应头缓存控制及前端拦截边 阅读详情

相关推荐

PDF.js 在线阅读水印与禁止下载:前端能拦到什么程度

在 Web 前端实现 PDF 在线阅读时,PDF.js 通过 canvas 渲染提供了比 iframe 更可控的方案。其原理是将 PDF 页面绘制到 canvas,从而支持叠加多行多列文字水印、拦截右键与快捷键等操作。技术价值在于提高文档泄露门槛并留下追溯痕迹,但无法实现绝对禁止下载。典型应用场景包括后台管理系统中的合同、报表预览。本文围绕 PDF.js 接入、canvas 水印绘制及前端拦截手段展开工程实践。

weixin_34239169的博客 197

PDF.js代码 ---- viewer.html

PDF.js源码之viewer.html大体注解

VitalityShow(网络通讯) 1万+

pdf.js实战:纯JS实现PDF在线预览与打印全流程

在后台管理系统中,PDF文件在线预览与打印是高频需求,但传统iframe套壳方案受限于浏览器插件差异,常出现UI不统一、功能不可控、打印体验不一致等问题。前端开发者需要一种更通用、可定制的方案,而基于JavaScript的pdf.js库提供了完美的解决路径。它通过解析PDF字节流并结合Canvas渲染,将每一页内容绘制在页面上,完全掌控显示效果与交互逻辑。该技术广泛适用于合同预览、电子报告、发票查看等业务场景。本文从零搭建一个完整的Demo,深入讲解pdf.js的核心对象、翻页、缩放、旋转以及三种在线打印实

weixin_33095355的博客 317

JavaScript前端:与PDF.js结合,实现网页PDF内容批量下载

JavaScript前端:与PDF.js结合,实现网页PDF内容批量下载

qq_46119575的博客 6470

纯前端PDF在线预览实战:PDF.js渲染、水印与性能优化

PDF.js 是一个纯 JavaScript 的 PDF 渲染库,它通过解析 PDF 文件并在 Canvas 上绘制页面,实现了不依赖浏览器插件或后端转图片的在线预览。其核心原理是利用 Web Worker 在后台线程解析文档,避免主线程阻塞,同时支持按需渲染和懒加载以提升性能。这项技术为前端开发者提供了对 PDF 显示的完全控制权,可灵活添加水印、禁用下载、适配移动端,并有效解决中文乱码和跨域问题。在合同预览、课件阅读、发票查看等场景中,PDF.js 已成为主流方案。本文深入解析 PDF.js 的集成步骤

weixin_33824385的博客 110

前端JS在线预览PDF:pdf.js原理与实战踩坑全解析

在Web前端工程中,文件在线预览是常见且复杂的需求,尤其PDF文档经常面临跨域、鉴权、样式不可控等挑战。PDF.js作为Mozilla开源的纯JavaScript渲染引擎,能够将PDF字节流解析并绘制到Canvas上,实现高度可控的在线查看体验。其核心机制包括PDFDocumentProxy、PDFWorker及文本层等,开发者可基于此构建自定义工具栏、缩略图、打印及水印权限控制。这一方案广泛适用于管理系统、门户网站等需要内嵌预览、防下载和操作追踪的业务场景。本文从方案选型对比出发,详细讲解pdf.js的引

weixin_27960253的博客 273

【亲测免费】 PDF.js 在线PDF阅读插件(禁止打印、下载、每页水印)

PDF.js 在线PDF阅读插件(禁止打印、下载、每页水印) 去发现同类优质开源项目:https://gitcode.com/ 简介 本资源文件提供了一个基于PDF.js的在线PDF阅读插件,该插件具有以下特点: 禁止打印:用户无法通过浏览器打印PDF文件。 禁止下载:用户无法通过浏览器下载PDF文件。 每页水印:在PDF的每一页上添加水印,以防止未经授权的使用。 功能说明 1. 调用方法 将...

gitblog_06558的博客 658

免费给PDF设置有效期:JavaScript实现过期自动关闭

在PDF文档的日常管理尤其是分发场景中,如何控制文件的访问时效、避免文件被无限期传播,是许多创作者和企业关注的问题。PDF本身支持加密与权限控制,但单纯的密码保护并不能实现“到期自动失效”。通过嵌入文档级JavaScript、结合时间戳校验,可以在文件打开时自动判断当前时间是否超过预设有效期,过期则拒绝访问或关闭文档。这一轻量级方案无需高昂的DRM系统,搭配福昕PDF编辑器、qpdf等免费工具,即可为PDF添加有效期控制,并同步进行无损压缩,在保证文件质量的前提下减小体积,形成完整的免费安全分发工作流。适用

weixin_34129696的博客 377

IE浏览器PDF防下载防打印:服务端转图与水印令牌方案

PDF在线预览与文件防泄露,本质不是让浏览器“看不见”,而是让原始文件不落地。浏览器插件或前端JS渲染,在IE环境下对下载、打印、另存、复制的拦截较弱,因为完整PDF一旦到达客户端,就可能被绕过。更通用的工程思路是服务端渲染:把PDF按页转成图片并烧录水印,再通过短期令牌签名URL按需下发,使前端只接触位图,不接触原始文件。其技术价值在于兼容IE11/IE8、天然禁文本复制、打印可溯源;应用场景包括OA、合同审阅、财务报表、工单附件。围绕IE浏览器PDF防下载、防打印与防另存,该方案组合前端拦截、令牌接口、

weixin_29698641的博客 328

PDF 插件SNAKE

找了好久才找到的 不过 只能用30天,希望各位高手指点一下。。。

PDFsnake插件

可以在PDF里面修改尺寸,很实用,尤其是快印公司,特别实用,好东西大家共享,直接复制在程序里有个 plug_ins文件夹里面就可以了!

PDF.js前端文档预览实战:从基础渲染到阅读进度存储

在Web前端开发中,文档在线预览始终是高频刚需,而浏览器原生PDF预览能力有限且可控性差。PDF.js作为Mozilla开源的纯JavaScript解析渲染引擎,无需插件即可将PDF转换为Canvas、文本和图片,彻底解决兼容性与定制化难题。其核心原理基于HTML5 Canvas和Worker线程异步解析,支持按需渲染、文本层提取、表单读取等能力,既适配Vue、React等工程化项目,也能在Node.js端完成批量文本抽取。实际应用中,PDF.js可广泛用于在线教育、合同管理、SaaS平台等场景,甚至通过防

weixin_33892359的博客 324

从SFF-8087到SFF-8643:详解服务器硬盘背板连接线缆的演变与实战接线

本文深度解析了服务器硬盘背板连接技术从SFF-8087到SFF-8643的演进历程,重点介绍了SAS、SATA和U.2接口的技术特点与实战接线方案。通过对比不同连接器标准的物理特性和电气规范,提供了混合环境下的线缆选择策略和常见故障排查指南,帮助IT专业人员优化存储系统性能与稳定性。

weixin_30603633的博客 275

PDF.js在企业文档管理系统中的实战应用

大文件加载优化:实现了分片加载和缓存机制性能调优:使用Web Worker处理PDF渲染移动端适配:针对触屏操作做了专门优化通过这个项目,我们成功为企业搭建了一个安全、稳定、高效的文档管理系统。PDF.js的强大功能和灵活性,让我们能够实现各种定制化需求。如果你也想快速体验类似的项目开发,可以试试InsCode(快马)平台。这个平台内置了代码编辑器和实时预览功能,还能一键部署项目,大大简化了开发流程。我最喜欢的是它的AI辅助编程功能,遇到问题可以直接提问,能快速得到解决方案。

YellowSun24的博客 392

三角洲行动交易行自动化脚本

DFMarketBot - 三角洲行动自动交易助手 DFMarketBot是一款专为三角洲行动游戏设计的交易行自动化工具,通过OCR识别和鼠标模拟实现自动补卡、补子弹功能。项目采用Python开发,支持Windows平台,主要功能包括: 自动检测并购买指定物品(房卡/子弹) 价格监控与智能购买(低于设定价格自动下单) 自定义购买数量与次数限制 支持窗口/无窗口两种游戏模式 使用前需安装Tesseract OCR引擎并配置游戏为1920*1080分辨率。通过JSON文件可灵活配置监控物品清单、理想价格和购买策

愤怒的阿木木的博客 3万+

驻极体咪头信号采集避坑指南:如何用5V单电源搞定0.1mV~1V的音频放大?

本文针对驻极体咪头(ECM)在5V单电源系统中信号采集的常见难题,提供了详细的电路设计指南。文章深入分析了咪头的高输出阻抗与微弱信号特性,重点阐述了采用两级运放(如AD8542)实现低噪声放大、直流偏置叠加以及抗混叠滤波的完整方案,并分享了PCB布局、电源去耦等关键调试技巧,帮助工程师稳定采集0.1mV至1V的音频信号。

weixin_29291069的博客 435

IE 浏览器 PDF 防下载:服务端切图、动态水印与令牌鉴权实践

文档安全管控的核心,不是在前端屏蔽右键,而是让浏览器拿不到原始文件。PDF 之所以能被下载、打印、复制,是因为它作为文档对象交给 IE 或插件渲染,工具栏、文本层和另存入口都游离在页面之外。把 PDF 在服务端渲染成位图,再通过内容协商、短期令牌、图片切片和动态水印交付,浏览器只能看到像素,无法提取文本或另存源文件。该思路适合企业内网中的 IE 浏览器兼容系统、老旧 OA、合同与报表浏览管控场景,也便于和现有前后端架构平滑集成。围绕 IE 浏览器 PDF 禁止下载、禁止打印、禁止另存、禁止复制这一诉求,服务

weixin_29034963的博客 324

S32DS使用手把手教程:从零实现CAN通信配置

深入讲解S32DS使用过程中如何从零开始配置CAN通信,涵盖关键步骤与实用技巧,帮助开发者快速上手S32DS使用中的常见问题与调试方法。

weixin_42405592的博客 1124

PDF全能处理实战指南:从在线工具到命令行自动化

PDF作为跨平台文档交换的事实标准,其核心在于封装文本、图像与格式信息,确保在任何设备上呈现一致。其技术原理基于PostScript页面描述语言和结构化对象模型,这使得PDF既能保持复杂排版,也带来了编辑与处理的挑战。在工程实践中,高效处理PDF已成为日常办公与开发中的高频需求,涉及文档编辑、格式转换、内容提取与安全保护等多元场景。针对这些需求,集成化的在线工具箱提供了便捷的解决方案,而命令行工具则能实现批量自动化处理。本文聚焦于PDF编辑与OCR识别两大核心热词,通过具体操作路径与代码示例,系统讲解如何一

weixin_33749131的博客 405

水下探测小白必看:单波束vs多波束声呐,5分钟搞懂核心区别

本文为水下探测新手清晰解析了单波束与多波束声呐的核心区别。单波束声呐如同精准的“手电筒”,进行逐点扫描,适用于定点测深和目标探测;而多波束声呐则像“聚光灯”,能一次性覆盖一个扇区,高效获取海底地形三维信息,是海底测绘和水下三维建模的理想选择。文章通过生动的比喻和对比表格,帮助读者快速理解两者原理、效率差异及适用场景。

linux6sysadmin的博客 1044

17、自适应和学习索引:在线物理设计调整的新维度

本文探讨了现代数据库管理系统中自适应索引和数据库裂解的新方法,通过结合学习模型与多臂老虎机(MAB)框架,实现在线物理设计调整。文章详细介绍了自适应索引的工作原理、数据库裂解技术以及如何利用机器学习进行索引选择和优化,并讨论了MAB框架在动态调整索引结构中的应用及其实际案例。

go5gopher的博客 80

PDF文档过期自毁技术全解析:从原理到实践的安全管控方案

数字版权管理(DRM)是信息安全领域的关键技术,其核心原理是通过加密与访问控制策略,对数字内容的生命周期进行精细化管理。该技术通过结合时间戳、密码学与策略服务器,实现了对文档使用时效的强制性约束,其技术价值在于为静态文件注入动态管控能力,有效防止敏感信息超范围、超时限扩散。在工程实践中,该技术广泛应用于商业合同、投标文件、预览资料等具有明确时效性与保密要求的场景。本文聚焦PDF文档的过期自毁设置,深入剖析了基于密码与时间戳的软限制、客户端JavaScript校验及专业DRM加密等多种技术方案,并提供了从Ad

weixin_34009794的博客 319

ResNet改进(20):融合Swin Transformer与ResNet

这种混合架构的设计理念是:在保留CNN强大局部特征提取能力的同时,引入Transformer的全局建模优势。我们实现的模型在ResNet18的基础上嵌入了一个简化版的Swin Transformer Block,旨在探索两种范式结合的可能性。通过在ResNet早期阶段引入Transformer模块,我们既保留了CNN强大的局部特征提取能力,又获得了Transformer的全局建模优势。本文提出的ResNet与Swin Transformer混合架构,探索了CNN与Transformer结合的可能性。

2401_82355416的博客 858
上一篇: JS 将 string 转换成为 number
下一篇: treeview默认收缩指定行和nodeId取值
澪月
博客等级 码龄11年 29粉丝 26原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值