PDF.js 在线pdf阅读插件(禁止打印,下载,每页水印)
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可以解决方法:
- 直接隐藏掉按钮为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 topdiv.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.csdn.net/xiangcns/article/details/42089189
PDF.js 在线pdf阅读插件(禁止打印,下载,每页水印)相关推荐
- 利用PDF.JS插件解决了本地pdf文件在线浏览问题(根据需要隐藏下载功能,只保留打印功能)
利用PDF.JS插件解决了本地pdf文件在线浏览问题(根据需要隐藏下载功能,只保留打印功能) 参考文章: (1)利用PDF.JS插件解决了本地pdf文件在线浏览问题(根据需要隐藏下载功能,只保留打印功 ...
- pdf.js在线查看(文档流/地址)
pdf.js在线查看(文档流/地址) 工作中需要在移动端在线查看pdf文件,但由于pdf文件存放在第三方的服务器中,由于各种原因无法直接返回pdf文件地址给前台,后来确定返给前台是一个base64的流 ...
- 【iframe结合pdf.js实现pdf的预览/下载及打印功能】
iframe结合pdf.js实现pdf的预览/下载及打印 1.[下载pdf.js](http://mozilla.github.io/pdf.js/getting_started/#download) ...
- html页面阅读pdf,HTML5在线PDF格式文件阅读器
pdf.js是一款基于HTML5的PDF(Portable Document Forma)格式文件的网页阅读器.pdf.js由 Mozilla Labs 社区支持,目标是创建一个通用的.基于WEB平台 ...
- 如何在项目中使用pdf.js查看PDF文件
最近在做后台管理类的系统,需要在web页面阅读pdf文件.发现一个很好用的插件 pdf.js,简单的介绍一下 官方文档地址:http://mozilla.github.io/pdf.js/ 在线演示地 ...
- vue里使用pdf.js实现pdf文件的预览功能
引言:经过上一篇文章的测试,发现了以下问题: 兼容性不好 不适用多语言场景(不能共用一套) 会出现跨域问题 难于监控阅读状态 不能控制下载状态 在基于vue开发的移动项目中,如果预览的pdf数量不是很 ...
- Vue项目中利用pdf.js实现pdf内容滑选文字展示与搜索功能
Vue项目中利用pdf.js实现pdf内容滑选文字展示与搜索功能 需求:在pdf中鼠标滑动选中一段文字,将选中文字展示到input框中(pdf在iframe中) 完成效果: 关于pdf的引用:我是直接 ...
- Vue3 + PDF.js 实现 PDF 预览
文章目录 1 前言 2 PDF 预览测试 2.1 下载 PDF.js 2.2 window.open 直接打开 2.3 弹框形式打开 3 修改配置项 3.1 修改主题色为暗色系 3.2 修改默认语言为 ...
- html 提取pdf,使用PDF.js从PDF中提取文本(2019)
正如标题所说,我正在尝试使用由Mozilla维护的PDF.js从PDF中提取文本.我知道前面关于stackoverflow的问题,但我不知道从哪里开始. 我试着跟着这个 article 这件事我需要帮 ...
- pdf.js —— 在线预览下载打印pdf文件插件,实现的两种方式
ViewerJS简介 ViewerJS的繁重工作是由这些令人敬畏的项目完成的: PDF.js(由Mozilla提供) WebODF(由KO GmbH提供) 运行ViewerJS就像创建链接一样简单.您 ...
最新文章
- 数据挖掘导论读书笔记10聚类分析续
- 基于Cobbler实现多版本系统批量部署
- oracle expdp 多线程,Oracle expdp 过滤和并行
- c语言全角半角转换函数,全角半角转换函数(示例代码)
- 教你 Shiro + SpringBoot 整合 JWT
- jsp中能循环div吗_中药面膜安全靠谱吗?
- [VSCode] 编辑 markdown 推荐插件
- 190225每日一句
- 密码1-分类,常用类型,密码分析
- 处理器核(core)、处理器(cpu)区别
- GPU和CPU芯片区别:为何要用GPU挖矿?
- android仿抖音礼物列表实现,Android仿抖音列表效果
- OpenCV的基本矩阵操作与示例
- org.apache.solr.client.solrj.impl.CloudSolrServer$RouteException: Exception writing document id xxxx
- 保存地理坐标信息的SLIC分割结果
- c语言图形化界面开发 (一)
- 前程无忧导出的简历是php,前程无忧怎么导出简历 前程无忧个人简历导出方法...
- 飞机一般是什么操作系统?
- 计算机蛋白组学与基因组学,基因组学和生物信息学的联系和区别?
- Win10系统VS2015上配置YOLOv3运行训练环境(包含OpenCv3.40安装配置,cuda9.2安装配置)