summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKurt <kurt.w.jung@gmail.com>2019-09-07 13:02:01 -0400
committerKurt <kurt.w.jung@gmail.com>2019-09-07 13:02:01 -0400
commit0776f5167c90d1ec3c9bf06639767216ba46f665 (patch)
tree3330fc4156a823b8280c07e90e2c348a4b47c67d
parent225d875579b542d345946a136d24f8add53b4dc3 (diff)
parente123b55aba2106cced7941e31391fff7e59d200d (diff)
Merge branch 'Rjinswand-strikeout'
-rw-r--r--def.go1
-rw-r--r--fpdf.go30
-rw-r--r--fpdf_test.go19
-rw-r--r--go.mod7
4 files changed, 48 insertions, 9 deletions
diff --git a/def.go b/def.go
index 47e5135..8e2bea5 100644
--- a/def.go
+++ b/def.go
@@ -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
diff --git a/fpdf.go b/fpdf.go
index c482cb7..7be0117 100644
--- a/fpdf.go
+++ b/fpdf.go
@@ -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)
@@ -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
@@ -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
@@ -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"
}
@@ -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)
}
@@ -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")
}
@@ -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, "")
}
@@ -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
}
diff --git a/fpdf_test.go b/fpdf_test.go
index 43cea30..5035bd8 100644
--- a/fpdf_test.go
+++ b/fpdf_test.go
@@ -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
+}
diff --git a/go.mod b/go.mod
index cbb6a8c..f11d98c 100644
--- a/go.mod
+++ b/go.mod
@@ -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 => ./