diff options
author | Kurt Jung <kurt.w.jung@code.google.com> | 2013-09-04 15:06:56 -0400 |
---|---|---|
committer | Kurt Jung <kurt.w.jung@code.google.com> | 2013-09-04 15:06:56 -0400 |
commit | 845888136482c81fd76860b57e254c0e8fa6c149 (patch) | |
tree | 0cb49ce1cf0de4875ee103495490b63b8bccd22c | |
parent | 9b78fbbf6a97869fca10d53e11a52b2d2a9c37a2 (diff) |
Set error condition if out-of-range Unicode rune is encountered in GetStringWidth
-rw-r--r-- | fpdf.go | 13 | ||||
-rw-r--r-- | ttfparser_test.go | 20 |
2 files changed, 30 insertions, 3 deletions
@@ -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 +} |