From 5cb8bab84fe08b93191ed0385c016592d2ac7cc4 Mon Sep 17 00:00:00 2001 From: hyzgh <31174102+hyzgh@users.noreply.github.com> Date: Tue, 20 Aug 2019 19:50:37 +0800 Subject: fix split line bug Change-Id: I224a7ec1af8386dcbef757c76389fb88316401bc --- fpdf.go | 17 ++++++++++------- splittext.go | 3 +-- util.go | 8 ++++++++ 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/fpdf.go b/fpdf.go index 747346f..7c53811 100644 --- a/fpdf.go +++ b/fpdf.go @@ -2551,20 +2551,23 @@ func (f *Fpdf) MultiCell(w, h float64, txtStr, borderStr, alignStr string, fill } wmax := int(math.Ceil((w - 2*f.cMargin) * 1000 / f.fontSize)) s := strings.Replace(txtStr, "\r", "", -1) + srune := []rune(s) + // remove extra line breaks var nb int if f.isCurrentUTF8 { - nb = len([]rune(s)) - for nb > 0 && []rune(s)[nb-1] == '\n' { + nb = len(srune) + for nb > 0 && srune[nb-1] == '\n' { nb-- - s = string([]rune(s)[0:nb]) } + srune = srune[0:nb] } else { nb = len(s) - if nb > 0 && []byte(s)[nb-1] == '\n' { + bytes2 := []byte(s) + for nb > 0 && bytes2[nb-1] == '\n' { nb-- - s = s[0:nb] } + s = s[0:nb] } // dbg("[%s]\n", s) var b, b2 string @@ -2603,7 +2606,7 @@ func (f *Fpdf) MultiCell(w, h float64, txtStr, borderStr, alignStr string, fill if f.isCurrentUTF8 { c = srune[i] } else { - c = rune(byte(s[i])) + c = rune(s[i]) } if c == '\n' { // Explicit line break @@ -2636,7 +2639,7 @@ func (f *Fpdf) MultiCell(w, h float64, txtStr, borderStr, alignStr string, fill } continue } - if c == ' ' { + if c == ' ' || isChinese(c) { sep = i ls = l ns++ diff --git a/splittext.go b/splittext.go index 3902199..525f93b 100644 --- a/splittext.go +++ b/splittext.go @@ -26,8 +26,7 @@ func (f *Fpdf) SplitText(txt string, w float64) (lines []string) { for i < nb { c := s[i] l += cw[c] - if unicode.IsSpace(c) { - // if c == ' ' || c == '\t' || c == '\n' { + if unicode.IsSpace(c) || isChinese(c) { sep = i } if c == '\n' || l > wmax { diff --git a/util.go b/util.go index 3902500..99a1ba5 100644 --- a/util.go +++ b/util.go @@ -444,3 +444,11 @@ func remove(arr []int, key int) []int { } return append(arr[:n], arr[n+1:]...) } + +func isChinese(rune2 rune) bool { + // chinese unicode: 4e00-9fa5 + if rune2 >= rune(0x4e00) && rune2 <= rune(0x9fa5) { + return true + } + return false +} -- cgit v1.2.1-24-ge1ad