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 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阅读插件(禁止打印,下载,每页水印)相关推荐

  1. 利用PDF.JS插件解决了本地pdf文件在线浏览问题(根据需要隐藏下载功能,只保留打印功能)

    利用PDF.JS插件解决了本地pdf文件在线浏览问题(根据需要隐藏下载功能,只保留打印功能) 参考文章: (1)利用PDF.JS插件解决了本地pdf文件在线浏览问题(根据需要隐藏下载功能,只保留打印功 ...

  2. pdf.js在线查看(文档流/地址)

    pdf.js在线查看(文档流/地址) 工作中需要在移动端在线查看pdf文件,但由于pdf文件存放在第三方的服务器中,由于各种原因无法直接返回pdf文件地址给前台,后来确定返给前台是一个base64的流 ...

  3. 【iframe结合pdf.js实现pdf的预览/下载及打印功能】

    iframe结合pdf.js实现pdf的预览/下载及打印 1.[下载pdf.js](http://mozilla.github.io/pdf.js/getting_started/#download) ...

  4. html页面阅读pdf,HTML5在线PDF格式文件阅读器

    pdf.js是一款基于HTML5的PDF(Portable Document Forma)格式文件的网页阅读器.pdf.js由 Mozilla Labs 社区支持,目标是创建一个通用的.基于WEB平台 ...

  5. 如何在项目中使用pdf.js查看PDF文件

    最近在做后台管理类的系统,需要在web页面阅读pdf文件.发现一个很好用的插件 pdf.js,简单的介绍一下 官方文档地址:http://mozilla.github.io/pdf.js/ 在线演示地 ...

  6. vue里使用pdf.js实现pdf文件的预览功能

    引言:经过上一篇文章的测试,发现了以下问题: 兼容性不好 不适用多语言场景(不能共用一套) 会出现跨域问题 难于监控阅读状态 不能控制下载状态 在基于vue开发的移动项目中,如果预览的pdf数量不是很 ...

  7. Vue项目中利用pdf.js实现pdf内容滑选文字展示与搜索功能

    Vue项目中利用pdf.js实现pdf内容滑选文字展示与搜索功能 需求:在pdf中鼠标滑动选中一段文字,将选中文字展示到input框中(pdf在iframe中) 完成效果: 关于pdf的引用:我是直接 ...

  8. Vue3 + PDF.js 实现 PDF 预览

    文章目录 1 前言 2 PDF 预览测试 2.1 下载 PDF.js 2.2 window.open 直接打开 2.3 弹框形式打开 3 修改配置项 3.1 修改主题色为暗色系 3.2 修改默认语言为 ...

  9. html 提取pdf,使用PDF.js从PDF中提取文本(2019)

    正如标题所说,我正在尝试使用由Mozilla维护的PDF.js从PDF中提取文本.我知道前面关于stackoverflow的问题,但我不知道从哪里开始. 我试着跟着这个 article 这件事我需要帮 ...

  10. pdf.js —— 在线预览下载打印pdf文件插件,实现的两种方式

    ViewerJS简介 ViewerJS的繁重工作是由这些令人敬畏的项目完成的: PDF.js(由Mozilla提供) WebODF(由KO GmbH提供) 运行ViewerJS就像创建链接一样简单.您 ...

最新文章

  1. 动态内存检测工具Valgrind
  2. CentOS基础命令大全
  3. vue keep-alive保存路由状态2 (高级用法,接上篇)
  4. 检测Product 或者Object是否被IBASE 引用的report
  5. 编写程序计算 sentence 中有多少个单词,并指出其中最长和最短的单词。如果有多个最长或最短的单词,则将它们全部输出。
  6. idea gui插件_给IDEA换个酷炫的主题,这个有点哇塞啊!
  7. SpringCloud配置中心内容加密
  8. 算术的c语言程序设计,C 程序设计:变量与算术表达式
  9. java 选择图片 显示不出来的_JAVA 窗体选择图片显示在窗体中
  10. HDU 4081 Qin Shi Huang's National Road System
  11. 动态规划---01背包问题
  12. IntelliJ IDEA快速入门 | 第九篇:IntelliJ IDEA中的常用配置(一)——设置IntelliJ IDEA的主题
  13. php 数据库 编程,php数据库编程(mysql mysqli pdo)
  14. mysql分组后查询条数_MySQL分组后,如何统计记录条数
  15. python电影名称词云_python爬虫——词云分析最热门电影《后来的我们》
  16. Python四种读取数据文件的方法
  17. 20行Python代码开发植物识别 app
  18. 嵌入式Linux热点分享网络(四)
  19. vscode的中文支持
  20. 计算机毕业设计选题\开题\项目\论文\答辩一套玩转毕业设计

热门文章

  1. 怎样在Excel顶部单元格操作锁定,技巧干货!Excel如何冻结首行单元格?
  2. 想要与北上争雄,深圳还有哪些课要补?| DT城数
  3. 人间不值得。在既定的规则面前,除了遵守,还能有什么?
  4. c语言用循环转换单词首字母,用c++实现将文本每个单词首字母转换为大写
  5. Allegro 常见问题
  6. 刑法中关于计算机犯罪的定义,界定计算机犯罪概念的原则
  7. 网络变压器 POE功能的检测方法
  8. 竞态条件的赋值_Go 译文之竞态检测器 race
  9. PC端微信一直显示“正在登录”问题处理
  10. CSS 特异度、继承、求值过程简介