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. 数据挖掘导论读书笔记10聚类分析续
  2. 基于Cobbler实现多版本系统批量部署
  3. oracle expdp 多线程,Oracle expdp 过滤和并行
  4. c语言全角半角转换函数,全角半角转换函数(示例代码)
  5. 教你 Shiro + SpringBoot 整合 JWT
  6. jsp中能循环div吗_中药面膜安全靠谱吗?
  7. [VSCode] 编辑 markdown 推荐插件
  8. 190225每日一句
  9. 密码1-分类,常用类型,密码分析
  10. 处理器核(core)、处理器(cpu)区别
  11. GPU和CPU芯片区别:为何要用GPU挖矿?
  12. android仿抖音礼物列表实现,Android仿抖音列表效果
  13. OpenCV的基本矩阵操作与示例
  14. org.apache.solr.client.solrj.impl.CloudSolrServer$RouteException: Exception writing document id xxxx
  15. 保存地理坐标信息的SLIC分割结果
  16. c语言图形化界面开发 (一)
  17. 前程无忧导出的简历是php,前程无忧怎么导出简历 前程无忧个人简历导出方法...
  18. 飞机一般是什么操作系统?
  19. 计算机蛋白组学与基因组学,基因组学和生物信息学的联系和区别?
  20. Win10系统VS2015上配置YOLOv3运行训练环境(包含OpenCv3.40安装配置,cuda9.2安装配置)

热门文章

  1. redis px nx ex xx
  2. bmvc哪个出版社出版_在出版饮食上
  3. Visio里如何画树状图?
  4. 电信光纤ipv6-- 搭建属于自己的服务器
  5. 使用Pinyin4Swift进行汉字拼音转换
  6. html实现自动图片轮播,图片轮播的实现(html__js)
  7. ESD介绍及TVS的原理和应用-USB等
  8. 什么是移动IP?简述其工作过程
  9. PS教程:利用灰度蒙版实现无级调节
  10. C++ 引用的本质是什么?