From 615f94bcac13e3b0d89a1779147bb0ab86531d64 Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Sat, 24 Oct 2026 21:37:31 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=89=93=E5=8D=B0=E8=83=BD=E5=8A=9B):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=89=93=E5=8D=B0=E9=A2=84=E8=A7=88=E9=80=82?= =?UTF-8?q?=E5=90=88=E7=BC=A9=E6=94=BE=E6=AE=8B=E7=95=99=E6=BB=9A=E5=8A=A8?= =?UTF-8?q?=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/webui/ofdgo_print.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/assets/webui/ofdgo_print.js b/assets/webui/ofdgo_print.js index f833ddb..4803a99 100644 --- a/assets/webui/ofdgo_print.js +++ b/assets/webui/ofdgo_print.js @@ -18,7 +18,7 @@ export class PrintDialog { this.el.Next.addEventListener("click", () => this.preview(this.side + 1)); this.el.PreviewNumber.addEventListener("change", () => this.preview(Number(this.el.PreviewNumber.value) - 1)); this.el.Zoom.addEventListener("change", () => this.resize()); - new ResizeObserver(() => this.resize()).observe(this.el.Preview); + new ResizeObserver(([entry]) => { this.previewSize = entry.contentRect; this.resize(); }).observe(this.el.Preview); window.addEventListener("afterprint", () => { if (this.waiting === "browser") this.finishPrint(); }); window.addEventListener("beforeprint", () => { if (!this.root?.children.length) { @@ -41,7 +41,7 @@ export class PrintDialog { this.duplexBeforeBooklet = this.el.Duplex.value; this.scalingBeforeBooklet = this.el.Scaling.value; try { - const saved = JSON.parse(localStorage.getItem("ofdgo.print.v2") || "null"); + const saved = JSON.parse(localStorage.getItem("ofdgo.print") || "null"); for (const [name, value] of Object.entries(saved || {})) { const node = this.el[name]; if (node?.type === "checkbox" && typeof value === "boolean") node.checked = value; @@ -280,9 +280,11 @@ export class PrintDialog { } resize() { + const fit = this.el.Zoom.value === "fit"; + this.el.Preview.style.overflow = fit ? "hidden" : "auto"; const img = this.el.Preview.querySelector("img"), side = this.layout?.sides[this.side]; - if (!img || !side) return; - const factor = this.el.Zoom.value === "fit" ? Math.min((this.el.Preview.clientWidth - 24) / side.width, (this.el.Preview.clientHeight - 24) / side.height) : Number(this.el.Zoom.value) * 96 / 25.4; + if (!img || !side || !this.previewSize) return; + const factor = fit ? Math.min(this.previewSize.width / side.width, this.previewSize.height / side.height) : Number(this.el.Zoom.value) * 96 / 25.4; img.style.width = `${Math.max(1, side.width * factor)}px`; img.style.height = `${Math.max(1, side.height * factor)}px`; } @@ -305,7 +307,7 @@ export class PrintDialog { remember() { const saved = {}; for (const [name, node] of Object.entries(this.el)) if (node.closest("#printSettings") && !["Printer", "Copies", "Paper", "Scope", "Range", "Parity", "Reverse", "Sides", "Contents", "SheetFrom", "SheetTo"].includes(name) && node.matches("input, select")) saved[name] = node.type === "checkbox" ? node.checked : node.value; - try { localStorage.setItem("ofdgo.print.v2", JSON.stringify(saved)); } catch {} + try { localStorage.setItem("ofdgo.print", JSON.stringify(saved)); } catch {} } createRoot() {