From 46684d0dd5494e66b8906c7f521770868a681a00 Mon Sep 17 00:00:00 2001 From: Jakob Wierzba Date: Wed, 20 Aug 2025 10:44:40 +0200 Subject: [PATCH 1/2] fix pdf redaction geometry calculations w.r.t. browser page zoom --- .../components/redaction/pdf-redaction.vue | 68 ++++++++++++++----- 1 file changed, 50 insertions(+), 18 deletions(-) diff --git a/frontend/javascript/components/redaction/pdf-redaction.vue b/frontend/javascript/components/redaction/pdf-redaction.vue index 0dc2d508a..5bb368e88 100644 --- a/frontend/javascript/components/redaction/pdf-redaction.vue +++ b/frontend/javascript/components/redaction/pdf-redaction.vue @@ -244,7 +244,10 @@
{ - this.drawRectangle(ctx, r) + this.drawRectangle(ctx, r, true) }) } if (this.startDrag && this.endDrag) { - this.drawRectangle(ctx, this.getRect(this.startDrag, this.endDrag)) + this.drawRectangle( + ctx, + this.getRect(this.startDrag, this.endDrag), + false + ) } }, applyActionsOnPageLoad() { @@ -1425,7 +1452,12 @@ export default { textAfter: text.replace(match, replace) } ], - rects: [[x - padding, y, width + padding * 2, height]], + rects: [[ + (x - padding) / this.scaleFactor, + y / this.scaleFactor, + (width + padding * 2) / this.scaleFactor, + height / this.scaleFactor, + ]], page: this.currentPage } }, @@ -1521,8 +1553,8 @@ export default { overflow: hidden; } -.preview--do-paint[style], -.preview--do-paint .redactContainer[style] { +.preview--do-paint.preview--text-only[style], +.preview--do-paint.preview--text-only .redactContainer[style] { user-select: text !important; } From 86c68c94e14a6911c708216d298d4d25d29cc452 Mon Sep 17 00:00:00 2001 From: Jakob Wierzba Date: Mon, 1 Sep 2025 12:37:56 +0200 Subject: [PATCH 2/2] =?UTF-8?q?fix=20redaction=20coordinates=20for=20PDF?= =?UTF-8?q?=20pages=20rotated=20by=2090=C2=B0/270=C2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascript/components/redaction/pdf-redaction.vue | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/frontend/javascript/components/redaction/pdf-redaction.vue b/frontend/javascript/components/redaction/pdf-redaction.vue index 5bb368e88..78d00f830 100644 --- a/frontend/javascript/components/redaction/pdf-redaction.vue +++ b/frontend/javascript/components/redaction/pdf-redaction.vue @@ -673,8 +673,10 @@ export default { // - but would have to limit effective canvas size to prevent crashes renderDensityFactor = Math.max(minRenderWidth / window.innerWidth, 1.0) - this.intrinsicPageWidth = page.view[2] - this.intrinsicpageHeight = page.view[3] + // is the page rotated by ±{90, 270}? + const flipWidthHeight = Math.abs(page.rotate) % 180 === 90 + this.intrinsicPageWidth = flipWidthHeight ? page.view[3] : page.view[2] + this.intrinsicPageHeight = flipWidthHeight ? page.view[2] : page.view[3] this.scaleFactor = (renderDensityFactor * maxWidth) / this.intrinsicPageWidth const viewport = page.getViewport({ scale: this.scaleFactor }) @@ -687,6 +689,9 @@ export default { const wPx = viewport.width / renderDensityFactor + 'px' const hPx = viewport.height / renderDensityFactor + 'px' console.log('PdfRedaction loadPage', { + flipWidthHeight, + page, + viewport, renderDensityFactor, scaleFactor: this.scaleFactor, maxWidth,