Skip to content

Commit

Permalink
Merge branch 'underline' of https://github.com/joewestcott/gofpdf int…
Browse files Browse the repository at this point in the history
…o joewestcott-underline
  • Loading branch information
jung-kurt committed Aug 23, 2019
2 parents ed240cb + 1f076cb commit 1566d94
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 2 deletions.
4 changes: 3 additions & 1 deletion def.go
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ type Pdf interface {
SetTextSpotColor(nameStr string, tint byte)
SetTitle(titleStr string, isUTF8 bool)
SetTopMargin(margin float64)
SetUnderlineThickness(thickness float64)
SetXmpMetadata(xmpStream []byte)
SetX(x float64)
SetXY(x, y float64)
Expand Down Expand Up @@ -595,7 +596,8 @@ type Fpdf struct {
// Composite values of colors
draw, fill, text colorType
}
spotColorMap map[string]spotColorType // Map of named ink-based colors
spotColorMap map[string]spotColorType // Map of named ink-based colors
userUnderlineThickness float64 // A custom user underline thickness multiplier.
}

type encType struct {
Expand Down
9 changes: 8 additions & 1 deletion fpdf.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ func fpdfNew(orientationStr, unitStr, sizeStr, fontDirStr string, size SizeType)
f.layerInit()
f.catalogSort = gl.catalogSort
f.creationDate = gl.creationDate
f.userUnderlineThickness = 1
return
}

Expand Down Expand Up @@ -3538,10 +3539,16 @@ func blankCount(str string) (count int) {
return
}

// SetUnderlineThickness accepts a multiplier for adjusting the text underline
// thickness, defaulting to 1. See SetUnderlineThickness example.
func (f *Fpdf) SetUnderlineThickness(thickness float64) {
f.userUnderlineThickness = thickness
}

// Underline text
func (f *Fpdf) dounderline(x, y float64, txt string) string {
up := float64(f.currentFont.Up)
ut := float64(f.currentFont.Ut)
ut := float64(f.currentFont.Ut) * f.userUnderlineThickness
w := f.GetStringWidth(txt) + f.ws*float64(blankCount(txt))
return sprintf("%.2f %.2f %.2f %.2f re f", x*f.k,
(f.h-(y-up/1000*f.fontSize))*f.k, w*f.k, -ut/1000*f.fontSizePt)
Expand Down
23 changes: 23 additions & 0 deletions fpdf_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2688,3 +2688,26 @@ func ExampleFpdf_RoundedRect() {
// Output:
// Successfully generated pdf/Fpdf_RoundedRect.pdf
}

// ExampleFpdf_SetUnderlineThickness demonstrates how to adjust the text
// underline thickness.
func ExampleFpdf_SetUnderlineThickness() {
pdf := gofpdf.New("P", "mm", "A4", "") // 210mm x 297mm
pdf.AddPage()
pdf.SetFont("Arial", "U", 12)

pdf.SetUnderlineThickness(0.5)
pdf.CellFormat(0, 10, "Thin underline", "", 1, "", false, 0, "")

pdf.SetUnderlineThickness(1)
pdf.CellFormat(0, 10, "Normal underline", "", 1, "", false, 0, "")

pdf.SetUnderlineThickness(2)
pdf.CellFormat(0, 10, "Thicker underline", "", 1, "", false, 0, "")

fileStr := example.Filename("Fpdf_UnderlineThickness")
err := pdf.OutputFileAndClose(fileStr)
example.Summary(err, fileStr)
// Output:
// Successfully generated pdf/Fpdf_UnderlineThickness.pdf
}
Binary file added pdf/reference/Fpdf_UnderlineThickness.pdf
Binary file not shown.

0 comments on commit 1566d94

Please sign in to comment.