Add split-output to cli
This commit is contained in:
@@ -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 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 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 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() {
|
func init() {
|
||||||
log.Logger = zerolog.New(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.RFC3339}).With().Timestamp().Logger()
|
log.Logger = zerolog.New(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.RFC3339}).With().Timestamp().Logger()
|
||||||
@@ -69,13 +70,15 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
*customer = strings.ReplaceAll(*customer, "\\n", "\n")
|
*customer = strings.ReplaceAll(*customer, "\\n", "\n")
|
||||||
|
settings := covergen.CoverSettings{
|
||||||
pdf, err := covergen.GenerateInvoice(covergen.CoverSettings{
|
|
||||||
Number: *number,
|
Number: *number,
|
||||||
NumberPrefix: *numberPrefix,
|
NumberPrefix: *numberPrefix,
|
||||||
CustomerName: *customer,
|
CustomerName: *customer,
|
||||||
HLColor: chosenColor,
|
HLColor: chosenColor,
|
||||||
})
|
}
|
||||||
|
|
||||||
|
if *output2 == "" {
|
||||||
|
pdf, err := covergen.GenerateInvoice(settings)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal().Err(err).Msg("Failed to render invoice")
|
log.Fatal().Err(err).Msg("Failed to render invoice")
|
||||||
@@ -84,4 +87,22 @@ func main() {
|
|||||||
if err := pdf.OutputFileAndClose(*output); err != nil {
|
if err := pdf.OutputFileAndClose(*output); err != nil {
|
||||||
log.Fatal().Err(err).Msg("Failed to write invoice to disk")
|
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")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/go-pdf/fpdf"
|
"github.com/go-pdf/fpdf"
|
||||||
"github.com/rs/zerolog/log"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const margin = 20
|
const margin = 20
|
||||||
@@ -44,17 +43,58 @@ type CoverSettings struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GenerateInvoice(settings CoverSettings) (*fpdf.Fpdf, error) {
|
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", "")
|
pdf := fpdf.New("P", scaleUnit, "A4", "")
|
||||||
|
|
||||||
if err := addEmbeddedFont(pdf, "Mark Medium", "", "Mark-Medium"); err != nil {
|
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 {
|
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 {
|
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)
|
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.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()
|
pdf.AddPage()
|
||||||
drawCustomerName(pdf, settings)
|
drawCustomerName(pdf, settings)
|
||||||
|
|
||||||
if pdf.Err() {
|
if pdf.Err() {
|
||||||
return nil, pdf.Error()
|
return nil, fmt.Errorf("error generating invoice: %w", pdf.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
return pdf, nil
|
return pdf, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func drawInvoiceNumber(pdf *fpdf.Fpdf, settings CoverSettings) {
|
func drawInvoiceNumber(pdf *fpdf.Fpdf, settings CoverSettings) {
|
||||||
_, pageHeight := pdf.GetPageSize()
|
_, pageHeight := pdf.GetPageSize()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user