diff --git a/src/core.js b/src/core.js index c8c59016e..f8556a3da 100644 --- a/src/core.js +++ b/src/core.js @@ -542,6 +542,7 @@ var PDFDocument = (function PDFDocumentClosure() { var docInfo = { PDFFormatVersion: this.pdfFormatVersion, IsTextCopyDisabled: encrypt ? encrypt.disableTextCopy : false, + IsPrintDisabled: encrypt ? encrypt.disablePrint : false, IsAcroFormPresent: !!this.acroForm }; if (this.xref.trailer.has('Info')) { diff --git a/src/crypto.js b/src/crypto.js index 37e26b1fa..76cee2691 100644 --- a/src/crypto.js +++ b/src/crypto.js @@ -562,6 +562,7 @@ var CipherTransformFactory = (function CipherTransformFactoryClosure() { var userPassword = stringToBytes(dict.get('U')); var flags = dict.get('P'); this.disableTextCopy = !(flags & 16); + this.disablePrint = !(flags & 4); var revision = dict.get('R'); var encryptMetadata = algorithm == 4 && // meaningful when V is 4 dict.get('EncryptMetadata') !== false; // makes true as default value diff --git a/web/viewer.css b/web/viewer.css index c093aaaea..fb771f286 100644 --- a/web/viewer.css +++ b/web/viewer.css @@ -1358,6 +1358,10 @@ canvas { margin: 0; } + #viewerContainer.print-protection { + display: none; + } + .page { float: left; display: none; diff --git a/web/viewer.js b/web/viewer.js index a46bc8d5f..d631dbe13 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -1360,6 +1360,20 @@ var PDFView = { document.getElementById('viewerContainer').classList .remove('copy-protection'); } + + if (info.IsPrintDisabled) { + if (PDFView.supportsPrinting) { + document.getElementById('print').classList.add('hidden'); + } + document.getElementById('viewerContainer').classList + .add('print-protection'); + } else { + if (PDFView.supportsPrinting) { + document.getElementById('print').classList.remove('hidden'); + } + document.getElementById('viewerContainer').classList + .remove('print-protection'); + } }); }, @@ -1626,6 +1640,9 @@ var PDFView = { }, beforePrint: function pdfViewSetupBeforePrint() { + if (this.documentInfo.IsPrintDisabled) { + return; + } if (!this.supportsPrinting) { var printMessage = mozL10n.get('printing_not_supported', null, 'Warning: Printing is not fully supported by this browser.');