0

我已经从来自数据库的数据创建了一个 PDF。但是,在创建 PDF 之后,它的格式不是很好。如何生成格式良好的 PDF?
另一个问题是它显示了之前一个字段的值。例如,在地址字段中显示电话号码的结果。请访问此链接并点击给定链接上的 PDF 按钮,您会发现一个结构错误的 PDF 文件。我该如何解决这个问题?

<?php
session_start();
$host="localhost"; // Host name 
$username="weddings_system"; // Mysql username 
$password="smssystem"; // Mysql password 
$db_name="weddings_sms"; // Database name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");
 ob_start();


define('FPDF_FONTPATH','font/');
require('fpdf.php');


 if($_REQUEST['types'] == 'name') {  

                             $query = "SELECT * FROM visitor_detail WHERE name='".$_POST['filter']."' ORDER BY id   DESC ";  
                              }  
                             elseif($_REQUEST['types'] == 'mobile') {  

                              $que = "SELECT * FROM visitor_detail WHERE mobile='".$_POST['filter']."' ORDER BY id  DESC ";  
                             } 
                              elseif($_REQUEST['types'] == 'OccasionType') {  

                             $query = "SELECT * FROM visitor_detail WHERE OccasionType='".$_POST['filter']."'   ORDER BY id DESC ";  
                              } 

                             elseif($_REQUEST['types'] == 'InquiryDate') {  
                             $query="SELECT * FROM visitor_detail WHERE TodayDate between '".$_POST['From']."' and   '".$_POST."' ORDER BY id DESC " ;  
                            }

                              elseif($_REQUEST['types'] == 'OccasionDate') {  
                             $query="SELECT * FROM visitor_detail WHERE date between '".$_POST['From']."' and '".$_POST['To']."' ORDER BY id DESC " ;  
                            }

                              else {  
                              $query = "SELECT * FROM visitor_detail ORDER BY id DESC ";  
                           } 

                             $sql = mysql_query($query);

class PDF_MySQL_Table extends FPDF
{
var $ProcessingTable=false;
var $aCols=array();
var $TableX;
var $HeaderColor;
var $RowColors;
var $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'],10,$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'],10,$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=-20,$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($query,$prop=array())
{
    //Issue query
    $res=mysql_query($query) or die('Error: '.mysql_error()."<BR>Query: $query");
    //Add all columns if none was specified
    if(count($this->aCols)==0)
    {
        $nb=mysql_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(mysql_field_name($res,$col['f']));
        }
    }
    //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=mysql_fetch_array($res))
        $this->Row($row);
    $this->ProcessingTable=false;
    $this->cMargin=$cMargin;
    $this->aCols=array();
}
}


class PDF extends PDF_MySQL_Table
{
function Header()
{

    $this->SetFont('Arial','',18);
    $this->Cell(0,6,'All Products',0,1,'C');
    $this->Ln(10);

    parent::Header();
}
}
$pdf=new PDF();
$pdf->AddPage();

 $pdf->Table($query);

$pdf->Output();

?>
4

0 回答 0