diff --git a/assets/webui/ofdgo.js b/assets/webui/ofdgo.js index 0f06810..b3d761e 100644 --- a/assets/webui/ofdgo.js +++ b/assets/webui/ofdgo.js @@ -4927,7 +4927,8 @@ function updateTextFonts(item, refresh = false, preserve = false) { embedded: !rich.imports.has(font) }), richKey: font }); } fontPicker.setFonts(state.textFonts, id === undefined ? null : state.textFonts.find(font => font.richKey === id), preserve); - el.textFont.placeholder = id === undefined ? "混合" : ""; + const placeholder = id === undefined ? "混合" : ""; + if (el.textFont.placeholder !== placeholder) el.textFont.placeholder = placeholder; } return; } @@ -4944,7 +4945,8 @@ function updateTextFonts(item, refresh = false, preserve = false) { } const mixed = (item?.items || item?.richText) && !id; fontPicker.setFonts(state.textFonts, mixed ? null : selected || (state.textDefaults.fontChoice === null ? null : state.textFonts[0]), preserve); - el.textFont.placeholder = mixed ? "混合" : ""; + const placeholder = mixed ? "混合" : ""; + if (el.textFont.placeholder !== placeholder) el.textFont.placeholder = placeholder; if (!id && !item?.items && !item?.richText) state.textDefaults.fontChoice = state.textFonts[Number(fontPicker.value)] || (state.textDefaults.fontChoice === null ? null : undefined); } } diff --git a/assets/webui/ofdgo_font.js b/assets/webui/ofdgo_font.js index a22f58a..7703c78 100644 --- a/assets/webui/ofdgo_font.js +++ b/assets/webui/ofdgo_font.js @@ -57,8 +57,9 @@ export class FontPicker { } setDisabled(disabled) { - this.input.disabled = this.toggle.disabled = disabled; - if (disabled) this.close(); + if (this.input.disabled !== disabled) this.input.disabled = disabled; + if (this.toggle.disabled !== disabled) this.toggle.disabled = disabled; + if (disabled && this.open) this.close(); } restore() { @@ -68,8 +69,9 @@ export class FontPicker { this.input.value = value; if (document.activeElement === this.input) this.input.select(); } - this.input.scrollLeft = 0; - this.input.title = font ? [this.input.value, this.sourceLabel(font)].filter(Boolean).join(" · ") : ""; + if (this.input.scrollLeft) this.input.scrollLeft = 0; + const title = font ? [this.input.value, this.sourceLabel(font)].filter(Boolean).join(" · ") : ""; + if (this.input.title !== title) this.input.title = title; } sourceLabel(font) { @@ -307,11 +309,12 @@ export class FontManager { async queryLocal() { try { const available = this.host ? await this.host.fonts() : await window.queryLocalFonts(); - this.catalog = available; + this.catalog = this.host ? available : available.map(font => ({ family: font.family, fullName: font.fullName, + postscriptName: font.postscriptName, style: font.style, blob: () => font.blob() })); this.catalogLoaded = true; this.permission = "granted"; this.onPermissionChange(); - return available; + return this.catalog; } catch (err) { if (err && err.name === "NotAllowedError") { this.permission = "denied"; diff --git a/internal/webui/webui.go b/internal/webui/webui.go index a9a522e..1bacbe8 100644 --- a/internal/webui/webui.go +++ b/internal/webui/webui.go @@ -758,13 +758,7 @@ func (s *Session) Details() DocumentDetails { } info.SignatureCount = len(info.Signatures) if fonts, err := s.Renderer.DeclaredFontInfos(); err == nil { - for index := range fonts { - if fonts[index].Embedded { - if face, err := s.Reader.FontFace(fonts[index].ID, 3, 0x0804); err == nil { - fonts[index].MatchedFace = face - } - } - } + s.localizeFontInfos(fonts) info.Fonts = fonts info.FontCount = len(fonts) } @@ -1017,11 +1011,24 @@ func (s *Session) scanFontInfo() bool { return false } s.fontInfos, _ = s.fontScan.Infos() + s.localizeFontInfos(s.fontInfos) s.fontsRead = true s.fontScan = nil return true } +// localizeFontInfos 统一内嵌字体在概要和完整统计中的中文名称 +// 入参: fonts 当前文档的字体诊断信息 +func (s *Session) localizeFontInfos(fonts []FontInfo) { + for index := range fonts { + if fonts[index].Embedded { + if face, err := s.Reader.FontFace(fonts[index].ID, 3, 0x0804); err == nil { + fonts[index].MatchedFace = face + } + } + } +} + // scanFontInfoBatch 为大文档批量统计字体,限制每次处理的页数与耗时 // 返回: bool 是否完成 func (s *Session) scanFontInfoBatch() bool {