From 038ac2aed06d8128c897adc5598cbc2678242f93 Mon Sep 17 00:00:00 2001 From: TekH Date: Tue, 28 Oct 2025 12:59:49 +0100 Subject: [PATCH] fix(annotations): correct signature frame mapping by filtering by pageIndex - Updated `mapSignature` to filter signature annotations by `pageIndex` when finding nearest elements. - Ensures correct association of frames and signature data for each page. - Prevents errors caused by cross-page annotation references. --- EnvelopeGenerator.Web/wwwroot/js/annotation.js | 8 ++++++-- EnvelopeGenerator.Web/wwwroot/js/util.js | 2 +- EnvelopeGenerator.Web/wwwroot/js/util.min.js | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/EnvelopeGenerator.Web/wwwroot/js/annotation.js b/EnvelopeGenerator.Web/wwwroot/js/annotation.js index 69837322..9bfa23ed 100644 --- a/EnvelopeGenerator.Web/wwwroot/js/annotation.js +++ b/EnvelopeGenerator.Web/wwwroot/js/annotation.js @@ -331,7 +331,9 @@ function mapSignature(iJSON) { // frames ...iJSON.annotations.filter(annot => annot.description === 'FRAME').map((annot) => { - const preElement = findNearest(annot, e => e.bbox[0], e => e.bbox[1], ...iJSON.annotations.filter(field => field.id.includes("signature"))); + const preElement = findNearest(annot, e => e.bbox[0], e => e.bbox[1], iJSON.annotations.filter( + field => field.id.includes("signature") && field.pageIndex === annot.pageIndex + )); const idPartsOfPre = preElement.id.split('#'); return { elementId: Number(idPartsOfPre[2]), @@ -343,7 +345,9 @@ function mapSignature(iJSON) { // signatures ...iJSON.annotations.filter(annot => annot.isSignature).map(annot => { - const preElement = findNearest(annot, e => e.bbox[0], e => e.bbox[1], ...iJSON.annotations.filter(field => field.id.includes("signature"))); + const preElement = findNearest(annot, e => e.bbox[0], e => e.bbox[1], iJSON.annotations.filter( + field => field.id.includes("signature") && field.pageIndex === annot.pageIndex + )); const idPartsOfPre = preElement.id.split('#'); let value; diff --git a/EnvelopeGenerator.Web/wwwroot/js/util.js b/EnvelopeGenerator.Web/wwwroot/js/util.js index c4f137e3..457dbdcf 100644 --- a/EnvelopeGenerator.Web/wwwroot/js/util.js +++ b/EnvelopeGenerator.Web/wwwroot/js/util.js @@ -14,7 +14,7 @@ function detailedCurrentDate() { }).format(); } -function findNearest(origin, getX, getY, ...dests) { +function findNearest(origin, getX, getY, dests) { const distanceToOrigin = (point) => Math.sqrt((getX(origin) - getX(point))**2 + (getY(origin) - getY(point))**2); return dests.reduce( (nearest, dest) => { diff --git a/EnvelopeGenerator.Web/wwwroot/js/util.min.js b/EnvelopeGenerator.Web/wwwroot/js/util.min.js index 8e71ab49..cf03a930 100644 --- a/EnvelopeGenerator.Web/wwwroot/js/util.min.js +++ b/EnvelopeGenerator.Web/wwwroot/js/util.min.js @@ -1 +1 @@ -function detailedCurrentDate(){return new Intl.DateTimeFormat("de-DE",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:"shortOffset"}).format()}function findNearest(n,t,i,...r){const u=r=>Math.sqrt((t(n)-t(r))**2+(i(n)-i(r))**2);return r.reduce((n,t)=>{const i=u(t);return inew Uint8Array(Array.from(atob(n),n=>n.charCodeAt(0))).buffer,getLocaleDateString=()=>(new Date).toLocaleDateString("de-DE"); \ No newline at end of file +function detailedCurrentDate(){return new Intl.DateTimeFormat("de-DE",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:"shortOffset"}).format()}function findNearest(n,t,i,r){const u=r=>Math.sqrt((t(n)-t(r))**2+(i(n)-i(r))**2);return r.reduce((n,t)=>{const i=u(t);return inew Uint8Array(Array.from(atob(n),n=>n.charCodeAt(0))).buffer,getLocaleDateString=()=>(new Date).toLocaleDateString("de-DE"); \ No newline at end of file