Показать большую строку в строке, которая превышает размер страницы (FPDF) - PullRequest
1 голос
/ 04 июля 2011

Я хочу показать следующий массив в строке без разрыва.

$header = array('Sl.', 'Session.', 'Time','Filename','Operator Name','Mobile No.','Amount','SSL Status','SSL Time','Operator Status','Op.Time','Reversal Reqd.?');

Но это превышает размер страницы.

Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 04 июля 2011

Я использовал это расширение для класса FPDF.Он вводит метод MultiCell (для моего удобства обернут в метод OutputLines).В этом методе вы можете указать максимальное количество строк.Любая часть строки, которая не подходит, будет возвращена из функции.В этом случае вы можете создать новую функцию и снова вызывать MultiCell, пока она не вернет ''.

<?

require 'fpdf.php';
// Class voor implementate van handige aanvullende features.
class EPDF extends FPDF {

    function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false, $maxline=0)
    {
        //Output text with automatic or explicit line breaks, at most $maxline lines
        $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 && $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;
        $shy=-1;
        $shy1=-1;
        $brk=-1;
        $lshy=0;
          $cx = '';
        $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;
                $shy=-1;
                $shy1=-1;
                $brk=-1;
                $cx='';
                $j=$i;
                $l=0;
                $ns=0;
                $nl++;
                if($border && $nl==2)
                    $b=$b2;
                if($maxline && $nl>$maxline)
                    return substr($s,$i);
                continue;
            }
            if($c==' ')
            {
                $sep=$i;
                $ls=$l;
                $ns++;
            }
            // Soft break (&shy;)
            if ($c==$GLOBALS["hyphen"])
            {
                // Afbreektekentje. Onthouden van laatste en voorlaatste positie.
                $shy1=$shy;
                $shy=$i;
                $lshy1=$lshy;
                $lshy = $l;

                $l-=$cw[$c];
            }
            if ($c=='-')
            {
                $brk=$i;
                $ls = $l + $cw[$c];
                $ns++;
                $cy = '-';
            }
            $l+=$cw[$c];
            if($l>$wmax)
            {
                // Woord past niet meer. Kijken of het af te breken is op een hard afbreekstreepje
                if ($brk>$shy)
                {
                    if ($brk>$sep)
                    {
                        $sep=$brk;
                        $cx='-';
                    }
                }
                elseif ($shy > $sep) // Of op een soft afbreekstreepje
                {
                    if ($lshy + $cw['-'] > $wmax)
                    {
                        if ($shy1 > $sep)
                        {
                            $sep = $shy1;
                            $ls = $lshy1;
                            $cx = '-';
                        }
                    }
                    else
                    {
                        $sep = $shy;
                        $ls = $lshy;
                        $cx = '-';
                    }
                }

                //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).$cx,$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).$cx,$b,2,$align,$fill);
                    $i=$sep+1;
                }
                $sep=-1;
                $shy=-1;
                $shy1=-1;
                    $cx = '';
                $j=$i;
                $l=0;
                $ns=0;
                $nl++;
                if($border && $nl==2)
                    $b=$b2;
                if($maxline && $nl>$maxline)
                {
                    if($this->ws>0)
                    {
                        $this->ws=0;
                        $this->_out('0 Tw');
                    }
                    return substr($s,$i);
                }
            }
            else
                $i++;
        }
        //Last chunk
        if($this->ws>0)
        {
            $this->ws=0;
            $this->_out('0 Tw');
        }
        if($border && 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 '';
    }

    function OutputLines($w, $h, $text, $maxline = 0)
    {
        return $this->MultiCell($w, $h, $text, 0, 'L', false, $maxline);
    }

}
...