Mike Schwörer
b78a468632
Some checks failed
Build Docker and Deploy / Run goext test-suite (push) Has been cancelled
212 lines
5.8 KiB
Go
212 lines
5.8 KiB
Go
package wpdf
|
|
|
|
import (
|
|
"gogs.mikescher.com/BlackForestBytes/goext/dataext"
|
|
"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
|
|
alphaOverride *dataext.Tuple[float64, PDFBlendMode]
|
|
extraLn *float64
|
|
x *float64
|
|
textColor *PDFColor
|
|
borderColor *PDFColor
|
|
fillColor *PDFColor
|
|
}
|
|
|
|
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 (opt *PDFMultiCellOpt) TextColor(cr, cg, cb int) *PDFMultiCellOpt {
|
|
opt.textColor = langext.Ptr(rgbToColor(cr, cg, cb))
|
|
return opt
|
|
}
|
|
|
|
func (opt *PDFMultiCellOpt) TextColorHex(c uint32) *PDFMultiCellOpt {
|
|
opt.textColor = langext.Ptr(hexToColor(c))
|
|
return opt
|
|
}
|
|
|
|
func (opt *PDFMultiCellOpt) BorderColor(cr, cg, cb int) *PDFMultiCellOpt {
|
|
opt.borderColor = langext.Ptr(rgbToColor(cr, cg, cb))
|
|
return opt
|
|
}
|
|
|
|
func (opt *PDFMultiCellOpt) BorderColorHex(c uint32) *PDFMultiCellOpt {
|
|
opt.borderColor = langext.Ptr(hexToColor(c))
|
|
return opt
|
|
}
|
|
|
|
func (opt *PDFMultiCellOpt) FillColor(cr, cg, cb int) *PDFMultiCellOpt {
|
|
opt.fillColor = langext.Ptr(rgbToColor(cr, cg, cb))
|
|
return opt
|
|
}
|
|
|
|
func (opt *PDFMultiCellOpt) FillColorHex(c uint32) *PDFMultiCellOpt {
|
|
opt.fillColor = langext.Ptr(hexToColor(c))
|
|
return opt
|
|
}
|
|
|
|
func (opt *PDFMultiCellOpt) Alpha(alpha float64, blendMode PDFBlendMode) *PDFMultiCellOpt {
|
|
opt.alphaOverride = &dataext.Tuple[float64, PDFBlendMode]{V1: alpha, V2: blendMode}
|
|
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
|
|
var alphaOverride *dataext.Tuple[float64, PDFBlendMode]
|
|
extraLn := float64(0)
|
|
var x *float64
|
|
var textColor *PDFColor
|
|
var borderColor *PDFColor
|
|
var fillColor *PDFColor
|
|
|
|
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)
|
|
alphaOverride = langext.CoalesceOpt(opt.alphaOverride, alphaOverride)
|
|
extraLn = langext.Coalesce(opt.extraLn, extraLn)
|
|
x = langext.CoalesceOpt(opt.x, x)
|
|
textColor = langext.CoalesceOpt(opt.textColor, textColor)
|
|
borderColor = langext.CoalesceOpt(opt.borderColor, borderColor)
|
|
fillColor = langext.CoalesceOpt(opt.fillColor, fillColor)
|
|
}
|
|
|
|
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 textColor != nil {
|
|
oldColorR, oldColorG, oldColorB := b.b.GetTextColor()
|
|
b.SetTextColor(textColor.R, textColor.G, textColor.B)
|
|
defer func() { b.SetTextColor(oldColorR, oldColorG, oldColorB) }()
|
|
}
|
|
|
|
if borderColor != nil {
|
|
oldColorR, oldColorG, oldColorB := b.b.GetDrawColor()
|
|
b.SetDrawColor(borderColor.R, borderColor.G, borderColor.B)
|
|
defer func() { b.SetDrawColor(oldColorR, oldColorG, oldColorB) }()
|
|
}
|
|
|
|
if fillColor != nil {
|
|
oldColorR, oldColorG, oldColorB := b.b.GetFillColor()
|
|
b.SetFillColor(fillColor.R, fillColor.G, fillColor.B)
|
|
defer func() { b.SetFillColor(oldColorR, oldColorG, oldColorB) }()
|
|
}
|
|
|
|
if alphaOverride != nil {
|
|
oldA, oldBMS := b.b.GetAlpha()
|
|
b.b.SetAlpha(alphaOverride.V1, string(alphaOverride.V2))
|
|
defer func() { b.b.SetAlpha(oldA, oldBMS) }()
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|