33 lines
806 B
Go
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
|
|
}
|