2011-07-04 3 views
1

다음 줄을 끊지 않고 한 줄에 표시하려고합니다.큰 문자열을 페이지 크기 (FPDF)를 초과하는 행에 표시

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

그러나 페이지 크기를 초과합니다.

도와주세요.

+0

제가 해결책이라고 생각하는 것을 게시했지만 이런 종류의 질문을 할 때 다음에 달성하고자하는 것을 설명해주십시오. 텍스트가 맞지 않으면 텍스트 줄이기, 여백 늘리기, 글꼴 크기 줄이기 또는 새 페이지 삽입과 같은 옵션을 선택할 수 있습니다. 나는 당신이 마지막 것을 의미한다고 생각했지만, 나는 당신의 질문에서 말할 수 없었습니다. – GolezTrol

답변

0

이 확장 프로그램을 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); 
    } 

}