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就像创建链接一样简单.您 ...
最新文章
- 动态内存检测工具Valgrind
- CentOS基础命令大全
- vue keep-alive保存路由状态2 (高级用法,接上篇)
- 检测Product 或者Object是否被IBASE 引用的report
- 编写程序计算 sentence 中有多少个单词,并指出其中最长和最短的单词。如果有多个最长或最短的单词,则将它们全部输出。
- idea gui插件_给IDEA换个酷炫的主题,这个有点哇塞啊!
- SpringCloud配置中心内容加密
- 算术的c语言程序设计,C 程序设计:变量与算术表达式
- java 选择图片 显示不出来的_JAVA 窗体选择图片显示在窗体中
- HDU 4081 Qin Shi Huang's National Road System
- 动态规划---01背包问题
- IntelliJ IDEA快速入门 | 第九篇:IntelliJ IDEA中的常用配置(一)——设置IntelliJ IDEA的主题
- php 数据库 编程,php数据库编程(mysql mysqli pdo)
- mysql分组后查询条数_MySQL分组后,如何统计记录条数
- python电影名称词云_python爬虫——词云分析最热门电影《后来的我们》
- Python四种读取数据文件的方法
- 20行Python代码开发植物识别 app
- 嵌入式Linux热点分享网络(四)
- vscode的中文支持
- 计算机毕业设计选题\开题\项目\论文\答辩一套玩转毕业设计
热门文章
- 怎样在Excel顶部单元格操作锁定,技巧干货!Excel如何冻结首行单元格?
- 想要与北上争雄,深圳还有哪些课要补?| DT城数
- 人间不值得。在既定的规则面前,除了遵守,还能有什么?
- c语言用循环转换单词首字母,用c++实现将文本每个单词首字母转换为大写
- Allegro 常见问题
- 刑法中关于计算机犯罪的定义,界定计算机犯罪概念的原则
- 网络变压器 POE功能的检测方法
- 竞态条件的赋值_Go 译文之竞态检测器 race
- PC端微信一直显示“正在登录”问题处理
- CSS 特异度、继承、求值过程简介