fix: consider zoom when save element

Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
This commit is contained in:
Vitor Mattos 2025-12-02 09:15:14 -03:00
parent 5e351594b8
commit b41c4fba0c
No known key found for this signature in database
GPG key ID: 6FECE2AD4809003A
3 changed files with 70 additions and 56 deletions

94
package-lock.json generated
View file

@ -10,7 +10,7 @@
"license": "agpl",
"dependencies": {
"@fontsource/dancing-script": "^5.2.8",
"@libresign/vue-pdf-editor": "^1.4.6",
"@libresign/vue-pdf-editor": "^1.4.8",
"@marionebl/option": "^1.0.8",
"@mdi/js": "^7.4.47",
"@mdi/svg": "^7.4.47",
@ -2794,9 +2794,9 @@
"peer": true
},
"node_modules/@libresign/vue-pdf-editor": {
"version": "1.4.6",
"resolved": "https://registry.npmjs.org/@libresign/vue-pdf-editor/-/vue-pdf-editor-1.4.6.tgz",
"integrity": "sha512-Eg7UvjQQS3yGZ6YPIBgZo/PsP3oY8WZcp28O8VnMPRf/CESAZvg9CJy33f5W94l6XcwQRUUakIOVR0daBsP1UQ==",
"version": "1.4.8",
"resolved": "https://registry.npmjs.org/@libresign/vue-pdf-editor/-/vue-pdf-editor-1.4.8.tgz",
"integrity": "sha512-EU95u+MG97bjhAWDBUGqGRfjkK9lDmqvHTWUCbB6AmwU1bTEr5z385kZbpOBY+ES9e0XwN3kNt9JRAD3xLE+KA==",
"license": "MIT",
"dependencies": {
"@cantoo/pdf-lib": "^2.2.3",
@ -2887,9 +2887,9 @@
"license": "Apache-2.0"
},
"node_modules/@napi-rs/canvas": {
"version": "0.1.82",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.82.tgz",
"integrity": "sha512-FGjyUBoF0sl1EenSiE4UV2WYu76q6F9GSYedq5EiOCOyGYoQ/Owulcv6rd7v/tWOpljDDtefXXIaOCJrVKem4w==",
"version": "0.1.83",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.83.tgz",
"integrity": "sha512-f9GVB9VNc9vn/nroc9epXRNkVpvNPZh69+qzLJIm9DfruxFqX0/jsXG46OGWAJgkO4mN0HvFHjRROMXKVmPszg==",
"license": "MIT",
"optional": true,
"workspaces": [
@ -2899,22 +2899,22 @@
"node": ">= 10"
},
"optionalDependencies": {
"@napi-rs/canvas-android-arm64": "0.1.82",
"@napi-rs/canvas-darwin-arm64": "0.1.82",
"@napi-rs/canvas-darwin-x64": "0.1.82",
"@napi-rs/canvas-linux-arm-gnueabihf": "0.1.82",
"@napi-rs/canvas-linux-arm64-gnu": "0.1.82",
"@napi-rs/canvas-linux-arm64-musl": "0.1.82",
"@napi-rs/canvas-linux-riscv64-gnu": "0.1.82",
"@napi-rs/canvas-linux-x64-gnu": "0.1.82",
"@napi-rs/canvas-linux-x64-musl": "0.1.82",
"@napi-rs/canvas-win32-x64-msvc": "0.1.82"
"@napi-rs/canvas-android-arm64": "0.1.83",
"@napi-rs/canvas-darwin-arm64": "0.1.83",
"@napi-rs/canvas-darwin-x64": "0.1.83",
"@napi-rs/canvas-linux-arm-gnueabihf": "0.1.83",
"@napi-rs/canvas-linux-arm64-gnu": "0.1.83",
"@napi-rs/canvas-linux-arm64-musl": "0.1.83",
"@napi-rs/canvas-linux-riscv64-gnu": "0.1.83",
"@napi-rs/canvas-linux-x64-gnu": "0.1.83",
"@napi-rs/canvas-linux-x64-musl": "0.1.83",
"@napi-rs/canvas-win32-x64-msvc": "0.1.83"
}
},
"node_modules/@napi-rs/canvas-android-arm64": {
"version": "0.1.82",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.82.tgz",
"integrity": "sha512-bvZhN0iI54ouaQOrgJV96H2q7J3ZoufnHf4E1fUaERwW29Rz4rgicohnAg4venwBJZYjGl5Yl3CGmlAl1LZowQ==",
"version": "0.1.83",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.83.tgz",
"integrity": "sha512-TbKM2fh9zXjqFIU8bgMfzG7rkrIYdLKMafgPhFoPwKrpWk1glGbWP7LEu8Y/WrMDqTGFdRqUmuX89yQEzZbkiw==",
"cpu": [
"arm64"
],
@ -2928,9 +2928,9 @@
}
},
"node_modules/@napi-rs/canvas-darwin-arm64": {
"version": "0.1.82",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.82.tgz",
"integrity": "sha512-InuBHKCyuFqhNwNr4gpqazo5Xp6ltKflqOLiROn4hqAS8u21xAHyYCJRgHwd+a5NKmutFTaRWeUIT/vxWbU/iw==",
"version": "0.1.83",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.83.tgz",
"integrity": "sha512-gp8IDVUloPUmkepHly4xRUOfUJSFNvA4jR7ZRF5nk3YcGzegSFGeICiT4PnYyPgSKEhYAFe1Y2XNy0Mp6Tu8mQ==",
"cpu": [
"arm64"
],
@ -2944,9 +2944,9 @@
}
},
"node_modules/@napi-rs/canvas-darwin-x64": {
"version": "0.1.82",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.82.tgz",
"integrity": "sha512-aQGV5Ynn96onSXcuvYb2y7TRXD/t4CL2EGmnGqvLyeJX1JLSNisKQlWN/1bPDDXymZYSdUqbXehj5qzBlOx+RQ==",
"version": "0.1.83",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.83.tgz",
"integrity": "sha512-r4ZJxiP9OgUbdGZhPDEXD3hQ0aIPcVaywtcTXvamYxTU/SWKAbKVhFNTtpRe1J30oQ25gWyxTkUKSBgUkNzdnw==",
"cpu": [
"x64"
],
@ -2960,9 +2960,9 @@
}
},
"node_modules/@napi-rs/canvas-linux-arm-gnueabihf": {
"version": "0.1.82",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.82.tgz",
"integrity": "sha512-YIUpmHWeHGGRhWitT1KJkgj/JPXPfc9ox8oUoyaGPxolLGPp5AxJkq8wIg8CdFGtutget968dtwmx71m8o3h5g==",
"version": "0.1.83",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.83.tgz",
"integrity": "sha512-Uc6aSB05qH1r+9GUDxIE6F5ZF7L0nTFyyzq8ublWUZhw8fEGK8iy931ff1ByGFT04+xHJad1kBcL4R1ZEV8z7Q==",
"cpu": [
"arm"
],
@ -2976,9 +2976,9 @@
}
},
"node_modules/@napi-rs/canvas-linux-arm64-gnu": {
"version": "0.1.82",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.82.tgz",
"integrity": "sha512-AwLzwLBgmvk7kWeUgItOUor/QyG31xqtD26w1tLpf4yE0hiXTGp23yc669aawjB6FzgIkjh1NKaNS52B7/qEBQ==",
"version": "0.1.83",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.83.tgz",
"integrity": "sha512-eEeaJA7V5KOFq7W0GtoRVbd3ak8UZpK+XLkCgUiFGtlunNw+ZZW9Cr/92MXflGe7o3SqqMUg+f975LPxO/vsOQ==",
"cpu": [
"arm64"
],
@ -2992,9 +2992,9 @@
}
},
"node_modules/@napi-rs/canvas-linux-arm64-musl": {
"version": "0.1.82",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.82.tgz",
"integrity": "sha512-moZWuqepAwWBffdF4JDadt8TgBD02iMhG6I1FHZf8xO20AsIp9rB+p0B8Zma2h2vAF/YMjeFCDmW5un6+zZz9g==",
"version": "0.1.83",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.83.tgz",
"integrity": "sha512-cAvonp5XpbatVGegF9lMQNchs3z5RH6EtamRVnQvtoRtwbzOMcdzwuLBqDBQxQF79MFbuZNkWj3YRJjZCjHVzw==",
"cpu": [
"arm64"
],
@ -3008,9 +3008,9 @@
}
},
"node_modules/@napi-rs/canvas-linux-riscv64-gnu": {
"version": "0.1.82",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.82.tgz",
"integrity": "sha512-w9++2df2kG9eC9LWYIHIlMLuhIrKGQYfUxs97CwgxYjITeFakIRazI9LYWgVzEc98QZ9x9GQvlicFsrROV59MQ==",
"version": "0.1.83",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.83.tgz",
"integrity": "sha512-WFUPQ9qZy31vmLxIJ3MfmHw+R2g/mLCgk8zmh7maJW8snV3vLPA7pZfIS65Dc61EVDp1vaBskwQ2RqPPzwkaew==",
"cpu": [
"riscv64"
],
@ -3024,9 +3024,9 @@
}
},
"node_modules/@napi-rs/canvas-linux-x64-gnu": {
"version": "0.1.82",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.82.tgz",
"integrity": "sha512-lZulOPwrRi6hEg/17CaqdwWEUfOlIJuhXxincx1aVzsVOCmyHf+xFq4i6liJl1P+x2v6Iz2Z/H5zHvXJCC7Bwg==",
"version": "0.1.83",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.83.tgz",
"integrity": "sha512-X9YwIjsuy50WwOyYeNhEHjKHO8rrfH9M4U8vNqLuGmqsZdKua/GrUhdQGdjq7lTgdY3g4+Ta5jF8MzAa7UAs/g==",
"cpu": [
"x64"
],
@ -3040,9 +3040,9 @@
}
},
"node_modules/@napi-rs/canvas-linux-x64-musl": {
"version": "0.1.82",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.82.tgz",
"integrity": "sha512-Be9Wf5RTv1w6GXlTph55K3PH3vsAh1Ax4T1FQY1UYM0QfD0yrwGdnJ8/fhqw7dEgMjd59zIbjJQC8C3msbGn5g==",
"version": "0.1.83",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.83.tgz",
"integrity": "sha512-Vv2pLWQS8EnlSM1bstJ7vVhKA+mL4+my4sKUIn/bgIxB5O90dqiDhQjUDLP+5xn9ZMestRWDt3tdQEkGAmzq/A==",
"cpu": [
"x64"
],
@ -3056,9 +3056,9 @@
}
},
"node_modules/@napi-rs/canvas-win32-x64-msvc": {
"version": "0.1.82",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.82.tgz",
"integrity": "sha512-LN/i8VrvxTDmEEK1c10z2cdOTkWT76LlTGtyZe5Kr1sqoSomKeExAjbilnu1+oee5lZUgS5yfZ2LNlVhCeARuw==",
"version": "0.1.83",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.83.tgz",
"integrity": "sha512-K1TtjbScfRNYhq8dengLLufXGbtEtWdUXPV505uLFPovyGHzDUGXLFP/zUJzj6xWXwgUjHNLgEPIt7mye0zr6Q==",
"cpu": [
"x64"
],

View file

@ -21,7 +21,7 @@
},
"dependencies": {
"@fontsource/dancing-script": "^5.2.8",
"@libresign/vue-pdf-editor": "^1.4.6",
"@libresign/vue-pdf-editor": "^1.4.8",
"@marionebl/option": "^1.0.8",
"@mdi/js": "^7.4.47",
"@mdi/svg": "^7.4.47",
@ -69,11 +69,11 @@
"@nextcloud/eslint-config": "^8.4.2",
"@nextcloud/stylelint-config": "^3.1.1",
"@nextcloud/webpack-vue-config": "^6.3.2",
"vue-loader": "15.11.1",
"@vue/tsconfig": "^0.5.1",
"babel-loader-exclude-node-modules-except": "^1.2.1",
"esbuild-loader": "^4.4.0",
"openapi-typescript": "^7.10.1",
"vue-loader": "15.11.1",
"vue-template-compiler": "^2.7.16"
}
}

View file

@ -238,14 +238,26 @@ export default {
this.stopAddSigner()
},
addSignerToPosition(event, page) {
const rect = event.target.getBoundingClientRect()
const x = event.clientX - rect.left
const y = event.clientY - rect.top
const canvas = event.target
const rect = canvas.getBoundingClientRect()
const scale = this.$refs.pdfEditor.$refs.vuePdfEditor.scale || 1
let clickX = event.clientX - rect.left
let clickY = event.clientY - rect.top
if (Math.abs(rect.width - canvas.width) > 1) {
clickX = clickX * (canvas.width / rect.width)
clickY = clickY * (canvas.height / rect.height)
}
const normalizedX = clickX / scale
const normalizedY = clickY / scale
this.signerSelected.element = {
coordinates: {
page: page + 1,
llx: x - this.width / 2,
ury: y - this.height / 2,
llx: normalizedX - this.width / 2,
ury: normalizedY - this.height / 2,
width: this.width,
height: this.height,
},
@ -281,9 +293,11 @@ export default {
this.loading = true
this.errorConfirmRequest = ''
const visibleElements = []
const scale = this.$refs.pdfEditor.$refs.vuePdfEditor.scale || 1
Object.entries(this.$refs.pdfEditor.$refs.vuePdfEditor.allObjects).forEach(entry => {
const [pageNumber, page] = entry
const measurement = this.$refs.pdfEditor.$refs.vuePdfEditor.$refs['page' + pageNumber][0].getCanvasMeasurement()
const normalizedCanvasHeight = measurement.canvasHeight / scale
page.forEach(function(element) {
visibleElements.push({
type: 'signature',
@ -294,8 +308,8 @@ export default {
width: parseInt(element.width),
height: parseInt(element.height),
llx: parseInt(element.x),
lly: parseInt(measurement.canvasHeight - element.y),
ury: parseInt(measurement.canvasHeight - element.y - element.height),
lly: parseInt(normalizedCanvasHeight - element.y),
ury: parseInt(normalizedCanvasHeight - element.y - element.height),
urx: parseInt(element.x + element.width),
},
})