2016-02-11 39 views
0

我使用TCPDF來打印條碼錶單標籤。 每個標籤都有一個條形碼和一些文字。 Evreything似乎工作正常,但有時文本是漫長的,'入侵'下一個標籤/下一行。在TCPDF中使用GetStringWidth縮短字符串

我試圖檢查字符串的長度 - 並在需要短,如果:

$label_w = ($page_w-$right_mar-$left_mar)/$Col; 
$text_width = $pdf->GetStringWidth($exploded_line[2]); 
while ($text_width>$label_w-15) // "-15" because the text location 
    { 
     $exploded_line[2]=substr($exploded_line[2],0,-1); 
     $text_width = $pdf->GetStringWidth($exploded_line[2]); 
    } 

是進入循環只是繼續萎縮,直到只有首字母左的文字...

起初我以爲問題是我的While條件不是因爲某種原因停止。 然後我試圖將其更改爲簡單if - 但問題是沒有走......

if ($text_width>$label_w-15) 
    { 
     $exploded_line[2]=substr($exploded_line[2],0,-1); 
     $text_width = $pdf->GetStringWidth($exploded_line[2]); 
    } 

有什麼建議?謝謝。

+0

您是否檢查過'$ label_w'和'$ text_width'的值以確保它們是好的?邏輯看起來很好,基本上和我做的一樣,但是我縮小了字體大小而不是刪除字符。 – miken32

+0

當然,'$ label_w'在這個例子中是70,'$ text_width'在40-62之間......如果它超過55(= 70-15),錯誤就會發生。 – HaReL

回答

1

好的,終於我明白了。 問題確實在substr函數中。我使用的是UTF-8,所以我只好用mb_substr ...

$exploded_line[2]=mb_substr($exploded_line[2],0,-1,"utf-8"); 

這是按預期工作。 無論如何,謝謝。