2026-05-26 17:11:09 +02:00

33 lines
806 B
Go

package platepdf
import (
"fmt"
"os"
"printer.backend/internal/model"
)
// Generate builds a PDF of the plate layout using the item's SVG template.
// Requires rsvg-convert on PATH.
func Generate(plate model.Plate, spec model.ItemSpec, itemSVGPath string, preview model.LayoutPreview) ([]byte, error) {
if !rsvgAvailable() {
return nil, fmt.Errorf("rsvg-convert not found in PATH (required for PDF export)")
}
itemSVG, err := os.ReadFile(itemSVGPath)
if err != nil {
return nil, fmt.Errorf("read item svg: %w", err)
}
composite, err := BuildCompositeSVG(plate, spec, itemSVG, preview)
if err != nil {
return nil, err
}
pdf, err := svgToPDFViaRsvg(composite, plate.WidthMM, plate.HeightMM)
if err != nil {
return nil, fmt.Errorf("render plate pdf: %w", err)
}
return pdf, nil
}