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
}