mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-30 01:27:26 +08:00
1 parent
6ef3245c47
commit
c5ef7c4eae
4 files changed
+36
-18
No files matched your search
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"`
|
||||||
|
|||||||
+11
-16
@@ -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 {
|
||||||
for _, tplRef := range page.Template {
|
if r.Reader.doc != nil {
|
||||||
if tplRef.ZOrder != "Foreground" {
|
for _, tplRef := range page.Template {
|
||||||
r.renderTemplate(ctx, tplRef.TemplateID, pageH)
|
kind := tplRef.ZOrder
|
||||||
}
|
if kind == "" {
|
||||||
}
|
kind = "Background"
|
||||||
}
|
}
|
||||||
if page.Content.Layer != nil {
|
if layerOrder(kind) == order {
|
||||||
for _, layer := range page.Content.Layer {
|
r.renderTemplate(ctx, tplRef.TemplateID, pageH)
|
||||||
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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
r.renderLayers(ctx, page.Content.Layer, pageH, order)
|
||||||
}
|
}
|
||||||
if r.RenderAnnotations {
|
if r.RenderAnnotations {
|
||||||
r.renderAnnotations(ctx, page.ID, pageH)
|
r.renderAnnotations(ctx, page.ID, pageH)
|
||||||
|
|||||||
+23
-2
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user