From 28b524ae840520281a796acdba88b09ec10b9ac9 Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Mon, 28 Sep 2026 11:21:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=86=85=E5=AD=98=E7=AE=A1=E7=90=86):=20?= =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=96=87=E6=A1=A3=E5=88=87=E6=8D=A2=E4=B8=8E?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E9=87=8A=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/webui/ofdgo.js | 8 ++++++-- internal/webui/webui.go | 9 +++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/assets/webui/ofdgo.js b/assets/webui/ofdgo.js index 83cac1c..3412455 100644 --- a/assets/webui/ofdgo.js +++ b/assets/webui/ofdgo.js @@ -671,6 +671,7 @@ function addCustomDataRow(field = {Name: "", Value: ""}, sourceIndex) { } el.annotationClose.addEventListener("click", () => el.annotationNote.close()); el.annotationNote.addEventListener("close", () => { state.annotationEdit = null; }); +el.objectPicker.addEventListener("close", () => { if (!el.objectPicker.open) el.objectPickerList.replaceChildren(); }); el.penTool.addEventListener("change", () => { const tool = el.penTool.value; el.penTool.value = ""; @@ -2027,6 +2028,7 @@ async function createDocument(event) { setPan(false); state.ofdBytes = null; state.fileName = `${title.replace(/[\\/:*?"<>|]+/g, "_").replace(/\.ofd$/i, "")}.ofd`; + state.conversionWarnings = []; state.savedRevision = null; setEditorInfo(doc); el.createPanel.close(); @@ -3478,7 +3480,9 @@ async function openOFD(file, remote = null) { bytes = converted.bytes; warnings = JSON.parse(converted.warnings || "null") || []; } - const remoteDoc = remote ? await openWithCredentials(await fontManager.files(fontManager.records()), openSeq, bytes) : null; + await ensureWASM(); + if (openSeq !== state.openSeq) return; + const doc = await openWithCredentials(await fontManager.files(fontManager.userFonts), openSeq, bytes); if (openSeq !== state.openSeq) return; state.ofdBytes = bytes; state.conversionWarnings = warnings; @@ -3513,7 +3517,7 @@ async function openOFD(file, remote = null) { el.objectBoundsPanel.close(); el.outlinePanel.close(); updateControls(); - await openDocument({ ...(remoteDoc ? { doc: remoteDoc } : {}), pageIndex: remote?.pageIndex || 0, resetScroll: true, openSeq }); + await openDocument({ doc, pageIndex: remote?.pageIndex || 0, resetScroll: true, openSeq }); } catch (err) { if (openSeq === state.openSeq) { if (err.name === "AbortError") setStatus("转换已取消"); diff --git a/internal/webui/webui.go b/internal/webui/webui.go index bbb19ea..3530ccd 100644 --- a/internal/webui/webui.go +++ b/internal/webui/webui.go @@ -301,10 +301,15 @@ func newSession(reader *ofdgo.Reader, opts OpenOptions) (*Session, error) { // Close 关闭文档会话 // 返回: error 错误信息 func (s *Session) Close() error { - if s == nil || s.Reader == nil { + if s == nil { return nil } - return s.Reader.Close() + reader := s.Reader + *s = Session{} + if reader != nil { + return reader.Close() + } + return nil } // SetFonts 更新字体配置并保留文档、页面和验签结果