diff --git a/cmd/covergen/main.go b/cmd/covergen/main.go index faa433b..a634021 100644 --- a/cmd/covergen/main.go +++ b/cmd/covergen/main.go @@ -26,6 +26,7 @@ var customer = pflag.StringP("customer", "c", "", "Customer name for cover") var numberPrefix = pflag.String("number-prefix", "offerte", "Prefix to use for number") var color = pflag.String("color", "random", "Selects a color to use for the grid highlight. Valid choices: ['random', 'red', 'blue', 'yellow', 'green']") var output = pflag.StringP("output", "o", "cover.pdf", "File to output to") +var output2 = pflag.StringP("output-back", "b", "", "Output front and back separately") func init() { log.Logger = zerolog.New(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.RFC3339}).With().Timestamp().Logger() @@ -69,19 +70,39 @@ func main() { } *customer = strings.ReplaceAll(*customer, "\\n", "\n") - - pdf, err := covergen.GenerateInvoice(covergen.CoverSettings{ + settings := covergen.CoverSettings{ Number: *number, NumberPrefix: *numberPrefix, CustomerName: *customer, HLColor: chosenColor, - }) - - if err != nil { - log.Fatal().Err(err).Msg("Failed to render invoice") } - if err := pdf.OutputFileAndClose(*output); err != nil { - log.Fatal().Err(err).Msg("Failed to write invoice to disk") + if *output2 == "" { + pdf, err := covergen.GenerateInvoice(settings) + + if err != nil { + log.Fatal().Err(err).Msg("Failed to render invoice") + } + + if err := pdf.OutputFileAndClose(*output); err != nil { + log.Fatal().Err(err).Msg("Failed to write invoice to disk") + } + } else { + front, err := covergen.GenerateFrontCover(settings) + if err != nil { + log.Fatal().Err(err).Msg("Failed to render front") + } + if err := front.OutputFileAndClose(*output); err != nil { + log.Fatal().Err(err).Msg("Failed to write front to disk") + } + + back, err := covergen.GenerateBackCover(settings) + if err != nil { + log.Fatal().Err(err).Msg("Failed to render back") + } + if err := back.OutputFileAndClose(*output2); err != nil { + log.Fatal().Err(err).Msg("Failed to write back to disk") + } } + } diff --git a/pkg/covergen/render.go b/pkg/covergen/render.go index 2da662e..1250df5 100644 --- a/pkg/covergen/render.go +++ b/pkg/covergen/render.go @@ -6,7 +6,6 @@ import ( "strings" "github.com/go-pdf/fpdf" - "github.com/rs/zerolog/log" ) const margin = 20 @@ -44,17 +43,58 @@ type CoverSettings struct { } func GenerateInvoice(settings CoverSettings) (*fpdf.Fpdf, error) { + pdf, err := GenerateFrontCover(settings) + if err != nil { + return nil, err + } + + pdf.AddPage() + drawCustomerName(pdf, settings) + + if pdf.Err() { + return nil, pdf.Error() + } + + return pdf, nil +} + +func GenerateFrontCover(settings CoverSettings) (*fpdf.Fpdf, error) { + pdf, err := generateBaseInvoice(settings) + if err != nil { + return nil, err + } + + drawInvoiceNumber(pdf, settings) + drawMiwebbLink(pdf) + + if pdf.Err() { + return nil, pdf.Error() + } + + return pdf, nil +} + +func GenerateBackCover(settings CoverSettings) (*fpdf.Fpdf, error) { + pdf, err := generateBaseInvoice(settings) + if err != nil { + return nil, err + } + + return pdf, err +} + +func generateBaseInvoice(settings CoverSettings) (*fpdf.Fpdf, error) { pdf := fpdf.New("P", scaleUnit, "A4", "") if err := addEmbeddedFont(pdf, "Mark Medium", "", "Mark-Medium"); err != nil { - log.Fatal().Err(err).Msg("Error adding font") + return nil, fmt.Errorf("error adding font: %w", err) } if err := addEmbeddedFont(pdf, "Mark Light", "", "Mark-Light"); err != nil { - log.Fatal().Err(err).Msg("Error adding font") + return nil, fmt.Errorf("error adding font: %w", err) } - miwebbLogo, err := addEmbeddedLogo(pdf, miwebbLogoName, miwebbLogoPath) + miwebbLogo, err := addEmbeddedLogo(pdf, miwebbLogoName, "miwebb.white.png") if err != nil { - log.Fatal().Err(err).Msg("Error adding logo") + return nil, fmt.Errorf("error adding logo: %w", err) } pdf.SetMargins(margin, margin, margin) @@ -67,21 +107,16 @@ func GenerateInvoice(settings CoverSettings) (*fpdf.Fpdf, error) { pdf.Image(miwebbLogoName, margin-5, margin, miwebbLogo.Width()*logoScale, miwebbLogo.Height()*logoScale, false, "", 0, "") }) - pdf.AddPage() - - drawCustomerName(pdf, settings) - drawInvoiceNumber(pdf, settings) - drawMiwebbLink(pdf) - pdf.AddPage() drawCustomerName(pdf, settings) if pdf.Err() { - return nil, pdf.Error() + return nil, fmt.Errorf("error generating invoice: %w", pdf.Error()) } return pdf, nil } + func drawInvoiceNumber(pdf *fpdf.Fpdf, settings CoverSettings) { _, pageHeight := pdf.GetPageSize()