Search code examples
phpfpdf

fpdf display image in table row using table with multilcell


I am having trouble displaying image using fpdf library. I use fpdf Table with MultiCells scripts [http://www.fpdf.org/?go=script&id=3 ].

I can display data by calling this function

$data = [
  ['A','B','C','image_path'],
  ['A','B','C','image_path'],
  ['A','B','C','image_path'],
];
$pdf->Row($header);
foreach($data as $v) $pdf->Row($v);

It will generate data nicely. I want to replace image_path with image . How can I display image using this script?

My pdf will be look like this. enter image description here


Solution

  • Modify PDF_MC_Table class Row() functions by using Inhertence.

    Class Pdf extends PDF_MC_Table{
      protected $imageKey = '';
    
      public function setImageKey($key){
        $this->imageKey = $key;
      }
    
      public function Row($data){
        $nb=0;
        for($i=0;$i<count($data);$i++)
          $nb=max($nb,$this->NbLines($this->widths[$i],$data[$i]));
          $h=5*$nb;
          $this->CheckPageBreak($h);
          for($i=0;$i<count($data);$i++){
            $w=$this->widths[$i];
            $a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'L';
            $x=$this->GetX();
            $y=$this->GetY();
            $this->Rect($x,$y,$w,$h);
    
            //modify functions for image 
            if(!empty($this->imageKey) && in_array($i,$this->imageKey)){
              $ih = $h - 0.5;
              $iw = $w - 0.5;
              $ix = $x + 0.25;
              $iy = $y + 0.25;
              $this->MultiCell($w,5,$this->Image ($data[$i],$ix,$iy,$iw,$ih),0,$a);
            }
            else
              $this->MultiCell($w,5,$data[$i],0,$a);
            $this->SetXY($x+$w,$y);
          }
          $this->Ln($h);
        }
      }
    
    }
    

    Now call this function like this

    $data = [
      ['A','B','C','image_path'],
      ['A','B','C','image_path'],
      ['A','B','C','image_path'],
    ];
    
    $pdf = new Pdf();
    $pdf->AddPage();
    $pdf->setImageKey = [4];
    $pdf->Row($data);