De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Diego Rafael
Data de Publicação: 26 de Dezembro de 2007
Para quem desenvolve em php e utiliza a classe fpdf para gerar seus relatórios
em pdf já deve ter passado pelo seguinte problema: para gerar a tabela usamos
coordenadas fixas com a função Cell(). Caso o usuário aperte um enter
em um
campo do tipo textarea por exemplo teriamos que usar a função MultiCell()
,
que infelizmente só traz transtornos quando você necessita que os dados
fiquem na mesma coluna, e principalmente se você está utilizando bordas.
A classe abaixo resolverá este problema:
É necessário ter a classe fpdf
no mesmo diretório ou passar o caminho através do require.
<?php require('fpdf.php'); class PDF extends FPDF { var $widths; var $aligns; function SetWidths($w) { //Set the array of column widths $this->widths=$w; } function SetAligns($a) { //Set the array of column alignments $this->aligns=$a; } function Row($data) { //Calculate the height of the row $nb=0; for($i=0;$i< count($data);$i++) $nb=max($nb,$this->NbLines($this->widths[$i],$data[$i])); $h=5*$nb; //Issue a page break first if needed $this->CheckPageBreak($h); //Draw the cells of the row for($i=0;$i< count($data);$i++) { $w=$this->widths[$i]; $a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'L'; //Save the current position $x=$this->GetX(); $y=$this->GetY(); //Draw the border $this->Rect($x,$y,$w,$h); //Print the text $this->MultiCell($w,5,$data[$i],0,$a); //Put the position to the right of the cell $this->SetXY($x+$w,$y); } //Go to the next line $this->Ln($h); } function CheckPageBreak($h) { //If the height h would cause an overflow, add a new page immediately if($this->GetY()+$h>$this->PageBreakTrigger) $this->AddPage($this->CurOrientation); } function NbLines($w,$txt) { //Computes the number of lines a MultiCell of width w will take $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--; $sep=-1; $i=0; $j=0; $l=0; $nl=1; while($i<$nb) { $c=$s[$i]; if($c=="\n") { $i++; $sep=-1; $j=$i; $l=0; $nl++; continue; } if($c==' ') $sep=$i; $l+=$cw[$c]; if($l>$wmax) { if($sep==-1) { if($i==$j) $i++; } else $i=$sep+1; $sep=-1; $j=$i; $l=0; $nl++; } else $i++; } return $nl; } } ?>
Segue exemplo de utilização abaixo:
<?php define('FPDF_FONTPATH','font/'); require('pdf.php'); $pdf=new pdf(); $pdf->Open(); $pdf->AddPage(); $pdf->SetFont('Arial','',14); //Table with 20 rows and 4 columns $pdf->SetWidths(array(30,50,30,40));//CADA VALOR DESTE ARRAY SERÁ A LARGURA DE CADA COLUNA srand(microtime()*1000000); for($i=0;$i<20;$i++) $pdf->Row(array("$valor1","$valor2","$valor3","$valor4")); $pdf->Output(); ?>
O resultado do exemplo esta disponivel em http://www.fpdf.org/en/script/ex3.pdf ou em http://www.dicas-l.com.br/download/ex3.pdf.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários