diff --git a/bower.json b/bower.json index 8cf60bd7e..e08a14db7 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "pdfjs-dist", - "version": "1.3.14", + "version": "1.3.16", "main": [ "build/pdf.js", "build/pdf.worker.js" diff --git a/build/pdf.combined.js b/build/pdf.combined.js index e431d1038..e44337c68 100644 --- a/build/pdf.combined.js +++ b/build/pdf.combined.js @@ -20,8 +20,8 @@ if (typeof PDFJS === 'undefined') { (typeof window !== 'undefined' ? window : this).PDFJS = {}; } -PDFJS.version = '1.3.14'; -PDFJS.build = 'df46b64'; +PDFJS.version = '1.3.16'; +PDFJS.build = '97cb7ff'; (function pdfjsWrapper() { // Use strict in our context only - users might not want it @@ -60,6 +60,19 @@ var AnnotationType = { LINK: 3 }; +var AnnotationFlag = { + INVISIBLE: 0x01, + HIDDEN: 0x02, + PRINT: 0x04, + NOZOOM: 0x08, + NOROTATE: 0x10, + NOVIEW: 0x20, + READONLY: 0x40, + LOCKED: 0x80, + TOGGLENOVIEW: 0x100, + LOCKEDCONTENTS: 0x200 +}; + var AnnotationBorderStyleType = { SOLID: 1, DASHED: 2, @@ -9759,8 +9772,7 @@ var Page = (function PageClosure() { for (var i = 0, n = annotationRefs.length; i < n; ++i) { var annotationRef = annotationRefs[i]; var annotation = annotationFactory.create(this.xref, annotationRef); - if (annotation && - (annotation.isViewable() || annotation.isPrintable())) { + if (annotation && (annotation.viewable || annotation.printable)) { annotations.push(annotation); } } @@ -11969,7 +11981,8 @@ var Annotation = (function AnnotationClosure() { var data = this.data = {}; data.subtype = dict.get('Subtype').name; - data.annotationFlags = dict.get('F'); + + this.setFlags(dict.get('F')); this.setRectangle(dict.get('Rect')); data.rect = this.rectangle; @@ -11986,6 +11999,64 @@ var Annotation = (function AnnotationClosure() { } Annotation.prototype = { + /** + * @return {boolean} + */ + get viewable() { + if (this.flags) { + return !this.hasFlag(AnnotationFlag.INVISIBLE) && + !this.hasFlag(AnnotationFlag.HIDDEN) && + !this.hasFlag(AnnotationFlag.NOVIEW); + } + return true; + }, + + /** + * @return {boolean} + */ + get printable() { + if (this.flags) { + return this.hasFlag(AnnotationFlag.PRINT) && + !this.hasFlag(AnnotationFlag.INVISIBLE) && + !this.hasFlag(AnnotationFlag.HIDDEN); + } + return false; + }, + + /** + * Set the flags. + * + * @public + * @memberof Annotation + * @param {number} flags - Unsigned 32-bit integer specifying annotation + * characteristics + * @see {@link shared/util.js} + */ + setFlags: function Annotation_setFlags(flags) { + if (isInt(flags)) { + this.flags = flags; + } else { + this.flags = 0; + } + }, + + /** + * Check if a provided flag is set. + * + * @public + * @memberof Annotation + * @param {number} flag - Hexadecimal representation for an annotation + * characteristic + * @return {boolean} + * @see {@link shared/util.js} + */ + hasFlag: function Annotation_hasFlag(flag) { + if (this.flags) { + return (this.flags & flag) > 0; + } + return false; + }, + /** * Set the rectangle. * @@ -12085,32 +12156,6 @@ var Annotation = (function AnnotationClosure() { } }, - isInvisible: function Annotation_isInvisible() { - var data = this.data; - return !!(data && - data.annotationFlags && // Default: not invisible - data.annotationFlags & 0x1); // Invisible - }, - - isViewable: function Annotation_isViewable() { - var data = this.data; - return !!(!this.isInvisible() && - data && - (!data.annotationFlags || - !(data.annotationFlags & 0x22)) && // Hidden or NoView - data.rect); // rectangle is necessary - }, - - isPrintable: function Annotation_isPrintable() { - var data = this.data; - return !!(!this.isInvisible() && - data && - data.annotationFlags && // Default: not printable - data.annotationFlags & 0x4 && // Print - !(data.annotationFlags & 0x2) && // Hidden - data.rect); // rectangle is necessary - }, - loadResources: function Annotation_loadResources(keys) { return new Promise(function (resolve, reject) { this.appearance.dict.getAsync('Resources').then(function (resources) { @@ -12177,8 +12222,8 @@ var Annotation = (function AnnotationClosure() { var annotationPromises = []; for (var i = 0, n = annotations.length; i < n; ++i) { - if (intent === 'display' && annotations[i].isViewable() || - intent === 'print' && annotations[i].isPrintable()) { + if (intent === 'display' && annotations[i].viewable || + intent === 'print' && annotations[i].printable) { annotationPromises.push( annotations[i].getOperatorList(partialEvaluator, task)); } @@ -12354,6 +12399,12 @@ var WidgetAnnotation = (function WidgetAnnotationClosure() { data.fieldFlags = Util.getInheritableProperty(dict, 'Ff') || 0; this.fieldResources = Util.getInheritableProperty(dict, 'DR') || Dict.empty; + // Hide unsupported Widget signatures. + if (data.fieldType === 'Sig') { + warn('unimplemented annotation type: Widget signature'); + this.setFlags(AnnotationFlag.HIDDEN); + } + // Building the full field name by collecting the field and // its ancestors 'T' data and joining them using '.'. var fieldName = []; @@ -12387,17 +12438,7 @@ var WidgetAnnotation = (function WidgetAnnotationClosure() { data.fullName = fieldName.join('.'); } - var parent = Annotation.prototype; - Util.inherit(WidgetAnnotation, Annotation, { - isViewable: function WidgetAnnotation_isViewable() { - if (this.data.fieldType === 'Sig') { - warn('unimplemented annotation type: Widget signature'); - return false; - } - - return parent.isViewable.call(this); - } - }); + Util.inherit(WidgetAnnotation, Annotation, {}); return WidgetAnnotation; })(); diff --git a/build/pdf.js b/build/pdf.js index eb6638e3a..dfaee825c 100644 --- a/build/pdf.js +++ b/build/pdf.js @@ -20,8 +20,8 @@ if (typeof PDFJS === 'undefined') { (typeof window !== 'undefined' ? window : this).PDFJS = {}; } -PDFJS.version = '1.3.14'; -PDFJS.build = 'df46b64'; +PDFJS.version = '1.3.16'; +PDFJS.build = '97cb7ff'; (function pdfjsWrapper() { // Use strict in our context only - users might not want it @@ -60,6 +60,19 @@ var AnnotationType = { LINK: 3 }; +var AnnotationFlag = { + INVISIBLE: 0x01, + HIDDEN: 0x02, + PRINT: 0x04, + NOZOOM: 0x08, + NOROTATE: 0x10, + NOVIEW: 0x20, + READONLY: 0x40, + LOCKED: 0x80, + TOGGLENOVIEW: 0x100, + LOCKEDCONTENTS: 0x200 +}; + var AnnotationBorderStyleType = { SOLID: 1, DASHED: 2, diff --git a/build/pdf.worker.js b/build/pdf.worker.js index 75fa2f857..a405a13e4 100644 --- a/build/pdf.worker.js +++ b/build/pdf.worker.js @@ -20,8 +20,8 @@ if (typeof PDFJS === 'undefined') { (typeof window !== 'undefined' ? window : this).PDFJS = {}; } -PDFJS.version = '1.3.14'; -PDFJS.build = 'df46b64'; +PDFJS.version = '1.3.16'; +PDFJS.build = '97cb7ff'; (function pdfjsWrapper() { // Use strict in our context only - users might not want it @@ -60,6 +60,19 @@ var AnnotationType = { LINK: 3 }; +var AnnotationFlag = { + INVISIBLE: 0x01, + HIDDEN: 0x02, + PRINT: 0x04, + NOZOOM: 0x08, + NOROTATE: 0x10, + NOVIEW: 0x20, + READONLY: 0x40, + LOCKED: 0x80, + TOGGLENOVIEW: 0x100, + LOCKEDCONTENTS: 0x200 +}; + var AnnotationBorderStyleType = { SOLID: 1, DASHED: 2, @@ -2872,8 +2885,7 @@ var Page = (function PageClosure() { for (var i = 0, n = annotationRefs.length; i < n; ++i) { var annotationRef = annotationRefs[i]; var annotation = annotationFactory.create(this.xref, annotationRef); - if (annotation && - (annotation.isViewable() || annotation.isPrintable())) { + if (annotation && (annotation.viewable || annotation.printable)) { annotations.push(annotation); } } @@ -5082,7 +5094,8 @@ var Annotation = (function AnnotationClosure() { var data = this.data = {}; data.subtype = dict.get('Subtype').name; - data.annotationFlags = dict.get('F'); + + this.setFlags(dict.get('F')); this.setRectangle(dict.get('Rect')); data.rect = this.rectangle; @@ -5099,6 +5112,64 @@ var Annotation = (function AnnotationClosure() { } Annotation.prototype = { + /** + * @return {boolean} + */ + get viewable() { + if (this.flags) { + return !this.hasFlag(AnnotationFlag.INVISIBLE) && + !this.hasFlag(AnnotationFlag.HIDDEN) && + !this.hasFlag(AnnotationFlag.NOVIEW); + } + return true; + }, + + /** + * @return {boolean} + */ + get printable() { + if (this.flags) { + return this.hasFlag(AnnotationFlag.PRINT) && + !this.hasFlag(AnnotationFlag.INVISIBLE) && + !this.hasFlag(AnnotationFlag.HIDDEN); + } + return false; + }, + + /** + * Set the flags. + * + * @public + * @memberof Annotation + * @param {number} flags - Unsigned 32-bit integer specifying annotation + * characteristics + * @see {@link shared/util.js} + */ + setFlags: function Annotation_setFlags(flags) { + if (isInt(flags)) { + this.flags = flags; + } else { + this.flags = 0; + } + }, + + /** + * Check if a provided flag is set. + * + * @public + * @memberof Annotation + * @param {number} flag - Hexadecimal representation for an annotation + * characteristic + * @return {boolean} + * @see {@link shared/util.js} + */ + hasFlag: function Annotation_hasFlag(flag) { + if (this.flags) { + return (this.flags & flag) > 0; + } + return false; + }, + /** * Set the rectangle. * @@ -5198,32 +5269,6 @@ var Annotation = (function AnnotationClosure() { } }, - isInvisible: function Annotation_isInvisible() { - var data = this.data; - return !!(data && - data.annotationFlags && // Default: not invisible - data.annotationFlags & 0x1); // Invisible - }, - - isViewable: function Annotation_isViewable() { - var data = this.data; - return !!(!this.isInvisible() && - data && - (!data.annotationFlags || - !(data.annotationFlags & 0x22)) && // Hidden or NoView - data.rect); // rectangle is necessary - }, - - isPrintable: function Annotation_isPrintable() { - var data = this.data; - return !!(!this.isInvisible() && - data && - data.annotationFlags && // Default: not printable - data.annotationFlags & 0x4 && // Print - !(data.annotationFlags & 0x2) && // Hidden - data.rect); // rectangle is necessary - }, - loadResources: function Annotation_loadResources(keys) { return new Promise(function (resolve, reject) { this.appearance.dict.getAsync('Resources').then(function (resources) { @@ -5290,8 +5335,8 @@ var Annotation = (function AnnotationClosure() { var annotationPromises = []; for (var i = 0, n = annotations.length; i < n; ++i) { - if (intent === 'display' && annotations[i].isViewable() || - intent === 'print' && annotations[i].isPrintable()) { + if (intent === 'display' && annotations[i].viewable || + intent === 'print' && annotations[i].printable) { annotationPromises.push( annotations[i].getOperatorList(partialEvaluator, task)); } @@ -5467,6 +5512,12 @@ var WidgetAnnotation = (function WidgetAnnotationClosure() { data.fieldFlags = Util.getInheritableProperty(dict, 'Ff') || 0; this.fieldResources = Util.getInheritableProperty(dict, 'DR') || Dict.empty; + // Hide unsupported Widget signatures. + if (data.fieldType === 'Sig') { + warn('unimplemented annotation type: Widget signature'); + this.setFlags(AnnotationFlag.HIDDEN); + } + // Building the full field name by collecting the field and // its ancestors 'T' data and joining them using '.'. var fieldName = []; @@ -5500,17 +5551,7 @@ var WidgetAnnotation = (function WidgetAnnotationClosure() { data.fullName = fieldName.join('.'); } - var parent = Annotation.prototype; - Util.inherit(WidgetAnnotation, Annotation, { - isViewable: function WidgetAnnotation_isViewable() { - if (this.data.fieldType === 'Sig') { - warn('unimplemented annotation type: Widget signature'); - return false; - } - - return parent.isViewable.call(this); - } - }); + Util.inherit(WidgetAnnotation, Annotation, {}); return WidgetAnnotation; })(); diff --git a/package.json b/package.json index b6100727f..653d09a6e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pdfjs-dist", - "version": "1.3.14", + "version": "1.3.16", "description": "Generic build of Mozilla's PDF.js library.", "keywords": [ "Mozilla",