2015-02-07 81 views
0

我正尝试使用fpdf动态生成PDF,但我发现它非常困难。我只能得到一半的结果。我想生成我的PDF是这样的:通过fpdf动态生成PDF

Intended result

现在我得到这样一个结果:

Actual result

这里是PDF的代码:

<?php 


require('../fpdf/fpdf.php'); 
error_reporting(-1); 


$id = $_GET['order_id']; 
$db = new mysqli('localhost','root','','dbnme'); // use your credentials 

class INVPDF extends FPDF 
{ 
    var $id; 
    var $today; 
    var $widths; 
    var $heads; 
    var $aligns; 
    var $formats; 
    var $db; 
    var $invTotal = 0; 
    var $advancePaid = 0; 



     //constructor 
     function INVPDF($invno, $db) 
     { 
      parent::fpdf(); 
      $this->id = $invno; 
      $this->db = $db; 
      $this->today = date('jS M Y'); 
      $this->heads = array('Item', 'UOM', 'Price', 'Qty', 'Disc %', 'Tax', 'Frt', 'Total'); 
      $this->widths = array (45, 15, 35, 15, 15, 20, 25, 30); 
      $this->aligns = array ('L','C','L','C','C','R','C', 'C'); 
      $this->formats = array (0,0,0,0,0,1,0,0); 
     } 

     //Page header 
     function Header() 
     {   
       //Arial bold 15 
       //Title 
       include("../connect.php"); 




       $ss1 = "select orders.sales_order_id, orders.company_id, lead_address.address, lead_address.address_category, lead_address.country, lead_address.state, lead_address.company_id, lead_address.city,lead_address.pin from orders INNER JOIN lead_address ON orders.company_id=lead_address.company_id where lead_address.address_category='Billing' AND orders.sales_order_id='".$_GET['order_id']."'"; 
       $mq1 = mysql_query($ss1) or die(mysql_error()); 
       $rr1 = mysql_fetch_array($mq1); 

       $billing = $rr1['address']; 
       list($line1, $line2, $line3) = explode(',',$billing); 
       $country = $rr1['country']; 
       $state = $rr1['state']; 
       $city = $rr1['city']; 
       $pin = $rr1['pin']; 
       //list($line1, $line2, $country, $state, $city, $pin) = explode(',',$address); 
       $ss2 = "select orders.sales_order_id, orders.company_id, lead_address.address, lead_address.address_category, lead_address.country, lead_address.state, lead_address.company_id, lead_address.city,lead_address.pin from orders INNER JOIN lead_address ON orders.company_id=lead_address.company_id where lead_address.address_category='Shipping' AND orders.sales_order_id='".$_GET['order_id']."'"; 

       $mq2 = mysql_query($ss2) or die(mysql_error()); 
       $rr2 = mysql_fetch_array($mq2); 

       $shipping = $rr2['address']; 

       $country1 = $rr2['country']; 
       $state1 = $rr2['state']; 
       $city1 = $rr2['city']; 
       $pin1 = $rr2['pin']; 


       //$email = $rr1['email']; 
//    $phone = $rr1['phone']; 
//    $mobile = $rr1['mobile']; 
//    $this->SetFont('Arial','B',15); 

       $this->setXY(10,20); 
       // $this->Cell(0,10,'INVOICE '.$this->id,0,2,'L'); 
       $this->Image('logo.png',20,6,15); 
       $this->setXY(12,20); 
       // 
       $this->SetFont('OpenSans','',7); 
       $this->Cell(0,10,'Company Name. ',0,2,'L'); 
       $this->Cell(0,0,'Address1, address2',0,2,'L'); 
       $this->Cell(0,8,'city, stte',0,2,'L'); 

       $this->Cell(0,2,'[email protected]',0,2,'L'); 
       //$this->Image('images/logo.png',10,6,60); 

       $this->SetFont('OpenSans','',7); 
       $this->setXY(12,50); 
       $this->Cell(0,-2,'Shipping Address',$this->id,0,2,0,'L'); 
       $this->SetFont('OpenSans','',7); 

       $this->setXY(12,52); 
       $this ->MultiCell(57,22,'', 'LRTB', 'L', 1); 
       //$this->Cell(0,8,$name,$this->id,0,2,0,'L'); 
       $this->setXY(12,55); 
       $this->Cell(0,-1,$shipping,$this->id,0,2,0,'L'); 



       $this->setXY(12,53); 
       $this->Cell(0,10,$country." , ".$state,$this->id,0,2,0,'L'); 

       $this->setXY(12,52); 
       $this->Cell(0,20,$city." , ".$pin,$this->id,0,2,0,'L'); 

       $this->SetFont('OpenSans','',7); 
       $this->setXY(140,52); 
       $this ->MultiCell(57,22,'', 'LRTB', 'L', 1); 

       $this->setXY(140,34); 
       $this->Cell(0,30,'Billing Address',$this->id,0,2,0,'L'); 

       $this->SetFont('OpenSans','',7); 
       $this->setXY(140,35); 
       $this->Cell(0,40,$line1." , ".$line2, $this->id,0,2,0,'L'); 

       $this->setXY(140,35); 
       $this->Cell(0,49,$line3, $this->id,0,2,0,'L'); 

       $this->setXY(140,33); 
       $this->Cell(0,62,$city1." , ".$pin1,$this->id,0,2,0,'L'); 

       $this->setXY(140,33); 
       $this->Cell(0,70,$country1." , ".$state1,$this->id,0,2,0,'L'); 



       //$this->setXY(12,65); 
//    $this->Cell(0,60,$phone,$this->id,0,2,0,'L'); 

       //$this->setXY(12,65); 
       //$this->Cell(0,70,$mobile,$this->id,0,2,0,'L'); 
       $this->SetFont('OpenSans','',7); 
       $this->setXY(10,5); 
       $this->Cell(0,10,'QUOTATION: '.$this->id,0,2,'R'); 



       $this->SetFont('OpenSans','',7); 
       $until = date ('jS F Y', strtotime($this->today)); 
       $this->Cell(0,0,'Date: '.$until,0,2,'R'); 

       $this->SetFont('OpenSans','',7); 
       $this->Cell(0,10,'Due Date: Due on receipt',0,2,'R'); 





       //Line break 
       $this->Ln(60); 
       for ($i=0; $i<9; $i++) 
       { 
        $this->Cell ($this->widths[$i], 8, $this->heads[$i], 1, 0, 'C', 1); 
       } 
       $this->Ln(8); 
     } 

     //Page footer 
     function Footer() 
     { 

      # $this->SetY(-50);   // Uncomment to position at 5 cm from bottom 
      //Arial italic 8 
      $this->SetFont('OpenSans','',8); 
      $w = array_sum(array_slice($this->widths,0,3)); 
      $this->Cell($w,12,'',1); 
      $this->Cell($this->widths[3],12,'',1,0,'C'); 

      $this->setLeftMargin(45 + array_sum(array_slice($this->widths,0,4))); 

      $this->Cell($this->widths[5],4,'Sub Total',1); 
      $this->Cell($this->widths[6],4,number_format($this->invTotal,2),1,0,'R'); 
      $this->Cell($this->widths[7],4,'USD',1,1,'C'); 

      $this->Cell($this->widths[5],4,'Tax',1); 
      $this->Cell($this->widths[6],4,number_format($this->advancePaid,2),1,0,'R'); 
      $this->Cell($this->widths[7],4,'USD',1,1,'C'); 

      $this->Cell($this->widths[5],4,'Freight',1); 
      $this->Cell($this->widths[6],4,number_format($this->freight,2),1,0,'R'); 
      $this->Cell($this->widths[7],4,'USD',1,1,'C'); 

      $this->setLeftMargin(10); 

      $this->Cell($this->widths[5],4,'Total',1); 
      $this->Cell($this->widths[6],4,number_format($this->invTotal+$this->advancePaid,2),1,0,'R'); 
      $this->Cell($this->widths[7],4,'USD',1,1,'C'); 



      $this->SetFont('OpenSans','',6); 
      $this->Cell($w,10,'',0,0,'L'); 
      $this->Cell(30,4,'Private Limited Company - TIN: 345sddd - PAN: sf43534',0,0,'C'); 
      //$this->Cell($w,10,''); 
      $this->Cell(-30,12,'SRVC TAX: gddddddddddd - CIN: sdgdgdgdfgfdgfg',0,0,'C'); 
      $this->Cell(30,20,'This document has been electronically generated and requires no physical signature or stamp.',0,0,'C'); 



     } 

     function makeInvoice() 
      { 


      $sql = "select before_order_line_items.item, before_order_line_items.description, before_order_line_items.uom, before_order_line_items.selling_price, before_order_line_items.quantity, before_order_line_items.discount, before_order_line_items.tax, before_order_line_items.freight, before_order_line_items.tax_amount, before_order_line_items.total, items.name as iname, taxes.tax_id, taxes.name as tname, taxes.rate from before_order_line_items inner join items on before_order_line_items.item=items.item_id inner join taxes on before_order_line_items.tax=taxes.tax_id where before_order_line_items.sales_order_id = '".$_GET['order_id']."' "; 

      //echo $sql;  

      $res = $this->db->query($sql) or die($this->db->error); 
      $this->SetFont('OpenSans','',8); 
      if ($res->num_rows > 0) 
      { 

       while ($r = $res->fetch_row()) 
       { 

        $this->invTotal += $r[10]; 


        foreach ($r as $c => $value) { 
         //echo $value; 
         if ($this->formats[$c]) { 
          $value = number_format($value); 
          // echo $value; 

         } 
         $this->Cell($this->widths[$c],10,$value,'LR',0, $this->aligns[$c]); 


        } 
        $this->Ln(); 
        //$amount = number_format($amount+$value); 

       } 
      }    
     } 

} # invpdf class 

$invno = $_GET['order_id']; 
//Instantiation of inherited class 
$pdf = new INVPDF($invno, $db); 

$pdf->Open(); 
$pdf->AliasNbPages(); 
$pdf->setLeftMargin(10); 
$pdf->setRightMargin(10); 
$pdf->AddFont('OpenSans','','Opensans-Regular.php'); 
$pdf->SetFont('OpenSans','',7); 
$pdf->SetDrawColor(102); 
$pdf->SetFillColor(220); 
$pdf->AddPage(); 
$pdf->makeInvoice(); 
$pdf->Output(); 
?> 

有人可以帮我怎么做吗?或者是否有类似于此的任何示例代码?

+0

(请使用在未来堆栈交易所图像服务器,所以链接是不太可能长期中断。我在他们编辑为你现在)。 – halfer 2015-02-07 09:42:13

+1

谢谢,但我没有足够的声望来发布图片。 – user2823107 2015-02-07 09:45:43

回答

0

看着你的实际PDF和预期的PDF ..你错过了没有。表头中的列。 这LINE-

$this->heads = array('Item', 'UOM', 'Price', 'Qty', 'Disc %', 'Tax', 'Frt', 'Total'); 

应该是─

$this->heads = array('No.', 'Item', 'UOM', 'Price', 'Qty', 'Disc %', 'Tax', 'Frt', 'Total');