summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fpdf.go13
-rw-r--r--ttfparser_test.go20
2 files changed, 30 insertions, 3 deletions
diff --git a/fpdf.go b/fpdf.go
index 7b286a2..a7fb350 100644
--- a/fpdf.go
+++ b/fpdf.go
@@ -658,9 +658,20 @@ func (f *Fpdf) SetTextColor(r, g, b int) {
// Returns the length of a string in user units. A font must be selected.
func (f *Fpdf) GetStringWidth(s string) float64 {
+ if f.err != nil {
+ return 0
+ }
w := 0
+ count := rune(len(f.currentFont.Cw))
for _, ch := range s {
- w += f.currentFont.Cw[ch]
+ if ch < count {
+ w += f.currentFont.Cw[ch]
+ } else {
+ if f.err == nil {
+ f.err = fmt.Errorf("Unicode strings not supported")
+ }
+ return 0
+ }
}
return float64(w) * f.fontSize / 1000
}
diff --git a/ttfparser_test.go b/ttfparser_test.go
index 00f4030..9bb3d71 100644
--- a/ttfparser_test.go
+++ b/ttfparser_test.go
@@ -19,8 +19,7 @@ package gofpdf_test
import (
"code.google.com/p/gofpdf"
"fmt"
-
-// "testing"
+ // "testing"
)
func ExampleTtfParse() {
@@ -67,3 +66,20 @@ func ExampleTtfParse() {
// }
// }
// }
+
+func ExampleFpdf_GetStringWidth() {
+ pdf := gofpdf.New("", "", "", FONT_DIR)
+ pdf.SetFont("Helvetica", "", 12)
+ pdf.AddPage()
+ for _, s := range []string{"Hello", "世界"} {
+ fmt.Printf("Width of \"%s\" is %.2f\n", s, pdf.GetStringWidth(s))
+ if pdf.Err() {
+ fmt.Println(pdf.Error())
+ }
+ }
+ pdf.Close()
+ // Output:
+ // Width of "Hello" is 9.64
+ // Width of "世界" is 0.00
+ // Unicode strings not supported
+}