From a6163a2896c8308b10af28067bb26d9a7db31344 Mon Sep 17 00:00:00 2001 From: Stephan Rauh <3045767+stephanrauh@users.noreply.github.com> Date: Tue, 17 Oct 2023 18:33:28 +0200 Subject: [PATCH] stephanrauh/ngx-extended-pdf-viewer#1887 include the form values passed by [formData] in printed and downloaded PDF files; stop hiding the annotation layer when the print window shows #1887 include the form values passed by [formData] in printed and downloaded PDF files; stop hiding the annotation layer when the print window shows --- src/display/annotation_layer.js | 61 ++++++++++++++++---------- web/annotation_layer_builder.js | 5 ++- web/ngx-extended-pdf-viewer-version.js | 2 +- 3 files changed, 43 insertions(+), 25 deletions(-) diff --git a/src/display/annotation_layer.js b/src/display/annotation_layer.js index 25a00d02c2601..90bb760341dcc 100644 --- a/src/display/annotation_layer.js +++ b/src/display/annotation_layer.js @@ -1157,12 +1157,16 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement { // NOTE: We cannot set the values using `element.value` below, since it // prevents the AnnotationLayer rasterizer in `test/driver.js` // from parsing the elements correctly for the reference tests. - // #1737 modified by ngx-extended-pdf-viewer + // #1737 + #1887 modified by ngx-extended-pdf-viewer const angularData = window.getFormValueFromAngular(this.data.fieldName); - const storedData = angularData.value ? angularData : storage.getValue(id, { + const formData = storage.getValue(id, { value: this.data.fieldValue }); - // #1737 end of modification by ngx-extended-pdf-viewer + const storedData = angularData.value ? angularData : formData; + if (angularData !== formData) { + storage.setValue(id, { value: angularData.value }); + } + // #1737 + #1887 end of modification by ngx-extended-pdf-viewer let textContent = storedData.value || ""; const maxLen = storage.getValue(id, { charLimit: this.data.maxLen, @@ -1507,8 +1511,11 @@ class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { const data = this.data; const id = data.id; - // #1737 modified by ngx-extended-pdf-viewer + // #1737, #1887 modified by ngx-extended-pdf-viewer const angularData = window.getFormValueFromAngular(this.data.fieldName); + const formValue = storage.getValue(id, { + value: data.exportValue === data.fieldValue, + }).value; let angularValue = undefined; if (angularData.value) { angularValue = angularData.value === true || angularData.value === data.exportValue; @@ -1516,16 +1523,15 @@ class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { let value = angularValue !== undefined ? angularValue - : storage.getValue(id, { - value: data.exportValue === data.fieldValue, - }).value; - // #1737 end of modification by ngx-extended-pdf-viewer - if (typeof value === "string") { + : formValue; + // #1737, #1887 end of modification by ngx-extended-pdf-viewer + let updateAngularValueNecessary = false; + if (typeof value === "string" || angularData !== formValue) { // The value has been changed through js and set in annotationStorage. value = value !== "Off"; storage.setValue(id, { value }); // #1737 modified by ngx-extended-pdf-viewer - window.updateAngularFormValue(id, { value }); + updateAngularValueNecessary = true; // #1737 end of modification by ngx-extended-pdf-viewer } @@ -1571,7 +1577,12 @@ class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { // #1737 modified by ngx-extended-pdf-viewer window.registerAcroformField(id, element, value ? data.exportValue : false); element.addEventListener("updateFromAngular", newvalue => storage.setValue(id, { value: newvalue.detail })); - // #1737 end of modification by ngx-extended-pdf-viewer + // #1887 end of modification by ngx-extended-pdf-viewer + if (updateAngularValueNecessary) { + window.updateAngularFormValue(id, { value }); + } + // #1887 end of modification by ngx-extended-pdf-viewer + if (this.enableScripting && this.hasJSActions) { element.addEventListener("updatefromsandbox", jsEvent => { const actions = { @@ -1620,22 +1631,22 @@ class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement { const storage = this.annotationStorage; const data = this.data; const id = data.id; - // #1737 modified by ngx-extended-pdf-viewer + // #1737, #1887 modified by ngx-extended-pdf-viewer const angularData = window.getFormValueFromAngular(this.data.fieldName); - + const formValue = storage.getValue(id, { + value: data.fieldValue === data.buttonValue, + }).value; let value = angularData.value ?? - storage.getValue(id, { - value: data.fieldValue === data.buttonValue, - }).value; - if (typeof value === "string") { + formValue; + if (typeof value === "string" || angularData !== formValue) { // The value has been changed through js and set in annotationStorage. value = value === data.buttonValue; // TODO: this line in pdf.js seems to be buggy storage.setValue(id, { value }); } else if (value) { window.updateAngularFormValue(id, { value: data.buttonValue }); } - // #1737 end of modification by ngx-extended-pdf-viewer + // #1737, #1887 end of modification by ngx-extended-pdf-viewer const element = document.createElement("input"); GetElementsByNameSet.add(element); @@ -1760,15 +1771,19 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { const storage = this.annotationStorage; const id = this.data.id; - // #1737 modified by ngx-extended-pdf-viewer + // #1737, #1887 modified by ngx-extended-pdf-viewer const angularData = window.getFormValueFromAngular(this.data.fieldName); + const formData = storage.getValue(id, { + value: this.data.fieldValue, + }); const storedData = angularData.value ? angularData - : storage.getValue(id, { - value: this.data.fieldValue, - }); - // #1737 end of modification by ngx-extended-pdf-viewer + : formData; + if (angularData !== formData) { + storage.setValue(id, { value: angularData.value }); + } + // #1737, #1887 end of modification by ngx-extended-pdf-viewer const selectElement = document.createElement("select"); GetElementsByNameSet.add(selectElement); diff --git a/web/annotation_layer_builder.js b/web/annotation_layer_builder.js index b653a6b0d2926..af14017d8fcec 100644 --- a/web/annotation_layer_builder.js +++ b/web/annotation_layer_builder.js @@ -178,7 +178,10 @@ class AnnotationLayerBuilder { if (!this.div) { return; } - this.div.hidden = true; + // #1887 modified by ngx-extended-pdf-viewer + if (!document.querySelector("[data-pdfjsprinting=true]")) { + this.div.hidden = true; + } } #updatePresentationModeState(state) { diff --git a/web/ngx-extended-pdf-viewer-version.js b/web/ngx-extended-pdf-viewer-version.js index 33ed4b4fc396b..ce50aadfa0716 100644 --- a/web/ngx-extended-pdf-viewer-version.js +++ b/web/ngx-extended-pdf-viewer-version.js @@ -1 +1 @@ -export const ngxExtendedPdfViewerVersion = '18.0.0-beta.9'; \ No newline at end of file +export const ngxExtendedPdfViewerVersion = '18.1.1'; \ No newline at end of file