package wpdf import "gogs.mikescher.com/BlackForestBytes/goext/langext" type PDFMultiCellOpt struct { width *float64 height *float64 border *PDFBorder align *PDFTextAlign fill *bool fontNameOverride *PDFFontFamily fontStyleOverride *PDFFontStyle fontSizeOverride *float64 extraLn *float64 x *float64 } func NewPDFMultiCellOpt() *PDFMultiCellOpt { return &PDFMultiCellOpt{} } func (opt *PDFMultiCellOpt) Width(v float64) *PDFMultiCellOpt { opt.width = &v return opt } func (opt *PDFMultiCellOpt) Height(v float64) *PDFMultiCellOpt { opt.height = &v return opt } func (opt *PDFMultiCellOpt) Border(v PDFBorder) *PDFMultiCellOpt { opt.border = &v return opt } func (opt *PDFMultiCellOpt) Align(v PDFTextAlign) *PDFMultiCellOpt { opt.align = &v return opt } func (opt *PDFMultiCellOpt) FillBackground(v bool) *PDFMultiCellOpt { opt.fill = &v return opt } func (opt *PDFMultiCellOpt) Font(fontName PDFFontFamily, fontStyle PDFFontStyle, fontSize float64) *PDFMultiCellOpt { opt.fontNameOverride = &fontName opt.fontStyleOverride = &fontStyle opt.fontSizeOverride = &fontSize return opt } func (opt *PDFMultiCellOpt) FontName(v PDFFontFamily) *PDFMultiCellOpt { opt.fontNameOverride = &v return opt } func (opt *PDFMultiCellOpt) FontStyle(v PDFFontStyle) *PDFMultiCellOpt { opt.fontStyleOverride = &v return opt } func (opt *PDFMultiCellOpt) FontSize(v float64) *PDFMultiCellOpt { opt.fontSizeOverride = &v return opt } func (opt *PDFMultiCellOpt) Bold() *PDFMultiCellOpt { opt.fontStyleOverride = langext.Ptr(Bold) return opt } func (opt *PDFMultiCellOpt) Italic() *PDFMultiCellOpt { opt.fontStyleOverride = langext.Ptr(Italic) return opt } func (opt *PDFMultiCellOpt) LnAfter(v float64) *PDFMultiCellOpt { opt.extraLn = &v return opt } func (opt *PDFMultiCellOpt) X(v float64) *PDFMultiCellOpt { opt.x = &v return opt } func (b *WPDFBuilder) MultiCell(txt string, opts ...*PDFMultiCellOpt) { txtTR := b.tr(txt) width := float64(0) height := b.cellHeight + b.cellSpacing border := BorderNone align := AlignLeft fill := false var fontNameOverride *PDFFontFamily var fontStyleOverride *PDFFontStyle var fontSizeOverride *float64 extraLn := float64(0) var x *float64 for _, opt := range opts { width = langext.Coalesce(opt.width, width) height = langext.Coalesce(opt.height, height) border = langext.Coalesce(opt.border, border) align = langext.Coalesce(opt.align, align) fill = langext.Coalesce(opt.fill, fill) fontNameOverride = langext.CoalesceOpt(opt.fontNameOverride, fontNameOverride) fontStyleOverride = langext.CoalesceOpt(opt.fontStyleOverride, fontStyleOverride) fontSizeOverride = langext.CoalesceOpt(opt.fontSizeOverride, fontSizeOverride) extraLn = langext.Coalesce(opt.extraLn, extraLn) x = langext.CoalesceOpt(opt.x, x) } if fontNameOverride != nil || fontStyleOverride != nil || fontSizeOverride != nil { oldFontName := b.fontName oldFontStyle := b.fontStyle oldFontSize := b.fontSize newFontName := langext.Coalesce(fontNameOverride, oldFontName) newFontStyle := langext.Coalesce(fontStyleOverride, oldFontStyle) newFontSize := langext.Coalesce(fontSizeOverride, oldFontSize) b.SetFont(newFontName, newFontStyle, newFontSize) defer func() { b.SetFont(oldFontName, oldFontStyle, oldFontSize) }() } if x != nil { b.b.SetX(*x) } b.b.MultiCell(width, height, txtTR, string(border), string(align), fill) if extraLn != 0 { b.b.Ln(extraLn) } }