Skip to content

Commit

Permalink
Merge branch 'Rjinswand-strikeout'
Browse files Browse the repository at this point in the history
  • Loading branch information
jung-kurt committed Sep 7, 2019
2 parents 225d875 + e123b55 commit 0776f51
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 9 deletions.
1 change: 1 addition & 0 deletions def.go
Original file line number Diff line number Diff line change
Expand Up @@ -542,6 +542,7 @@ type Fpdf struct {
fontFamily string // current font family
fontStyle string // current font style
underline bool // underlining flag
strikeout bool // strike out flag
currentFont fontDefType // current font info
fontSizePt float64 // current font size in points
fontSize float64 // current font size in user unit
Expand Down
30 changes: 26 additions & 4 deletions fpdf.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ func fpdfNew(orientationStr, unitStr, sizeStr, fontDirStr string, size SizeType)
f.fontStyle = ""
f.SetFontSize(12)
f.underline = false
f.strikeout = false
f.setDrawColor(0, 0, 0)
f.setFillColor(0, 0, 0)
f.setTextColor(0, 0, 0)
Expand Down Expand Up @@ -726,6 +727,9 @@ func (f *Fpdf) AddPageFormat(orientationStr string, size SizeType) {
if f.underline {
style += "U"
}
if f.strikeout {
style += "S"
}
fontsize := f.fontSizePt
lw := f.lineWidth
dc := f.color.draw
Expand Down Expand Up @@ -2004,9 +2008,9 @@ func (f *Fpdf) GetFontDesc(familyStr, styleStr string) FontDescType {
// insensitive): "Courier" for fixed-width, "Helvetica" or "Arial" for sans
// serif, "Times" for serif, "Symbol" or "ZapfDingbats" for symbolic.
//
// styleStr can be "B" (bold), "I" (italic), "U" (underscore) or any
// combination. The default value (specified with an empty string) is regular.
// Bold and italic styles do not apply to Symbol and ZapfDingbats.
// styleStr can be "B" (bold), "I" (italic), "U" (underscore), "S" (strike-out)
// or any combination. The default value (specified with an empty string) is
// regular. Bold and italic styles do not apply to Symbol and ZapfDingbats.
//
// size is the font size measured in points. The default value is the current
// size. If no size has been specified since the beginning of the document, the
Expand All @@ -2029,6 +2033,10 @@ func (f *Fpdf) SetFont(familyStr, styleStr string, size float64) {
if f.underline {
styleStr = strings.Replace(styleStr, "U", "", -1)
}
f.strikeout = strings.Contains(styleStr, "S")
if f.strikeout {
styleStr = strings.Replace(styleStr, "S", "", -1)
}
if styleStr == "IB" {
styleStr = "BI"
}
Expand Down Expand Up @@ -2198,6 +2206,9 @@ func (f *Fpdf) Text(x, y float64, txtStr string) {
if f.underline && txtStr != "" {
s += " " + f.dounderline(x, y, txtStr)
}
if f.strikeout && txtStr != "" {
s += " " + f.dostrikeout(x, y, txtStr)
}
if f.colorFlag {
s = sprintf("q %s %s Q", f.color.text.str, s)
}
Expand Down Expand Up @@ -2422,6 +2433,9 @@ func (f *Fpdf) CellFormat(w, h float64, txtStr, borderStr string, ln int,
if f.underline {
s.printf(" %s", f.dounderline(f.x+dx, f.y+dy+.5*h+.3*f.fontSize, txtStr))
}
if f.strikeout {
s.printf(" %s", f.dostrikeout(f.x+dx, f.y+dy+.5*h+.3*f.fontSize, txtStr))
}
if f.colorFlag {
s.printf(" Q")
}
Expand Down Expand Up @@ -2458,7 +2472,7 @@ func reverseText(text string) string {
}

// Cell is a simpler version of CellFormat with no fill, border, links or
// special alignment.
// special alignment. The Cell_strikeout() example demonstrates this method.
func (f *Fpdf) Cell(w, h float64, txtStr string) {
f.CellFormat(w, h, txtStr, "", 0, "L", false, 0, "")
}
Expand Down Expand Up @@ -3554,6 +3568,14 @@ func (f *Fpdf) dounderline(x, y float64, txt string) string {
(f.h-(y-up/1000*f.fontSize))*f.k, w*f.k, -ut/1000*f.fontSizePt)
}

func (f *Fpdf) dostrikeout(x, y float64, txt string) string {
up := float64(f.currentFont.Up)
ut := float64(f.currentFont.Ut)
w := f.GetStringWidth(txt) + f.ws*float64(blankCount(txt))
return sprintf("%.2f %.2f %.2f %.2f re f", x*f.k,
(f.h-(y+4*up/1000*f.fontSize))*f.k, w*f.k, -ut/1000*f.fontSizePt)
}

func bufEqual(buf []byte, str string) bool {
return string(buf[0:len(str)]) == str
}
Expand Down
19 changes: 19 additions & 0 deletions fpdf_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2711,3 +2711,22 @@ func ExampleFpdf_SetUnderlineThickness() {
// Output:
// Successfully generated pdf/Fpdf_UnderlineThickness.pdf
}

// ExampleFpdf_Cell_strikeout demonstrates striked-out text
func ExampleFpdf_Cell_strikeout() {

pdf := gofpdf.New("P", "mm", "A4", "") // 210mm x 297mm
pdf.AddPage()

for fontSize := 4; fontSize < 40; fontSize += 10 {
pdf.SetFont("Arial", "S", float64(fontSize))
pdf.SetXY(0, float64(fontSize))
pdf.Cell(40, 10, "Hello World")
}

fileStr := example.Filename("Fpdf_Cell_strikeout")
err := pdf.OutputFileAndClose(fileStr)
example.Summary(err, fileStr)
// Output:
// Successfully generated pdf/Fpdf_Cell_strikeout.pdf
}
7 changes: 2 additions & 5 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,10 @@ go 1.12

require (
github.com/boombuler/barcode v1.0.0
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/kr/pretty v0.1.0 // indirect
github.com/phpdave11/gofpdi v1.0.7
github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58
github.com/stretchr/testify v1.4.0 // indirect
gofpdf v0.0.0-00010101000000-000000000000
golang.org/x/image v0.0.0-20190902063713-cb417be4ba39
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
)

replace github.com/jung-kurt/gopdf => ./
replace gofpdf => ./

0 comments on commit 0776f51

Please sign in to comment.