Reputation: 657
I have a question in FPDF using Php.
What I have in my code right now is column 1 will always follow the height of column 2 like below based on character length.
The problem is only column 2 is working.
When I try to increase the character length in column 1, it will look like this.
When I try to increase the character length in column 2, it will look like this.
When I try to increase the character length in column 3, it will look like this.
How can I make/allow any of the minimum column height always follow the maximum cell height when one of the column increase its character length.
My current code as below.
index.php
class myPDF extends FPDF
{
function HeaderTable(){
$this->SetFont('Arial','B',10);
$this->Cell(275, 5, 'TABLE DATA',0,0);
$this->Ln();
$this->Cell(275, 1, '',0,0);
$this->Ln();
$this->SetFont('Arial','B',6);
$this->Cell(35,5,'COLUMN 1',1,0);
$this->Cell(120,5,'COLUMN 2',1,0);
$this->Cell(120,5,'COLUMN 3',1,0);
$this->Ln();
}
function ViewTable(){
$datatable = array(
array(
"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum ",
"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum ",
"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum "
),
array(
"18 Sept 2018",
"This is second row of data",
"Data here for second row",
),
array(
"18 Sept 2018",
"This is third row of data",
"Data here for third row",
),
);
foreach($datatable as $item)
{
$cellWidth=120;
$cellHeight=5;
if( ($this->GetStringWidth($item[1]) && $this->GetStringWidth($item[2])) < $cellWidth)
{
$line = 1;
$line2 = 1;
}
else
{
$textLength=strlen($item[1]);
$errMargin=10;
$startChar=0;
$maxChar=0;
$textArray=array();
$tmpString="";
$textLength2=strlen($item[2]);
$errMargin2=10;
$startChar2=0;
$maxChar2=0;
$textArray2=array();
$tmpString2="";
// 1
while($startChar < $textLength)
{
while($this->GetStringWidth($tmpString) < ($cellWidth-$errMargin) &&
($startChar+$maxChar) < $textLength)
{
$maxChar++;
$tmpString=substr($item[1], $startChar, $maxChar);
}
$startChar=$startChar+$maxChar;
array_push($textArray, $tmpString);
$maxChar=0;
$tmpString='';
}
// 1
// 2
while($startChar2 < $textLength2)
{
while($this->GetStringWidth($tmpString2) < ($cellWidth-$errMargin2) &&
($startChar2+$maxChar2) < $textLength2)
{
$maxChar2++;
$tmpString2=substr($item[2], $startChar2, $maxChar2);
}
$startChar2=$startChar2+$maxChar2;
array_push($textArray2, $tmpString2);
$maxChar2=0;
$tmpString2='';
}
// 2
$line=count($textArray);
$line2=count($textArray2);
}
$this->Cell(35,($line * $cellHeight),$item[0],1,0);
$xPos=$this->GetX();
$yPos=$this->GetY();
$this->MultiCell($cellWidth, $cellHeight, $item[1],1);
$this->SetXY($xPos + $cellWidth, $yPos);
$this->MultiCell($cellWidth, $cellHeight, $item[2],1);
$this->SetXY($xPos + $cellWidth, $yPos);
}
}
}
$pdf = new myPDF('L','mm','A4');
$pdf->AddPage();
$pdf->HeaderTable();
$pdf->ViewTable();
$pdf->Output();
Appreciate if someone can help me to solve this problem.
Thanks.
Upvotes: 0
Views: 2468
Reputation: 104
To work with tables and multicells you should extend the fpdf class with the PDF_MC_Table class. On this page you will find the source code and examples that can help you. This class was created to work with the tables, I hope this helps you.
Upvotes: 1