From 86f34bbdeaec6b5154583df8c1adbaa01647705e Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Sat, 24 Oct 2026 00:56:18 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E7=BC=96=E8=BE=91=E8=83=BD=E5=8A=9B):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B5=8C=E5=85=A5=E5=AD=97=E4=BD=93=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/base/font/cff.go | 22 ++++++++++++++-------- internal/webui/webui.go | 11 +++++------ 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/internal/base/font/cff.go b/internal/base/font/cff.go index 0ccafcd..a2d3968 100644 --- a/internal/base/font/cff.go +++ b/internal/base/font/cff.go @@ -131,6 +131,14 @@ func NormalizeCFFCharstringsAt(data []byte, unitsPerEm uint16) ([]byte, error) { if err != nil { return nil, err } + if _, cid := dict[1230]; !cid { + for op := 1231; op <= 1238; op++ { + if _, exists := dict[op]; exists { + delete(dict, op) + changed = true + } + } + } if transform != nil { scale := 1 / float64(unitsPerEm) dict[1207] = []float64{scale, 0, 0, scale, 0, 0} @@ -331,10 +339,9 @@ func SanitizeCFF(data []byte) ([]byte, error) { localSubrData = data[start:end] } charStringsData := data[charStringsOff:charEnd] - delete(topDict, 1230) - delete(topDict, 1236) - delete(topDict, 1237) - delete(topDict, 1234) + for op := 1230; op <= 1238; op++ { + delete(topDict, op) + } delete(topDict, 15) delete(topDict, 16) var finalPrivData []byte @@ -494,10 +501,9 @@ func sanitizeMultiFDCFF(data []byte, hdrSize int, nameIndexData []byte, topDict } inlined[gid] = output.Bytes() } - delete(topDict, 1230) - delete(topDict, 1236) - delete(topDict, 1237) - delete(topDict, 1234) + for op := 1230; op <= 1238; op++ { + delete(topDict, op) + } delete(topDict, 15) delete(topDict, 16) delete(topDict, 1206) diff --git a/internal/webui/webui.go b/internal/webui/webui.go index b0e6e8b..0332483 100644 --- a/internal/webui/webui.go +++ b/internal/webui/webui.go @@ -3984,7 +3984,7 @@ func (e *businessEngine) changeCompositeText(page int, path ofdgo.ObjectPath, in } // editorFont 读取对象编辑使用的字体,匹配的外部字体不嵌入文档 -// 入参: args 字体资源标识 +// 入参: args 字体资源标识、可选的原字形映射标记 // 返回: any 字体数据, error 错误信息 func (e *businessEngine) editorFont(args []platformValue) (any, error) { if e.currentEditor == nil { @@ -3994,11 +3994,10 @@ func (e *businessEngine) editorFont(args []platformValue) (any, error) { if err != nil { return nil, err } - if len(args) > 1 && args[1].Bool() { - _, data, _, _, err = ofdgo.FixFontDataAggressive(data, true, false) - if err != nil { - return nil, err - } + mapped := len(args) > 1 && args[1].Bool() + _, data, _, _, err = ofdgo.FixFontDataAggressive(data, mapped, false) + if err != nil { + return nil, err } return successResult(map[string]any{"bytes": bytesToJS(data)}), nil }