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 }