From 6f23085742f56f82769e089788ac21fc4078475a Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Sat, 12 Sep 2026 02:12:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=86=85=E5=AD=98=E5=8D=A0=E7=94=A8):=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A8=A1=E6=9D=BF=E5=A4=8D=E7=94=A8=E4=B8=8E?= =?UTF-8?q?=E5=AD=97=E4=BD=93=E6=A3=80=E6=9F=A5=EF=BC=8C=E5=87=8F=E5=B0=91?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E8=A7=A3=E6=9E=90=E5=92=8C=E5=86=85=E5=AD=98?= =?UTF-8?q?=E5=88=86=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ofdgo_font_info.go | 12 ++++++++---- ofdgo_renderer_layer.go | 40 +++++++++++++++++++++++----------------- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/ofdgo_font_info.go b/ofdgo_font_info.go index 145e7d6..f0c5f0b 100644 --- a/ofdgo_font_info.go +++ b/ofdgo_font_info.go @@ -16,6 +16,7 @@ package ofdgo import ( "fmt" + "io" "path" "sort" ) @@ -157,7 +158,12 @@ func (r *Renderer) fontInfo(font Font) FontInfo { Embedded: font.FontFile != "", } if info.Embedded { - if _, err := r.Reader.ResData(font.FontFile); err == nil { + file, err := r.Reader.openFile(r.Reader.ResPath(font.FontFile)) + if err == nil { + _, err = io.Copy(io.Discard, file) + file.Close() + } + if err == nil { info.Status = FontStatusEmbedded info.Matched = path.Base(font.FontFile) info.Detail = "使用内嵌字体文件" @@ -202,9 +208,7 @@ func (r *Renderer) fontUsage(doc *Document, pages []*PageContent) map[string]int } } for _, tpl := range doc.CommonData.TemplatePage { - page, err := r.Reader.PageContent(Page{BaseLoc: tpl.BaseLoc}) - if err == nil { - r.templatePageCache[tpl.ID] = page + if page := r.loadTemplate(tpl.ID); page != nil { r.countPageFonts(page, usage) } } diff --git a/ofdgo_renderer_layer.go b/ofdgo_renderer_layer.go index a2a3661..7652c52 100644 --- a/ofdgo_renderer_layer.go +++ b/ofdgo_renderer_layer.go @@ -34,30 +34,36 @@ func (r *Renderer) renderAnnotations(ctx *canvas.Context, pageID string, pageH f // renderTemplate 渲染模板 // 入参: ctx 画布上下文, templateID 模板ID, pageH 页面高度 func (r *Renderer) renderTemplate(ctx *canvas.Context, templateID string, pageH float64) { - tplContent := r.templatePageCache[templateID] + tplContent := r.loadTemplate(templateID) if tplContent == nil { - var tplPage *TemplatePage - for i := range r.Reader.doc.CommonData.TemplatePage { - if r.Reader.doc.CommonData.TemplatePage[i].ID == templateID { - tplPage = &r.Reader.doc.CommonData.TemplatePage[i] - break - } - } - if tplPage == nil { - return - } - var err error - tplContent, err = r.Reader.PageContent(Page{BaseLoc: tplPage.BaseLoc}) - if err != nil { - return - } - r.templatePageCache[templateID] = tplContent + return } for order := range 3 { r.renderLayers(ctx, tplContent.Content.Layer, pageH, order) } } +// loadTemplate 加载模板页面并复用解析结果 +// 入参: templateID 模板ID +// 返回: *PageContent 模板页面 +func (r *Renderer) loadTemplate(templateID string) *PageContent { + if page := r.templatePageCache[templateID]; page != nil { + return page + } + for _, tpl := range r.Reader.doc.CommonData.TemplatePage { + if tpl.ID != templateID { + continue + } + page, err := r.Reader.PageContent(Page{BaseLoc: tpl.BaseLoc}) + if err != nil { + return nil + } + r.templatePageCache[templateID] = page + return page + } + return nil +} + // layerOrder 获取图层类型的绘制顺序 // 入参: kind 图层类型 // 返回: int 绘制顺序