首页 > 解决方案 > 如何禁用 Ctrl+P 和 Ctrl+S?在 ng2-pdfjs-viewer 中。现在任何人都可以使用密钥打印或下载。任何建议将不胜感激

问题描述

我正在使用 ng2-pdfjs-viewer 库在我的 Angular 7 应用程序中显示 pdf。问题是如果打印标志为假,则打印按钮不可见,按预期工作,但用户可以右键单击或使用 CTRL+P 或 CTRL+S 并打印或下载 pdf。我想限制用户使用这些键。我尝试在我的 dom 中使用 JavaScript 方法,但这些方法不起作用,因为 PDFJS 组件重叠。毕竟我试图修改 node_modules 文件夹下的 viewer.js 文件,该文件在我的机器上对我有用,但我们使用的是 Jenkins 构建工具,它使用来自SVN 和我无法将 node_modules 提交给 SVN。Jenkins 在 package.json 的基础上使用来自服务器的库,因此在这种情况下我的修改使用较少。我也尝试了 onBeforePrint 事件,但未调用不知道为什么。请帮我解决这个问题,我们可以如何做。您的帮助将不胜感激。

谢谢。

写下我试图修改 viewer.js 的代码

我的组件中的代码

<mat-dialog-content class="my-2 d-flex justify-content-center px-2">
  <div class="w-100 h-100">
    <ng2-pdfjs-viewer [download]="isPrintable" (onBeforePrint)="beforePrint()" [print]="isPrintable" *ngIf="pdfContent" [pdfSrc]="pdfContent"></ng2-pdfjs-viewer>
</div> 
</mat-dialog-content>

viewer.js 修改

//To disable right click print added by KK on 29/08/2019
window.oncontextmenu = function () {
return false;
}
var hasAttachEvent = !!document.attachEvent;
window.addEventListener('keydown', function (event) {

  //code to prevent download and print using CTRL+S and CTRL+P added by KK on 29/08/2019
  if ((event.keyCode === 80 || event.keyCode === 83) && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) {
    //window.print();

    if (hasAttachEvent) {
      return;
    }

    event.preventDefault();

    if (event.stopImmediatePropagation) {
      event.stopImmediatePropagation();
    } else {
      event.stopPropagation();
    }

    return;
  }

}, false);
 // CTRL + P key combinations you want to disable
  @HostListener('document:keydown', ['$event']) onKeydownHandler(event: KeyboardEvent) {
    if (event.ctrlKey && event.keyCode === 80) {
      return false;
    }
  }

标签: javascriptangular7

解决方案


推荐阅读