PDF.js 在线pdf阅读插件(禁止打印,下载,每页水印)
发布日期:2021-10-12 02:13:41
浏览次数:2
分类:技术文章
本文共 2120 字,大约阅读时间需要 7 分钟。
转自——
PDF.js实际运行起来的页面UI效果:
插件下载:
1.调用方法:
把generic文件放在项目代码中
系统操作指南
- 1
直接在页面里使用a标签,打开的位置为viewer.html的位置
file书写想要加载的pdf相对于viewer.html的相对地址 这样就可以把pdf加载到viewer页面里了。2.禁止打印,下载:
寻找方法
右键打印的按钮观察打印按钮的id,为print。我们可以在viewer.html中找到这个按钮,(同理还有download的下载按钮)。注释掉它们。 运行会发现页面报错,如果懒得研究js可以解决方法:
- 直接隐藏掉按钮为button添加style样式
style="visibility:hidden"
- .这时我们右键点击页面仍然会出现弹出菜单,里面有打印选项: 在js里通过oncontextmenu事件,屏蔽系统自带的右键列表。同样可以自定右键菜单制定自己想要的效果。
- 直接隐藏掉按钮为button添加style样式
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
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的开发者选项弹出。依然是那个问题:网页是面向普通客户还是有心的程序员。
参考文章:
转载地址:https://blog.csdn.net/qq_36747842/article/details/79297852 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月18日 20时37分21秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Redis入门到超神 - 01 Redis介绍与安装
2019-04-27
Redis入门到超神 - 02 Redis为什么默认16个数据库
2019-04-27
Redis入门到超神 - 03 redis.conf配置文件详解
2019-04-27
Redis入门到超神 - 04 redis的5种数据结构
2019-04-27
学会这些Logback高级知识点,程序日志性能提高几十倍(上)
2019-04-27
你不知道的Scheduled定时任务骚操作
2019-04-27
Java实现解压缩文件和文件夹
2019-04-27
自定义校验注解ConstraintValidator
2019-04-27
官方正式发布 Java 16
2019-04-27
MySQL 索引原理 图文讲解
2019-04-27
要求输出事故报告,线上日志文件却不见了!!
2019-04-27
前端嫌弃原生Swagger界面太low,于是我给她开通了超级VIP
2019-04-27
小白都能学会的Java注解与反射机制
2019-04-27
Java高并发测试框架JCStress
2019-04-27
阿里P8大神教我yaml语法,我终于不再只是使用字符串类型了
2019-04-27
Springboot 集成 i8n,两行代码实现国际化,你不想学吗?
2019-04-27
LeetCode 每日一题「判定字符是否唯一」
2019-04-27
一次完整的HTTP请求与响应涉及哪些知识?
2019-04-27