From 86984f2142319d1b8d7722389b6bf002c5b15b28 Mon Sep 17 00:00:00 2001 From: Saud Fatayerji Date: Thu, 28 Sep 2023 19:31:43 +0300 Subject: [PATCH] Add elements first draft --- src/main/resources/messages_en_GB.properties | 8 +- .../resources/static/js/draggable-utils.js | 44 ++++++- .../resources/templates/add-elements.html | 121 ++++++++++++++---- .../resources/templates/other/add-image.html | 2 +- src/main/resources/templates/sign.html | 2 +- 5 files changed, 140 insertions(+), 37 deletions(-) diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index 9b111f7ef..07ab8a87f 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -25,6 +25,9 @@ downloadPdf=Download PDF text=Text font=Font element-id=Element ID +group-id=Group ID +comma-separated-values=Element values (separated by commas) +element-value=Element value selectFillter=-- Select -- pageNum=Page Number sizes.small=Small @@ -521,8 +524,11 @@ add-elements.header=Add Elements add-elements.upload=Upload Image add-elements.draw=Draw Signature add-elements.text=Text Input -add-elements.textbox=Text Box add-elements.checkbox=Check Box +add-elements.dropdown=Dropdown +add-elements.optionList=Option List +add-elements.radioButton=Radio Button +add-elements.textbox=Text Box add-elements.clear=Clear add-elements.add=Add diff --git a/src/main/resources/static/js/draggable-utils.js b/src/main/resources/static/js/draggable-utils.js index 1be0224e7..288bdb2a6 100644 --- a/src/main/resources/static/js/draggable-utils.js +++ b/src/main/resources/static/js/draggable-utils.js @@ -184,7 +184,9 @@ const DraggableUtils = { parseTransform(element) { }, - async getOverlayedPdfDocument() { + async getOverlaidPdfDocument() { + var radioGroups = new Map(); + const pdfBytes = await this.pdfDoc.getData(); const pdfDocModified = await PDFLib.PDFDocument.load(pdfBytes, { ignoreEncryption: true }); this.storePageContents(); @@ -213,18 +215,46 @@ const DraggableUtils = { // draw the image page.drawImage(pdfImageObject, translatedPositions); - } else if (draggableElement.firstChild.nodeName == "INPUT" && draggableElement.firstChild.getAttribute("type") == "textarea") { - const translatedPositions = this.rescaleForPage(page, draggableData, offsetWidth, offsetHeight); - const fieldKey = draggableElement.firstChild.getAttribute("name"); - const form = pdfDocModified.getForm(); - const field = form.createTextField(fieldKey); - field.addToPage(page, translatedPositions); } else if (draggableElement.firstChild.nodeName == "INPUT" && draggableElement.firstChild.getAttribute("type") == "checkbox") { const translatedPositions = this.rescaleForPage(page, draggableData, offsetWidth, offsetHeight); const fieldKey = draggableElement.firstChild.getAttribute("name"); const form = pdfDocModified.getForm(); const field = form.createCheckBox(fieldKey); field.addToPage(page, translatedPositions); + } else if (draggableElement.firstChild.nodeName == "DIV" && draggableElement.firstChild.getAttribute("type") == "dropdown") { + const translatedPositions = this.rescaleForPage(page, draggableData, offsetWidth, offsetHeight); + const fieldKey = draggableElement.firstChild.getAttribute("name"); + const fieldValues = JSON.parse(draggableElement.firstChild.getAttribute("values")); + const form = pdfDocModified.getForm(); + const field = form.createDropdown(fieldKey); + field.addOptions(fieldValues) + field.addToPage(page, translatedPositions); + } else if (draggableElement.firstChild.nodeName == "DIV" && draggableElement.firstChild.getAttribute("type") == "optionList") { + const translatedPositions = this.rescaleForPage(page, draggableData, offsetWidth, offsetHeight); + const fieldKey = draggableElement.firstChild.getAttribute("name"); + const fieldValues = JSON.parse(draggableElement.firstChild.getAttribute("values")); + const form = pdfDocModified.getForm(); + const field = form.createOptionList(fieldKey); + field.addOptions(fieldValues) + field.addToPage(page, translatedPositions); + } else if (draggableElement.firstChild.nodeName == "INPUT" && draggableElement.firstChild.getAttribute("type") == "radio") { // + const translatedPositions = this.rescaleForPage(page, draggableData, offsetWidth, offsetHeight); + const fieldKey = draggableElement.firstChild.getAttribute("name"); + const buttonValue = draggableElement.firstChild.getAttribute("buttonValue"); + const form = pdfDocModified.getForm(); + var radioGroup = radioGroups.get(fieldKey); + if (!radioGroup) { + radioGroup = form.createRadioGroup(fieldKey); + radioGroups.set(fieldKey, radioGroup); + } + radioGroup.addOptionToPage(buttonValue, page, translatedPositions) + console.log("added radio") + } else if (draggableElement.firstChild.nodeName == "INPUT" && draggableElement.firstChild.getAttribute("type") == "textarea") { + const translatedPositions = this.rescaleForPage(page, draggableData, offsetWidth, offsetHeight); + const fieldKey = draggableElement.firstChild.getAttribute("name"); + const form = pdfDocModified.getForm(); + const field = form.createTextField(fieldKey); + field.addToPage(page, translatedPositions); } } } diff --git a/src/main/resources/templates/add-elements.html b/src/main/resources/templates/add-elements.html index 11de314b8..7d0d07885 100644 --- a/src/main/resources/templates/add-elements.html +++ b/src/main/resources/templates/add-elements.html @@ -64,16 +64,6 @@ -
- - -
@@ -251,6 +241,92 @@
+
+ + +
+ +
+ +
+
+ + + + + + +
+ +
+ +
+
+ + + + + + +
+ +
+ +
+
+ + + + + + +
+ +
+ +
@@ -272,22 +348,6 @@ }
-
- - -
- -
- -
@@ -338,6 +398,13 @@ top: 0px; left: 0; } + .draggable-canvas > div { + width: 100%; + height: 100%; + line-height: normal; + color: rgb(var(--base-font-color)); + background-color: rgba(var(--body-background-color), 0.5); + } @@ -348,7 +415,7 @@