From 6f2706fad6d5181da087df07423b64ce0192abdd Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Wed, 29 Jan 2025 12:35:09 +0100 Subject: [PATCH] Support the password field-flag in TextWidgetAnnotation (issue 19389) --- src/core/annotation.js | 6 +++--- src/display/annotation_layer.js | 2 +- test/pdfs/.gitignore | 1 + test/pdfs/issue19389.pdf | Bin 0 -> 6931 bytes test/test_manifest.json | 8 ++++++++ 5 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 test/pdfs/issue19389.pdf diff --git a/src/core/annotation.js b/src/core/annotation.js index c87f99f4b..75d8b5c1a 100644 --- a/src/core/annotation.js +++ b/src/core/annotation.js @@ -1888,6 +1888,7 @@ class WidgetAnnotation extends Annotation { data.fieldFlags = 0; } + data.password = this.hasFieldFlag(AnnotationFieldFlag.PASSWORD); data.readOnly = this.hasFieldFlag(AnnotationFieldFlag.READONLY); data.required = this.hasFieldFlag(AnnotationFieldFlag.REQUIRED); data.hidden = @@ -2261,8 +2262,7 @@ class WidgetAnnotation extends Annotation { } async _getAppearance(evaluator, task, intent, annotationStorage) { - const isPassword = this.hasFieldFlag(AnnotationFieldFlag.PASSWORD); - if (isPassword) { + if (this.data.password) { return null; } const storageEntry = annotationStorage?.get(this.data.id); @@ -2962,7 +2962,7 @@ class TextWidgetAnnotation extends WidgetAnnotation { value: this.data.fieldValue, defaultValue: this.data.defaultFieldValue || "", multiline: this.data.multiLine, - password: this.hasFieldFlag(AnnotationFieldFlag.PASSWORD), + password: this.data.password, charLimit: this.data.maxLen, comb: this.data.comb, editable: !this.data.readOnly, diff --git a/src/display/annotation_layer.js b/src/display/annotation_layer.js index 386629672..1b55f3d51 100644 --- a/src/display/annotation_layer.js +++ b/src/display/annotation_layer.js @@ -1286,7 +1286,7 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement { } } else { element = document.createElement("input"); - element.type = "text"; + element.type = this.data.password ? "password" : "text"; element.setAttribute("value", fieldFormattedValues ?? textContent); if (this.data.doNotScroll) { element.style.overflowX = "hidden"; diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index f9e0cd705..3001e51b4 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -609,6 +609,7 @@ !issue16021.pdf !bug1770750.pdf !issue16063.pdf +!issue19389.pdf !issue16067.pdf !bug1820909.1.pdf !issue16221.pdf diff --git a/test/pdfs/issue19389.pdf b/test/pdfs/issue19389.pdf new file mode 100644 index 0000000000000000000000000000000000000000..44a95188e84e8b4ad53edc305f6d14a60f71293d GIT binary patch literal 6931 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