| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- package gofpdf
- import (
- "math"
- // "strings"
- "unicode"
- )
- // SplitText splits UTF-8 encoded text into several lines using the current
- // font. Each line has its length limited to a maximum width given by w. This
- // function can be used to determine the total height of wrapped text for
- // vertical placement purposes.
- func (f *Fpdf) SplitText(txt string, w float64) (lines []string) {
- cw := f.currentFont.Cw
- wmax := int(math.Ceil((w - 2*f.cMargin) * 1000 / f.fontSize))
- s := []rune(txt) // Return slice of UTF-8 runes
- nb := len(s)
- for nb > 0 && s[nb-1] == '\n' {
- nb--
- }
- s = s[0:nb]
- sep := -1
- i := 0
- j := 0
- l := 0
- for i < nb {
- c := s[i]
- l += cw[c]
- if unicode.IsSpace(c) || isChinese(c) {
- sep = i
- }
- if c == '\n' || l > wmax {
- if sep == -1 {
- if i == j {
- i++
- }
- sep = i
- } else {
- i = sep + 1
- }
- lines = append(lines, string(s[j:sep]))
- sep = -1
- j = i
- l = 0
- } else {
- i++
- }
- }
- if i != j {
- lines = append(lines, string(s[j:i]))
- }
- return lines
- }
|