Dobra, powiedzmy że zmotywowałeś mnie do dokończenia czegoś co kiedyś zacząłem.
funkcja TextBox, czyli małe rozszerzenie FPDFa
function TextBoxLines($text, $width){
$i = $j = 0;
foreach( $tab as $word ){
if( $this->GetStringWidth($line[$i].$word.' ') < $width ){
$line[$i] .= $word.' ';
}
elseif( $this->GetStringWidth($line[$i].$word) < $width ){
$line[$i] .= $word;
}
else{
$i++;
if( $this->GetStringWidth($word.' ') <= $width ){
$line[$i] .= $word.' ';
}
elseif( $this->GetStringWidth($word) <= $width ){
$line[$i] .= $word;
}
else{
$word .= ' ';
for($j; $j<strlen($word); $j++){
if( $this->GetStringWidth($line[$i].$word[$j]) < $width ){
$line[$i] .= $word[$j];
}
else{
$line[$i++] .= $word[$j];
}
}
}
}
}
}
function TextBox($text, $width, $height, $maxRows, $fontName, $fontStyle, $fontSize, $minFontSize, $fontStep=0.2){
$k = 0;
$this -> SetFont($fontName, $fontStyle, $fontSize);
while($minFontSize <= $fontSize){
$tBoxLines = $this ->TextBoxLines($text, $width);
if($minFontSize >= $fontSize){
for($k;$k<$maxRows;$k++){
$this->Cell($width+4,$height,$tBoxLines[$k],0,1,'L');
}
break;
}
elseif(count($tBoxLines) <= $maxRows){ foreach($tBoxLines as $line){
$this->Cell($width+4,$height,$line,0,1,'L');
}
break;
}
else{
$fontSize = $fontSize - $fontStep;
if($fontSize < $minFontSize){
$fontSize = $minFontSize;
}
$this -> SetFont($fontName, $fontStyle, $fontSize);
}
}
}
Powyższy fragment kodu wklejamy w pliku fpdf.php, za deklaracjami funkcji Cell i GetStringWidth, czyli np. tuż przed funkcją Output;
Argumenty:TextBox(
tekst_który_printujemy,
max_szerokość_w_mm,
wysokość_linii,
max_ilość_wierszy,
nazwa_czcionki,
styl_czcionki,
rozmiar_czcionki,
minimalny_rozmiar_czcionki,
krok_zmniejszania_czcionki-domyslnie:0.2)
Przykład użycia:$pdf->TextBox($text, 50, 6, 3, 'arial_ce', 'B', 11.5, 7, 0.1);
Wyjaśnienie działania:Powyżej użyty TextBox sprawdza ile wierszy o szerokości 50mm (i wysokości 6mm) zajmie tekst $text.
Jeśli tyle (lub mniej) co ustawiona max_ilość_wierszy, czyli 3, to po prostu zwróci odpowiednio zawinięty tekst.
Jeśli ilość wierszy będzie większa, to funkcja zmniejszy czcionkę o wartość 0.1, a więc do wartości 11.4.
Funkcja będzie zmniejszać czcionkę, aż do momentu gdy tekst zmieści się w ustawionej maksymalnej ilości wierszy, czyli w tym przypadku 3 - lub do momentu gdy czcionka osiągnie dolną graniczną wartość - czyli 7. Wtedy funkcja zwróci 3 wiersze tekstu, a resztę odrzuci.
Mogą być jakieś błędy, bo testów zrobiłem niewiele.