mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-30 01:27:26 +08:00
This commit is contained in:
1 parent
89b8b183a0
commit
6f23085742
2 files changed
+30
-20
No files matched your search
+8
-4
@@ -16,6 +16,7 @@ package ofdgo
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"path"
|
"path"
|
||||||
"sort"
|
"sort"
|
||||||
)
|
)
|
||||||
@@ -157,7 +158,12 @@ func (r *Renderer) fontInfo(font Font) FontInfo {
|
|||||||
Embedded: font.FontFile != "",
|
Embedded: font.FontFile != "",
|
||||||
}
|
}
|
||||||
if info.Embedded {
|
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.Status = FontStatusEmbedded
|
||||||
info.Matched = path.Base(font.FontFile)
|
info.Matched = path.Base(font.FontFile)
|
||||||
info.Detail = "使用内嵌字体文件"
|
info.Detail = "使用内嵌字体文件"
|
||||||
@@ -202,9 +208,7 @@ func (r *Renderer) fontUsage(doc *Document, pages []*PageContent) map[string]int
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, tpl := range doc.CommonData.TemplatePage {
|
for _, tpl := range doc.CommonData.TemplatePage {
|
||||||
page, err := r.Reader.PageContent(Page{BaseLoc: tpl.BaseLoc})
|
if page := r.loadTemplate(tpl.ID); page != nil {
|
||||||
if err == nil {
|
|
||||||
r.templatePageCache[tpl.ID] = page
|
|
||||||
r.countPageFonts(page, usage)
|
r.countPageFonts(page, usage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+22
-16
@@ -34,30 +34,36 @@ func (r *Renderer) renderAnnotations(ctx *canvas.Context, pageID string, pageH f
|
|||||||
// renderTemplate 渲染模板
|
// renderTemplate 渲染模板
|
||||||
// 入参: ctx 画布上下文, templateID 模板ID, pageH 页面高度
|
// 入参: ctx 画布上下文, templateID 模板ID, pageH 页面高度
|
||||||
func (r *Renderer) renderTemplate(ctx *canvas.Context, templateID string, pageH float64) {
|
func (r *Renderer) renderTemplate(ctx *canvas.Context, templateID string, pageH float64) {
|
||||||
tplContent := r.templatePageCache[templateID]
|
tplContent := r.loadTemplate(templateID)
|
||||||
if tplContent == nil {
|
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
|
return
|
||||||
}
|
}
|
||||||
var err error
|
|
||||||
tplContent, err = r.Reader.PageContent(Page{BaseLoc: tplPage.BaseLoc})
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
r.templatePageCache[templateID] = tplContent
|
|
||||||
}
|
|
||||||
for order := range 3 {
|
for order := range 3 {
|
||||||
r.renderLayers(ctx, tplContent.Content.Layer, pageH, order)
|
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 获取图层类型的绘制顺序
|
// layerOrder 获取图层类型的绘制顺序
|
||||||
// 入参: kind 图层类型
|
// 入参: kind 图层类型
|
||||||
// 返回: int 绘制顺序
|
// 返回: int 绘制顺序
|
||||||
|
|||||||
Reference in new issue
Block a user