v0.1.9 - add <cut> element
This commit is contained in:
42
img.go
42
img.go
@@ -30,6 +30,7 @@ import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"golang.org/x/text/language"
|
||||
"golang.org/x/text/message"
|
||||
)
|
||||
@@ -48,9 +49,9 @@ const (
|
||||
var fontFs embed.FS
|
||||
|
||||
//export GenPNG
|
||||
func GenPNG(width C.int, outputPath *C.char, payload *C.char, tmpl *C.char, workingDirC *C.char) *C.char {
|
||||
func GenPNG(width C.int, outDir *C.char, payload *C.char, tmpl *C.char, workingDirC *C.char) *C.char {
|
||||
canvasWidth := int(width)
|
||||
goPath := C.GoString(outputPath)
|
||||
goOutDir := C.GoString(outDir)
|
||||
goPayload := C.GoString(payload)
|
||||
goTmpl := C.GoString(tmpl)
|
||||
workingDir := C.GoString(workingDirC)
|
||||
@@ -67,14 +68,27 @@ func GenPNG(width C.int, outputPath *C.char, payload *C.char, tmpl *C.char, work
|
||||
}
|
||||
|
||||
htmlStr = uni2zg(htmlStr)
|
||||
htmls := strings.Split(htmlStr, "<cut>")
|
||||
result := make([]string, 0)
|
||||
for _, html := range htmls {
|
||||
out, err := GenPng(canvasWidth, goOutDir, html, workingDir)
|
||||
if err != nil {
|
||||
return NewErr(err)
|
||||
}
|
||||
result = append(result, out)
|
||||
}
|
||||
return NewOk(result)
|
||||
}
|
||||
|
||||
func GenPng(canvasWidth int, outDir string, htmlStr string, workingDir string) (string, error) {
|
||||
root, err := html.Parse(strings.NewReader(htmlStr))
|
||||
if err != nil {
|
||||
return NewErr(err)
|
||||
return "", err
|
||||
}
|
||||
|
||||
face, err := LoadFont(defalutFontSize)
|
||||
if err != nil {
|
||||
return NewErr(err)
|
||||
return "", err
|
||||
}
|
||||
|
||||
// First pass: compute required height
|
||||
@@ -96,20 +110,19 @@ func GenPNG(width C.int, outputPath *C.char, payload *C.char, tmpl *C.char, work
|
||||
y := 0
|
||||
err = renderNode(dc, canvasWidth, body, &y, *face, workingDir)
|
||||
if err != nil {
|
||||
return NewErr(err)
|
||||
return "", err
|
||||
}
|
||||
|
||||
err = dc.SavePNG(goPath)
|
||||
outPath := path.Join(outDir, uuid.NewString()+".png")
|
||||
err = dc.SavePNG(outPath)
|
||||
if err != nil {
|
||||
return NewErr(err)
|
||||
return "", err
|
||||
}
|
||||
|
||||
// PrintReceipt(goPath)
|
||||
return NewOk(nil)
|
||||
return outPath, nil
|
||||
}
|
||||
|
||||
func GenImg(width int, outputPath, payload, tmpl, workingDir string) string {
|
||||
result := GenPNG(C.int(width), C.CString(outputPath), C.CString(payload), C.CString(tmpl), C.CString(workingDir))
|
||||
func GenImg(width int, outputDir, payload, tmpl, workingDir string) string {
|
||||
result := GenPNG(C.int(width), C.CString(outputDir), C.CString(payload), C.CString(tmpl), C.CString(workingDir))
|
||||
r := C.GoString(result)
|
||||
return r
|
||||
}
|
||||
@@ -162,7 +175,8 @@ func renderNode(dc *gg.Context, canvasWidth int, n *Node, y *int, face font.Face
|
||||
if n.Style.PaddingBottom > 0 {
|
||||
*y += int(n.Style.PaddingBottom)
|
||||
}
|
||||
log.Printf("render %s y, y', height: %d, %d, %d\n", n.Tag, before, *y, *y-before)
|
||||
_ = before
|
||||
// log.Printf("render %s y, y', height: %d, %d, %d\n", n.Tag, before, *y, *y-before)
|
||||
|
||||
for _, c := range n.Children {
|
||||
renderNode(dc, canvasWidth, c, y, face, workingDir)
|
||||
@@ -453,7 +467,7 @@ func nodeHeight(n *html.Node, dc *gg.Context, canvasWidth int, xPadding, yPaddin
|
||||
h = implicit
|
||||
}
|
||||
y += h
|
||||
log.Printf("nodeHeight %s height: %d, \n", n.Data, y)
|
||||
// log.Printf("nodeHeight %s height: %d, \n", n.Data, y)
|
||||
}
|
||||
return y
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user