github.com/phpdave11/gofpdf@v1.4.2/splittext.go (about) 1 package gofpdf 2 3 import ( 4 "math" 5 // "strings" 6 "unicode" 7 ) 8 9 // SplitText splits UTF-8 encoded text into several lines using the current 10 // font. Each line has its length limited to a maximum width given by w. This 11 // function can be used to determine the total height of wrapped text for 12 // vertical placement purposes. 13 func (f *Fpdf) SplitText(txt string, w float64) (lines []string) { 14 cw := f.currentFont.Cw 15 wmax := int(math.Ceil((w - 2*f.cMargin) * 1000 / f.fontSize)) 16 s := []rune(txt) // Return slice of UTF-8 runes 17 nb := len(s) 18 for nb > 0 && s[nb-1] == '\n' { 19 nb-- 20 } 21 s = s[0:nb] 22 sep := -1 23 i := 0 24 j := 0 25 l := 0 26 for i < nb { 27 c := s[i] 28 l += cw[c] 29 if unicode.IsSpace(c) || isChinese(c) { 30 sep = i 31 } 32 if c == '\n' || l > wmax { 33 if sep == -1 { 34 if i == j { 35 i++ 36 } 37 sep = i 38 } else { 39 i = sep + 1 40 } 41 lines = append(lines, string(s[j:sep])) 42 sep = -1 43 j = i 44 l = 0 45 } else { 46 i++ 47 } 48 } 49 if i != j { 50 lines = append(lines, string(s[j:i])) 51 } 52 return lines 53 }