I am generating a PDF file based on the selected employee ID i was facing an error on the local system while still in development saying that Fatal error: Uncaught Exception: FPDF error: Some data has already been output, can't send PDF file (output started at the/path)
And then i added these two lines to the php script and it worked fine
ob_start();
and at the end
ob_end_flush();
But after hosting it to the live server the error is thrown again
Have reffered the FPDF documn** ob_end_clean();
** on the beginning of the php script Documentation Link
The complete code for this is as follows,
The empleavehis.php page
<?php
if (isset($_POST['pdfemployeeleave'])) {
ob_start();
require('mysql_table.php');
$link = mysqli_connect('localhost','root','','hr');
$empidinfo=$_REQUEST['empid'];
class PDF extends PDF_MySQL_Table
{
function Header()
{
// Title
$this->Image('img/prudentialshippinglines.png',15,6,15);
$this->SetFont('Arial','',18);
$this->Cell(0,6,'Short Summary ',0,1,'C');
$this->Cell(0,6,' ',0,1,'C');
$this->SetFont('Arial','',15);
$this->Cell(0,6,'History Of Leaves Taken By The Employee',0,1,'C');
$this->Ln(10);
// Ensure table header is printed
parent::Header();
}
}
// Connect to database
$pdf = new PDF('L','mm','A4');
//$pdf->AddPage();
// First table: output all columns
// $pdf->Table($link,'select * from employees where EMP_ID = 1');
$pdf->AddPage();
// Second table: specify 3 columns
$pdf->AddCol('Leave_Type',48,'Type');
$pdf->AddCol('LeaveSub_Type',48,'Sub Type');
$pdf->AddCol('Start',48,'Start');
$pdf->AddCol('End',48,'End');
$pdf->AddCol('Remarks',48,'Remarks');
$pdf->AddCol('Status',48,'Status');
$prop = array('HeaderColor'=>array(255,150,100),
'color1'=>array(210,245,255),
'color2'=>array(255,255,210),
'padding'=>2);
$pdf->Table($link,"select Leave_Type,LeaveSub_Type,Start,End,Remarks,Status from holiday where EMP_ID = '".$empidinfo."'",$prop);
//$pdf->Image('img/male.png',10,10,-300);
$fileName = "Leave Summary Of - ".$row['Name'].".pdf";
$pdf->Output($fileName, 'D');
}
ob_end_flush();
?>
The mysql_table.php file
<?php
require('fpdf.php');
class PDF_MySQL_Table extends FPDF
{
protected $ProcessingTable=false;
protected $aCols=array();
protected $TableX;
protected $HeaderColor;
protected $RowColors;
protected $ColorIndex;
function Header()
{
// Print the table header if necessary
if($this->ProcessingTable)
$this->TableHeader();
}
function TableHeader()
{
$this->SetFont('Arial','B',12);
$this->SetX($this->TableX);
$fill=!empty($this->HeaderColor);
if($fill)
$this->SetFillColor($this->HeaderColor[0],$this->HeaderColor[1],$this->HeaderColor[2]);
foreach($this->aCols as $col)
$this->Cell($col['w'],6,$col['c'],1,0,'C',$fill);
$this->Ln();
}
function Row($data)
{
$this->SetX($this->TableX);
$ci=$this->ColorIndex;
$fill=!empty($this->RowColors[$ci]);
if($fill)
$this->SetFillColor($this->RowColors[$ci][0],$this->RowColors[$ci][1],$this->RowColors[$ci][2]);
foreach($this->aCols as $col)
$this->Cell($col['w'],5,$data[$col['f']],1,0,$col['a'],$fill);
$this->Ln();
$this->ColorIndex=1-$ci;
}
function CalcWidths($width, $align)
{
// Compute the widths of the columns
$TableWidth=0;
foreach($this->aCols as $i=>$col)
{
$w=$col['w'];
if($w==-1)
$w=$width/count($this->aCols);
elseif(substr($w,-1)=='%')
$w=$w/100*$width;
$this->aCols[$i]['w']=$w;
$TableWidth+=$w;
}
// Compute the abscissa of the table
if($align=='C')
$this->TableX=max(($this->w-$TableWidth)/2,0);
elseif($align=='R')
$this->TableX=max($this->w-$this->rMargin-$TableWidth,0);
else
$this->TableX=$this->lMargin;
}
function AddCol($field=-1, $width=-1, $caption='', $align='L')
{
// Add a column to the table
if($field==-1)
$field=count($this->aCols);
$this->aCols[]=array('f'=>$field,'c'=>$caption,'w'=>$width,'a'=>$align);
}
function Table($link, $query, $prop=array())
{
// Execute query
$res=mysqli_query($link,$query) or die('Error: '.mysqli_error($link)."<br>Query: $query");
// Add all columns if none was specified
if(count($this->aCols)==0)
{
$nb=mysqli_num_fields($res);
for($i=0;$i<$nb;$i++)
$this->AddCol();
}
// Retrieve column names when not specified
foreach($this->aCols as $i=>$col)
{
if($col['c']=='')
{
if(is_string($col['f']))
$this->aCols[$i]['c']=ucfirst($col['f']);
else
$this->aCols[$i]['c']=ucfirst(mysqli_fetch_field_direct($res,$col['f'])->name);
}
}
// Handle properties
if(!isset($prop['width']))
$prop['width']=0;
if($prop['width']==0)
$prop['width']=$this->w-$this->lMargin-$this->rMargin;
if(!isset($prop['align']))
$prop['align']='C';
if(!isset($prop['padding']))
$prop['padding']=$this->cMargin;
$cMargin=$this->cMargin;
$this->cMargin=$prop['padding'];
if(!isset($prop['HeaderColor']))
$prop['HeaderColor']=array();
$this->HeaderColor=$prop['HeaderColor'];
if(!isset($prop['color1']))
$prop['color1']=array();
if(!isset($prop['color2']))
$prop['color2']=array();
$this->RowColors=array($prop['color1'],$prop['color2']);
// Compute column widths
$this->CalcWidths($prop['width'],$prop['align']);
// Print header
$this->TableHeader();
// Print rows
$this->SetFont('Arial','',11);
$this->ColorIndex=0;
$this->ProcessingTable=true;
while($row=mysqli_fetch_array($res))
$this->Row($row);
$this->ProcessingTable=false;
$this->cMargin=$cMargin;
$this->aCols=array();
}
}
?>
As far as I have checked I have not left any whitespaces or word spaces and also have tried setting the following
ob_clean();
ob_end_flush();
ini_set("session.auto_start", 0);
Error Image
The files also doesn't contain BOM characters
I shifted the whole fpdf code to the top of the php document and now it is getting downloaded. No changes to the code were done
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.