* @category class * @package core * @subpackage util * @copyright 2005-2017 Titan Framework * @license http://www.titanframework.com/license/ BSD License (3 Clause) * @see Instance, Section, Action * @link http://fpdf.org */ class Pdf extends TitanFPDF { protected $foot = ''; function setFooter ($str) { $this->foot = $str; } function Footer () { $this->SetY (-15); $this->SetFont ('Arial', 'I', 8); $this->Cell (0, 10, $this->foot . $this->PageNo () .' '. __ ('of') .' {nb}', 0, 0, 'C'); } function StartRecord () { $this->page_of_record = $this->page; $this->record = TRUE; } function EndRecord () { $this->record = FALSE; $this->num_pages = 0; } function MultiTupla ($tamcol, $texto = array (), $orientacao = 'P', $align = array (), $altura = 6, $coordXbase = 10) { if($orientacao == 'P') $liminf=265; else $liminf=179; $max=0; $numcol=0; while(isset($tamcol[$numcol])) { if(!isset($align[$numcol])) $align[$numcol]='L'; if(!isset($texto[$numcol])) $texto[$numcol]=""; $numcol++; } for($i=0;$i<$numcol;$i++) { $aux = 0; if(is_array($texto[$i])) { $lin[$i] = array(); foreach($texto[$i] as $linha) { $aux2 = 0; foreach($linha as $j => $value) { $this->StartRecord(); $nlin=$this->MultiCell2($tamcol[$i][$j],$altura,$value,0,$align[$i],0,1); $this->EndRecord(); if($nlin[1] > $aux2) $aux2 = $nlin[1]; } $lin[$i][] = $aux2; $aux += $aux2 + 1; } $aux = $aux - 1; $lin[$i][] = $aux; } else { $this->StartRecord(); $nlin=$this->MultiCell2($tamcol[$i],$altura,$texto[$i],0,$align[$i],0,1); $this->EndRecord(); //echo "c".$nlin[1]."d\n"; $aux = $nlin[1]; $lin[$i] = $aux; } if($max<$aux) $max=$aux; } $cont=($max+1)*$altura; if(($this->GetY() + ($max-1)*6)>$liminf) { $coordY = $this->GetY() + 1000; $this->SetXY($coordXbase,$coordY); $this->Cell(0,0,"",0,0,'C'); } $tam=0; for($i=0;$i<$numcol;$i++) { if(is_array($texto[$i])) { $coordYaux = $this->GetY(); $tam2 = $lin[$i][sizeof($texto[$i])]; $tam2 = ($max - $tam2)/sizeof($texto[$i]); $tam3 = 0; foreach($texto[$i] as $i_linha => $linha) { $tam3 = $tam; $alt_linha = ($tam2 + $lin[$i][$i_linha] + 1)*$altura; foreach($linha as $j => $value) { $coordX = $coordXbase+$tam3; $coordY = $this->GetY() + ($tam2+1)/2; $this->SetXY($coordX,$coordY); $this->StartRecord(); $nlin = $this->MultiCell2($tamcol[$i][$j],$altura, $value,0,$align[$i]); $this->EndRecord(); $coordY = $this->GetY() - ($tam2+1)/2; $this->SetXY($coordXbase+$tam3,$coordY); $this->Cell($tamcol[$i][$j],$alt_linha, "",1,0,'C'); $tam3 = $tam3 + $tamcol[$i][$j]; $this->SetXY($coordXbase+$tam3,$coordY); } $coordY = $this->GetY()+$alt_linha; $this->SetXY($coordXbase+$tam,$coordY); } $tam = $tam3; $this->SetXY($coordXbase,$coordYaux); $this->Cell($tam,$cont, "",1,0,'C'); } else { $tam = $tam + $tamcol[$i]; $tam2 = ($max-$lin[$i])*$altura/2; $coordY = $this->GetY() + $tam2; $this->SetXY($coordXbase+$tam-$tamcol[$i],$coordY); $this->StartRecord(); $this->MultiCell2($tamcol[$i],$altura, $texto[$i],0,$align[$i]); $this->EndRecord(); $coordY = $this->GetY() - $tam2; $this->SetXY($coordXbase,$coordY); $this->Cell($tam,$cont, "",1,0,'C'); } } $coordY = $this->GetY() + $cont; $this->SetXY($coordXbase,$coordY); return ($max+1); } function MultiCell2($w,$h,$txt,$border=0,$align='J',$fill=0,$test=0) { if($this->record) $this->page_aux = $this->page_of_record; //modificacoes... $aux_y = $this->y; $cont_lines = 0; //Output text with automatic or explicit line breaks $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") { //modificacoes... $cont_lines++; //Explicit line break if($this->ws>0) { $this->ws=0; $this->_out('0 Tw'); } if($test==0) $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill, '', true); $i++; $sep=-1; $j=$i; $l=0; $ns=0; $nl++; if($border and $nl==2) $b=$b2; continue; } if($c==' ') { $sep=$i; $ls=$l; $ns++; } $l+=$cw[$c]; if($l>$wmax) { //modificacoes... $cont_lines++; //Automatic line break if($sep==-1) { if($i==$j) $i++; if($this->ws>0) { $this->ws=0; $this->_out('0 Tw'); } if($test==0) $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill, '',true); } 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)); } if($test==0) $this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill, '', true); $i=$sep+1; } $sep=-1; $j=$i; $l=0; $ns=0; $nl++; if($border and $nl==2) $b=$b2; } 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'; if($test==0) $this->Cell($w,$h,substr($s,$j,$i),$b,2,$align,$fill, '', true); $this->x=$this->lMargin; //modificacoes //ret[0]: coordenada y //ret[1]: numero de linhas $ret[0] = $this->y; $ret[1] = $cont_lines; $this->SetY($aux_y); return $ret; } function PrintLine ($width, $text, $x, $y, $border = 1, $tipo = 'f', $ind_J = -1, $B = 1) { // $vet = vetor contendo os elementos de cada coluna e o seu tamanho ex: $vet = array("text"=> 'teste', "width" => '30'); // tipo 'f' é formulario, tipo 't' é tabela $coordY=$this->GetY(); //echo $coordY." ".$text[0]."
"; if ($this->PageEnd($coordY)) { $this->SetXY(15,$coordY); return $this->PrintLine($width, $text,$x,$coordY,$border,$tipo,$ind_J,$B); } $n = sizeof ($width); $max = array(); if ($tipo == 'f' ) $align = "J"; else $align = "C"; for ($i=0;$i<$n;$i++) { if ($tipo == 'f' ) if ( $i%2 == 0 ) $this->SetFont('Arial','B'); else $this->SetFont('Arial',''); else if ($tipo=='t' ) if ($i==0 && $B) $this->SetFont('Arial','B'); else $this->SetFont('Arial',''); $var = $this->MultiCell($width[$i],5,$text[$i],1,$align,0,1); $max[$i]=($var[1]+1)*5; } $altura = max($max); $ind = array_search($altura ,$max); //Inicio da Impressao for ($i=0;$i<$n;$i++) { if ($ind_J != -1) if ( $i == $ind_J) $align = "J"; else $align = "C"; if ($tipo == 'f' ) if ( $i%2 == 0 ) $this->SetFont('Arial','B'); else $this->SetFont('Arial',''); else if ($tipo=='t') if ($i==0 && $B) $this->SetFont('Arial','B'); else $this->SetFont('Arial',''); $this->SetXY($x,$y); $temp=5*($altura/$max[$i]) ; //echo "$i -> $temp
"; //echo $align." ".$text[$i]."
"; $this->MultiCell($width[$i],$temp,$text[$i],$border,$align,0,0); $x += $width[$i]; } //echo "altura = $altura
"; return $altura; } function PageEnd ($coordY) { return $coordY >= $this->h; } }