·设为首页收藏本站📧邮箱修改🎁免费下载专区💎积分✅卡密📒收藏夹👽聊天室
返回列表 发布新帖

pdf.js屏蔽复制、打印、下载功能并加水印

620 0
发表于 2022-10-29 12:18:55 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
屏蔽功能按钮
新版 pdf.js 使用style设置隐藏无效,经研究可以通过 setAttribute 较好的解决。
viewer.html 的<head>最后,添加:
  1. <script>function onBodyLoad(){    var appConfig = PDFViewerApplication.appConfig;    appConfig.toolbar.viewBookmark.setAttribute('hidden', 'true');   appConfig.secondaryToolbar.viewBookmarkButton.setAttribute('hidden', 'true');    appConfig.toolbar.openFile.setAttribute('hidden', 'true');    appConfig.secondaryToolbar.openFileButton.setAttribute('hidden', 'true');    appConfig.toolbar.download.setAttribute('hidden', 'true');    appConfig.secondaryToolbar.downloadButton.setAttribute('hidden', 'true');    appConfig.toolbar.print.setAttribute('hidden', 'true');    appConfig.secondaryToolbar.printButton.setAttribute('hidden', 'true');}</script>
复制代码
<body> 添加下列属性:onload="onBodyLoad()"
这样,打开、打印、下载按钮就消失了



解决了下载按钮之后,我发现鼠标焦点在iframe里时 使用ctrl+s也能下载文件。解决这个问题同样也是找到pdf/web/viewer.js,注释下载代码就ok了。(不同版本所在行数可能不同,根据行数找不到时请根据内容搜索)
pdf.js屏蔽复制、打印、下载功能并加水印 pdf,屏蔽,复制,打印,下载



这样用户就无法下载pdf文件了,我们的目的就达到了


禁用鼠标选择、鼠标右键等操作,修改viewer.jsp的body标签,添加属性改为如下内容:
  1. <body tabindex="1" class="loadingInProgress"        tabindex="1" class="loadingInProgress"        oncontextmenu="return false;" leftMargin="0" topMargin="0"        oncopy="return false;" oncut="return false;"        onselectstart="return false">
复制代码
添加全局水印
利用canvas添加全局水印,其实就是在viewer.js中遍历文件元素节点的同时,创建水印元素节点并插入到每一页的位置。原文参考


1.在viewer.js中找到如下内容,位置大概在11973行前后:
  1. if (this.textLayerMode !== _ui_utils.TextLayerMode.DISABLE && this.textLayerFactory) {   var textLayerDiv = document.createElement('div');   textLayerDiv.className = 'textLayer';   textLayerDiv.style.width = canvasWrapper.style.width;   textLayerDiv.style.height = canvasWrapper.style.height;   //---这里就是要插入水印的位置---   if (this.annotationLayer && this.annotationLayer.div) {      div.insertBefore(textLayerDiv, this.annotationLayer.div);   } else {      div.appendChild(textLayerDiv);   }   textLayer = this.textLayerFactory.createTextLayerBuilder(textLayerDiv, this.id - 1, this.viewport, this.textLayerMode === _ui_utils.TextLayerMode.ENABLE_ENHANCE);}
复制代码
  1. if (this.textLayerMode !== _ui_utils.TextLayerMode.DISABLE && this.textLayerFactory) {    var textLayerDiv = document.createElement('div');    textLayerDiv.className = 'textLayer';    textLayerDiv.style.width = canvasWrapper.style.width;    textLayerDiv.style.height = canvasWrapper.style.height;    //---------------------水印开始---------------------    var cover = document.createElement('div');    cover.className = "cover";    cover.innerText = "内容保密,请勿复制或下载"; //这里就是水印内容,如果要按照不同的文件显示不同的水印,可参考pdf文件路径的传值方式,在viewer.jsp中head部位接收后台传值并在这里使用    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 coverEle = document.getElementsByClassName('cover'),size = 0,        nowWidth = +canvasWrapper.style.width.split("p")[0],        //714为100%时,每页的宽度。对比当前的宽度可以计算出页面变化后字体的数值        size = 50 * nowWidth / 714 + "px";    for(var i=0, len=coverEle.length; i<len; i++){        coverEle[i].style.fontSize = size;        coverEle[i].style.width = canvasWrapper.style.width;        coverEle[i].style.height = canvasWrapper.style.height / 10;    }    //---------------------水印结束---------------------    if (this.annotationLayer && this.annotationLayer.div) {        div.insertBefore(textLayerDiv, this.annotationLayer.div);    } else {        div.appendChild(textLayerDiv);    }    textLayer = this.textLayerFactory.createTextLayerBuilder(textLayerDiv, this.id - 1, this.viewport, this.textLayerMode === _ui_utils.TextLayerMode.ENABLE_ENHANCE);}
复制代码
3.最后在viewer.css文件开始位置添加水印的css样式完成水印显示:
  1. /* 水印遮罩层 */.cover{  z-index: 100;  position: absolute;  top: 41%;  left: 1%;  transform: rotate(330deg);  text-align: center;  font-size: 310%;  padding-left: 30px;  letter-spacing: 18px;  color:rgba(162, 162, 162, 0.4);}
复制代码
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

创宇盾启航版免费网站防御网站加速服务
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.15.225.164,GMT+8, 2024-12-23 04:21 , Processed in 0.229307 second(s), 78 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2024 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表