v0.0.494 add tables to wpdf
Some checks failed
Build Docker and Deploy / Run goext test-suite (push) Has been cancelled
Some checks failed
Build Docker and Deploy / Run goext test-suite (push) Has been cancelled
This commit is contained in:
@@ -3,6 +3,7 @@ package wpdf
|
||||
import (
|
||||
"bytes"
|
||||
"github.com/jung-kurt/gofpdf"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/dataext"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/imageext"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||
"image"
|
||||
@@ -130,6 +131,8 @@ type PDFImageOpt struct {
|
||||
compression *imageext.ImageCompresson
|
||||
reEncodePixelPerMM *float64
|
||||
crop *imageext.ImageCrop
|
||||
alphaOverride *dataext.Tuple[float64, PDFBlendMode]
|
||||
debug *bool
|
||||
}
|
||||
|
||||
func NewPDFImageOpt() *PDFImageOpt {
|
||||
@@ -156,6 +159,11 @@ func (opt *PDFImageOpt) Height(v float64) *PDFImageOpt {
|
||||
return opt
|
||||
}
|
||||
|
||||
func (opt *PDFImageOpt) Debug(v bool) *PDFImageOpt {
|
||||
opt.debug = &v
|
||||
return opt
|
||||
}
|
||||
|
||||
func (opt *PDFImageOpt) Flow(v bool) *PDFImageOpt {
|
||||
opt.flow = &v
|
||||
return opt
|
||||
@@ -217,6 +225,11 @@ func (opt *PDFImageOpt) Crop(cropX float64, cropY float64, cropWidth float64, cr
|
||||
return opt
|
||||
}
|
||||
|
||||
func (opt *PDFImageOpt) Alpha(alpha float64, blendMode PDFBlendMode) *PDFImageOpt {
|
||||
opt.alphaOverride = &dataext.Tuple[float64, PDFBlendMode]{V1: alpha, V2: blendMode}
|
||||
return opt
|
||||
}
|
||||
|
||||
func (b *WPDFBuilder) Image(img *PDFImageRef, opts ...*PDFImageOpt) {
|
||||
var err error
|
||||
|
||||
@@ -234,7 +247,9 @@ func (b *WPDFBuilder) Image(img *PDFImageRef, opts ...*PDFImageOpt) {
|
||||
var imageFit *imageext.ImageFit = nil
|
||||
var fillColor color.Color = color.Transparent
|
||||
compression := imageext.CompressionPNGSpeed
|
||||
debug := false
|
||||
var crop *imageext.ImageCrop = nil
|
||||
var alphaOverride *dataext.Tuple[float64, PDFBlendMode]
|
||||
|
||||
for _, opt := range opts {
|
||||
x = langext.Coalesce(opt.x, x)
|
||||
@@ -252,10 +267,14 @@ func (b *WPDFBuilder) Image(img *PDFImageRef, opts ...*PDFImageOpt) {
|
||||
compression = langext.Coalesce(opt.compression, compression)
|
||||
reEncodePixelPerMM = langext.Coalesce(opt.reEncodePixelPerMM, reEncodePixelPerMM)
|
||||
crop = langext.CoalesceOpt(opt.crop, crop)
|
||||
debug = langext.Coalesce(opt.debug, debug)
|
||||
alphaOverride = langext.CoalesceOpt(opt.alphaOverride, alphaOverride)
|
||||
}
|
||||
|
||||
regName := img.Name
|
||||
|
||||
var subImageBounds *imageext.PercentageRectangle = nil
|
||||
|
||||
if imageFit != nil || fillColor != nil || crop != nil {
|
||||
|
||||
var dataimg image.Image
|
||||
@@ -283,11 +302,14 @@ func (b *WPDFBuilder) Image(img *PDFImageRef, opts ...*PDFImageOpt) {
|
||||
pxw := w * pdfPixelPerMillimeter
|
||||
pxh := h * pdfPixelPerMillimeter
|
||||
|
||||
dataimg, err = imageext.ObjectFitImage(dataimg, pxw, pxh, *imageFit, fillColor)
|
||||
var dataImgRect imageext.PercentageRectangle
|
||||
dataimg, dataImgRect, err = imageext.ObjectFitImage(dataimg, pxw, pxh, *imageFit, fillColor)
|
||||
if err != nil {
|
||||
b.b.SetError(err)
|
||||
return
|
||||
}
|
||||
|
||||
subImageBounds = &dataImgRect
|
||||
}
|
||||
|
||||
if dataimg.ColorModel() != color.RGBAModel && dataimg.ColorModel() != color.NRGBAModel {
|
||||
@@ -318,6 +340,12 @@ func (b *WPDFBuilder) Image(img *PDFImageRef, opts ...*PDFImageOpt) {
|
||||
|
||||
}
|
||||
|
||||
if alphaOverride != nil {
|
||||
oldA, oldBMS := b.b.GetAlpha()
|
||||
b.b.SetAlpha(alphaOverride.V1, string(alphaOverride.V2))
|
||||
defer func() { b.b.SetAlpha(oldA, oldBMS) }()
|
||||
}
|
||||
|
||||
fpdfOpt := gofpdf.ImageOptions{
|
||||
ImageType: imageType,
|
||||
ReadDpi: readDpi,
|
||||
@@ -325,4 +353,15 @@ func (b *WPDFBuilder) Image(img *PDFImageRef, opts ...*PDFImageOpt) {
|
||||
}
|
||||
|
||||
b.b.ImageOptions(regName, x, y, w, h, flow, fpdfOpt, link, linkStr)
|
||||
|
||||
if debug {
|
||||
b.Rect(w, h, RectOutline, NewPDFRectOpt().X(x).Y(y).LineWidth(2).DrawColor(255, 0, 0))
|
||||
|
||||
if subImageBounds != nil {
|
||||
r := subImageBounds.Of(imageext.Rectangle{X: x, Y: y, W: w, H: h})
|
||||
b.Rect(r.W, r.H, RectFill, NewPDFRectOpt().X(r.X).Y(r.Y).FillColor(255, 0, 0).Alpha(0.2, BlendNormal))
|
||||
b.Line(r.X, r.Y, r.X+r.W, r.Y+r.H, NewPDFLineOpt().LineWidth(2).DrawColor(255, 0, 0))
|
||||
b.Line(r.X+r.W, r.Y, r.X, r.Y+r.H, NewPDFLineOpt().LineWidth(2).DrawColor(255, 0, 0))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user