From 3e3f1fbc561c4ae28e33d92959d58f2aa74428c8 Mon Sep 17 00:00:00 2001 From: Nick White Date: Tue, 17 Aug 2021 13:05:36 +0100 Subject: [PATCH] Add SetCellStretchToFit() and ResetCellStretch functions The SetCellStretchToFit function can be used to set horizontal stretching of text to fit the full width of a cell. This is particularly useful when trying to precisely line up text in a cell with an OCR image below it, and as a pleasant side-effect can also prevent PDF readers from assuming that words in cells on the same line with some space between them are in fact on different lines when copy-pasting the text. The ResetCellStretch function resets the cell stretch value to the default, which is no stretch (100%). --- fpdf.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/fpdf.go b/fpdf.go index 3be1cdc2..7822d68b 100644 --- a/fpdf.go +++ b/fpdf.go @@ -348,6 +348,20 @@ func (f *Fpdf) SetCellMargin(margin float64) { f.cMargin = margin } +// SetCellStretchToFit sets the horizontal stretch to fit the entireity +// of some text into of a cell of a given width. +func (f *Fpdf) SetCellStretchToFit(w float64, txtStr string) { + stringW := f.GetStringWidth(txtStr) + margin := f.GetCellMargin() + ratio := (w - margin * 2) / stringW + f.outf("BT %.0f Tz ET", ratio * 100) +} + +// ResetCellStretch resets the horizontal stretch to the default. +func (f *Fpdf) ResetCellStretch(w float64, txtStr string) { + f.outf("BT 100 Tz ET") +} + // SetPageBoxRec sets the page box for the current page, and any following // pages. Allowable types are trim, trimbox, crop, cropbox, bleed, bleedbox, // art and artbox box types are case insensitive. See SetPageBox() for a method