package render import ( "bytes" "fmt" "html/template" "os/exec" "git.else-if.org/jess/cs-midi-docs/internal/content" ) var printTmpl = template.Must(template.New("print").Parse(` {{.Title}} {{.Body}} `)) func GeneratePDF(tree *content.Node, title string) ([]byte, error) { if _, err := exec.LookPath("weasyprint"); err != nil { return nil, fmt.Errorf("weasyprint not found: install it for PDF generation") } htmlContent, err := BookHTML(tree) if err != nil { return nil, err } var page bytes.Buffer printTmpl.Execute(&page, struct { Title string Body template.HTML }{title, template.HTML(htmlContent)}) cmd := exec.Command("weasyprint", "-", "-") cmd.Stdin = &page var out bytes.Buffer cmd.Stdout = &out var stderr bytes.Buffer cmd.Stderr = &stderr if err := cmd.Run(); err != nil { return nil, fmt.Errorf("weasyprint: %v: %s", err, stderr.String()) } return out.Bytes(), nil } func PrintHTML(tree *content.Node, title string) ([]byte, error) { htmlContent, err := BookHTML(tree) if err != nil { return nil, err } var page bytes.Buffer printTmpl.Execute(&page, struct { Title string Body template.HTML }{title, template.HTML(htmlContent)}) return page.Bytes(), nil }