create table in pdf with wrap data using fpdf in php

16,955

Try writing problem fields (i.e. description - ones you cannot predict a max length for) using multicell(). This will wrap them on multiple lines.

For each multicell field you will need to use nbLines to see if it is going to wrap and calculate the next line position. you will also need to do a setXY() to set the start of the next cell.

Here is nbLines (found here: http://www.svn.churchtool.org/viewvc/trunk/fpdf/mc_table.php?revision=1&view=markup):

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;
}
Share:
16,955
Admin
Author by

Admin

Updated on June 16, 2022

Comments

  • Admin
    Admin about 2 years

    I have a problem in creating table structure in pdf using fpdf library. when any data of perticular cell have a long string then the cell data will overlap with other cell data. So whole table data has been disordered. then data in pdf will not seem correctly.

    any one please help me to create table in pdf auto adjust all cells according to data in cell.

        <?php
    if($_POST['cmbReportType'] == '1')
    {
    $fromdate = date_format(date_create($_POST['txtFromDate']), 'd-M-y');
    $import = ociparse($c, "SELECT 
                                t2.membercardno, (t1.firstname||' '||t1.middlename||' '||t1.lastname) as fullname,
                                t3.description,
                                to_char(t2.startdate,'DD-MON-YY') startdate,
                                to_char(t2.expirydate,'DD-MON-YY') expirydate,
                                t2.ramount,
                                t1.address1,
                                t1.address2
                            FROM 
                                useradmin t1, 
                                userplan t2, 
                                plan t3
                            WHERE 
                                t1.memberid = t2.memberid
                            AND 
                                t2.planid = t3.planid
                            AND 
                                t1.branchid = 3
                            AND 
                                t2.startdate >= '$fromdate'
                            ORDER BY t2.membercardno");
    
    
    OCIExecute($import);
    $k=0;
    while(OCIFetch($import))
    {
        $a[$k]['membercardno'] = ociresult($import,"MEMBERCARDNO");
        $a[$k]['fullname']   = ociresult($import,"FULLNAME");
        $a[$k]['description'] = ociresult($import,"DESCRIPTION");
        $a[$k]['startdate']  = ociresult($import, "STARTDATE");
        $a[$k]['expirydate'] = ociresult($import, "EXPIRYDATE");
        $a[$k]['ramount']  =  ociresult($import, "RAMOUNT");
        $a[$k]['address1'] = ociresult($import, "ADDRESS1");
        $a[$k]['address2'] = ociresult($import, "ADDRESS2");    
        $k++;
    }
    $resultcount = count($a);
    
    elseif($_POST['rdbReportFormat'] == 'pdf')
    {
    /***This report view in tabular format.****/
        $pdf=new FPDF();
    
    $pdf->AddPage();
    $reportdate = date('d-m-Y');
    $filename = $reportdate.'_report.pdf';
    $pdf->SetFillColor(255,0,0);
    $pdf->SetTextColor(255);
    $pdf->SetDrawColor(128,0,0);
    $pdf->SetLineWidth(.3);
    $pdf->SetFont('Arial', 'B', 6);
    // Header
    $header=array('Member Card No','Full Name','Description', 'Start Date', 'Expiry Date', 'ramount', 'Address1', 'Address2');
    $w = array(25, 35, 35, 15, 18, 15, 30, 30);
    for($i=0;$i<count($header); $i++)
        $pdf->Cell($w[$i],7, $header[$i], 1, 0, 'L', true);
    
    $pdf->Ln();
    
    // Reset colour set for data 
    $pdf->SetFillColor(224,235,255);
    $pdf->SetTextColor(0);
    $pdf->SetFont('courier','',7);
    $fill=false;
    for($i=0;$i<$resultcount;$i++)
    {
        $height =6;
        $pdf->Cell($w[0], '$height', $a[$i]['membercardno'], '1', '0', 'L', $fill);
        $pdf->Cell($w[1], '$height', $a[$i]['fullname'], '1', '0', 'L', $fill);
        $pdf->Cell($w[2], '$height', $a[$i]['description'], '1', '0', 'L', $fill);
        $pdf->Cell($w[3], '$height', $a[$i]['startdate'], '1', '0', 'L', $fill);
        $pdf->Cell($w[4], '$height', $a[$i]['expirydate'], '1', '0', 'L', $fill);
        $pdf->Cell($w[5], '$height', $a[$i]['ramount'], '1', '0', 'L', $fill);
        $pdf->Cell($w[5], '$height', $a[$i]['address1'], '1', '0', 'L', $fill);
        $pdf->Cell($w[5], '$height', $a[$i]['address2'], '1', '0', 'L', $fill);
        $pdf->Ln();
        $fill = !$fill;
    
    }   
    $pdf->Cell(array_sum($w),0,'','T');
    $pdf->Output($filename, 'I');
    }
    }   
    ?>