 |
Downloads > Add-On |
 |
|
 |
| |
|
|
|
|
| |
MultiCell with maxline
InformationsAuthor: Jean-Marie Gervais License: Freeware
DescriptionJust a small modification of the original MultiCell function which allows specifying a maxline
parameter.
When reaching this limit, MultiCell stops and returns the part of the string which was cut.
This allows to have multi-columns with variable width, or column break before end of page.
Source
<?php define('FPDF_FONTPATH', 'font/'); require('fpdf.php');
class PDF extends FPDF { function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $maxline=0) { //Output text with automatic or explicit line breaks, maximum of $maxlines $cw=&$this->CurrentFont['cw']; if($w==0) $w=$this->w-$this->rMargin-$this->x; $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; $s=str_replace("\r", '', $txt); $nb=strlen($s); if($nb>0 and $s[$nb-1]=="\n") $nb--; $b=0; if($border) { if($border==1) { $border='LTRB'; $b='LRT'; $b2='LR'; } else { $b2=''; if(is_int(strpos($border, 'L'))) $b2.='L'; if(is_int(strpos($border, 'R'))) $b2.='R'; $b=is_int(strpos($border, 'T')) ? $b2.'T' : $b2; } } $sep=-1; $i=0; $j=0; $l=0; $ns=0; $nl=1; while($i<$nb) { //Get next character $c=$s[$i]; if($c=="\n") { //Explicit line break if($this->ws>0) { $this->ws=0; $this->_out('0 Tw'); } $this->Cell($w, $h, substr($s, $j, $i-$j), $b, 2, $align, $fill); $i++; $sep=-1; $j=$i; $l=0; $ns=0; $nl++; if($border and $nl==2) $b=$b2; if ( $maxline && $nl > $maxline ) return substr($s, $i); continue; } if($c==' ') { $sep=$i; $ls=$l; $ns++; } $l+=$cw[$c]; if($l>$wmax) { //Automatic line break if($sep==-1) { if($i==$j) $i++; if($this->ws>0) { $this->ws=0; $this->_out('0 Tw'); } $this->Cell($w, $h, substr($s, $j, $i-$j), $b, 2, $align, $fill); } else { if($align=='J') { $this->ws=($ns>1) ? ($wmax-$ls)/1000*$this->FontSize/($ns-1) : 0; $this->_out(sprintf('%.3f Tw', $this->ws*$this->k)); } $this->Cell($w, $h, substr($s, $j, $sep-$j), $b, 2, $align, $fill); $i=$sep+1; } $sep=-1; $j=$i; $l=0; $ns=0; $nl++; if($border and $nl==2) $b=$b2; if ( $maxline && $nl > $maxline ) return substr($s, $i); } else $i++; } //Last chunk if($this->ws>0) { $this->ws=0; $this->_out('0 Tw'); } if($border and is_int(strpos($border, 'B'))) $b.='B'; $this->Cell($w, $h, substr($s, $j, $i-$j), $b, 2, $align, $fill); $this->x=$this->lMargin; return ''; } }
$pdf=new PDF(); $pdf->Open(); $pdf->AddPage(); for ($i=1; $i<19; $i++) $txt.='all work and no play makes jack a dull boy '; $pdf->Rect(20, 20, 100, 100); $pdf->Rect(80, 20, 40, 40); $pdf->Rect(20, 80, 40, 40); $pdf->SetXY(20, 20); $pdf->SetFont('Helvetica', '', 10); $txt=$pdf->MultiCell(60, 5, $txt, 0, 'J', 0, 8); $txt=$pdf->MultiCell(100, 5, $txt, 0, 'J', 0, 4); $pdf->SetX(60); $txt=$pdf->MultiCell(60, 5, $txt, 0, 'J', 0, 8);
$pdf->Output(); ?>
|
View the result here.
DownloadZIP | TGZ
| |