feat(渲染能力): 修正页面与模板的图层叠放顺序
build.yaml / build (push) Successful in 39s

This commit is contained in:
xiaoqidun committed 2026-09-10 00:38:31 +08:00
1 parent 6ef3245c47
commit c5ef7c4eae
4 files changed
+33 -15

No files matched your search

+1
View File
@@ -119,6 +119,7 @@ func decodeObjectContainer(d *xml.Decoder, start xml.StartElement, decode func(*
func (l *Layer) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { func (l *Layer) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
*l = Layer{} *l = Layer{}
l.ID = attrValue(start, "ID") l.ID = attrValue(start, "ID")
l.Type = attrValue(start, "Type")
l.DrawParam = attrValue(start, "DrawParam") l.DrawParam = attrValue(start, "DrawParam")
return decodeObjectContainer(d, start, l.decodeObject) return decodeObjectContainer(d, start, l.decodeObject)
} }
+1
View File
@@ -41,6 +41,7 @@ type Content struct {
// Layer 图层 // Layer 图层
type Layer struct { type Layer struct {
ID string `xml:"ID,attr"` ID string `xml:"ID,attr"`
Type string `xml:"Type,attr"`
DrawParam string `xml:"DrawParam,attr"` DrawParam string `xml:"DrawParam,attr"`
Objects []GraphicObject `xml:"-"` Objects []GraphicObject `xml:"-"`
TextObject []TextObject `xml:"TextObject"` TextObject []TextObject `xml:"TextObject"`
+8 -13
View File
@@ -118,24 +118,19 @@ func (r *Renderer) renderPageToContext(ctx *canvas.Context, page *PageContent, d
ctx.SetFillColor(canvas.White) ctx.SetFillColor(canvas.White)
ctx.DrawPath(0, 0, canvas.Rectangle(box.W, box.H)) ctx.DrawPath(0, 0, canvas.Rectangle(box.W, box.H))
} }
if len(page.Template) > 0 && r.Reader.doc != nil { for order := range 3 {
if r.Reader.doc != nil {
for _, tplRef := range page.Template { for _, tplRef := range page.Template {
if tplRef.ZOrder != "Foreground" { kind := tplRef.ZOrder
if kind == "" {
kind = "Background"
}
if layerOrder(kind) == order {
r.renderTemplate(ctx, tplRef.TemplateID, pageH) r.renderTemplate(ctx, tplRef.TemplateID, pageH)
} }
} }
} }
if page.Content.Layer != nil { r.renderLayers(ctx, page.Content.Layer, pageH, order)
for _, layer := range page.Content.Layer {
r.renderLayer(ctx, layer, pageH, nil, nil)
}
}
if len(page.Template) > 0 && r.Reader.doc != nil {
for _, tplRef := range page.Template {
if tplRef.ZOrder == "Foreground" {
r.renderTemplate(ctx, tplRef.TemplateID, pageH)
}
}
} }
if r.RenderAnnotations { if r.RenderAnnotations {
r.renderAnnotations(ctx, page.ID, pageH) r.renderAnnotations(ctx, page.ID, pageH)
+23 -2
View File
@@ -53,8 +53,29 @@ func (r *Renderer) renderTemplate(ctx *canvas.Context, templateID string, pageH
} }
r.templatePageCache[templateID] = tplContent r.templatePageCache[templateID] = tplContent
} }
if tplContent.Content.Layer != nil { for order := range 3 {
for _, layer := range tplContent.Content.Layer { r.renderLayers(ctx, tplContent.Content.Layer, pageH, order)
}
}
// layerOrder 获取图层类型的绘制顺序
// 入参: kind 图层类型
// 返回: int 绘制顺序
func layerOrder(kind string) int {
switch kind {
case "Background":
return 0
case "Foreground":
return 2
}
return 1
}
// renderLayers 按原顺序渲染指定类型的图层
// 入参: ctx 画布上下文, layers 图层列表, pageH 页面高度, order 图层类型顺序
func (r *Renderer) renderLayers(ctx *canvas.Context, layers []Layer, pageH float64, order int) {
for _, layer := range layers {
if layerOrder(layer.Type) == order {
r.renderLayer(ctx, layer, pageH, nil, nil) r.renderLayer(ctx, layer, pageH, nil, nil)
} }
} }