2017-10-09 6 views
7

私は、ソースによって分類されたテーブルのセットを持っています: "クライアント"、 "ストック"、 "Floorstock"。 彼らは次のようになります。 FPDF合計をテーブルの最後の行に追加する方法はありますか?

List of Floor Stock orders

を加算する必要があるとテーブルの最後の行に合計価格のリストが含まれています。具体的にはこれまでのところ、各テーブルの端

でそれぞれ合計を表示し、各テーブルの合計が、他の機能で生成された - 私が「テーブル」配列に「合計」配列を連結する問題を抱えている

どこsourceTotalsはインスタンスの配列です:

public function setSourceTotalsArray($data) 
{ 
    $this->sourceTotals = $data["source_totals"]; 
    return $this->sourceTotals; 
} 

これは、このようになります配列を返します:私は私の012を定義し

array(4) { ["Floorstock"]=> int(0) ["Stock"]=> int(0) ["Client"]=> float(32.18) } 

はここですオブジェクト:

function orderDetail($data,$currencyShortCode, $type){ 
    $this->orderType = $type; 
    list($currencySymbol, $w_symbol, $cellHight) = $this->getOrderDetailHeader($currencyShortCode, $type); 

    foreach ($data as $d){ 
     $commaValue = $this->addComma((float)$d['value']); 
     $this->Cell(15,$cellHight,$d['order_no'],'LTB',0,'L'); 
     $this->Cell(20,$cellHight,substr($d['customer'],0,13),'TB',0,'L'); 
     $this->Cell(20,$cellHight,substr($d['company'],0,13),'TB',0,'L'); 
     $this->Cell(20,$cellHight,substr($d['ref'],0,13),'TB',0,'L');   
     $this->Cell(2,$cellHight,'','TB',0,'R'); 
     $this->Cell($w_symbol,$cellHight,$currencySymbol,'TB',0,'R'); 
     $this->Cell(16-$w_symbol,$cellHight,$commaValue,'TB',0,'R'); 
     $this->Cell(2,$cellHight,'','TB',0,'R'); 
     $this->Cell(10,$cellHight,$d['cat'],'TB',0,'L'); 
     $this->Cell(84,$cellHight,$d['description'],'RTB',0,'L'); 
     $this->Ln($cellHight); 
    } 
    //BOTTOM TOTAL 
    $this->Cell(13,$cellHight,'TOTAL','LRTB',0,'L'); 
    $this->Cell(22,$cellHight,'','TB',0,'L'); 
    $this->Cell(20,$cellHight,'','TB',0,'L'); 
    $this->Cell(20,$cellHight,'','TB',0,'L'); 
    $this->Cell(4,$cellHight,$currencySymbol,'TB',0,'R'); 
    $this->Cell(14,$cellHight,$this->setSourceTotalsArray($data),'TB',0,'R'); //HERE 
    $this->Cell(2,$cellHight,'','TB',0,'R'); 
    $this->Cell(10,$cellHight,'','TB',0,'L'); 
    $this->Cell(84,$cellHight,'','RTB',0,'L'); 
} 

私はどのようにちょうどよく分からない:

if($_SERVER["REQUEST_METHOD"] == "POST"){ 
$data = json_decode($_POST["printData"],true); 
$pdf = new PDF(); 
// Column headings 
$month = $pdf->getMonth($data['month']); 
$year = $data['year']; 
$pdf->SetFont('Arial','',10); 
$pdf->AddPage(); 
$pdf>title(array('month'=>$month,'year'=>$year,'showroom'=>ucfirst($data['showroom_name']))); 
$pdf->tableBody($data); 

if(!empty($data["order_detail"])){ 
    $customerOrders = array(); 
    $stockOrders = array(); 
    $floorstockOrders = array(); 
    $otherOrders = array(); 

    foreach($data["order_detail"] as $o){ 
     switch($o["orderSource"]){ 
      case 'Client': 
       $customerOrders[] = $o; 
       break; 
      case 'Stock': 
       $stockOrders[] = $o; 
       break; 
      case 'Floorstock': 
       $floorstockOrders[] = $o; 
       break; 

      default: 
       $otherOrders[] = $o; 
       break; 
     } 
    } 

    if (!empty($customerOrders)) { 
     $pdf->orderDetail($customerOrders, $data['currency'], 'Client'); 
    } 

    if (!empty($stockOrders)) { 
     $pdf->orderDetail($stockOrders, $data['currency'], 'Stock'); 
    } 

    if (!empty($floorstockOrders)) { 
     $pdf->orderDetail($floorstockOrders, $data['currency'], 'Floor Stock'); 
    } 

    if (!empty($otherOrders)) { 
     $pdf->orderDetail($otherOrders, $data['currency'], 'Client'); 
    } 
} 
$pdf->Output(); 

orderDetail機能は、表が正しい列名に対応する細胞を持つように$pdfオブジェクト内のどのような構造のテーブルをあります私の現在の試行はnullしか返さないので、setSourceTotalsArrayorderDetailに渡す必要があります。

答えて

5

setSourceTotalsArrayメソッドは実際に何もしないので、nullを返します。つまり、$dataにはsource_totalsというノードがありません。 (提案/謝辞:error reportingE_ALLに設定してください。PHPはこれについて警告しますので、ライブ環境の場合はdisplay_errorsをオフにしてlog_errorsを有効にして、ログにエラーが表示されるようにしてください。 $datasource_totalsが存在しない理由は、フルスクリプトの$ data variable inside orderDetail is only a subset of $ data`です。

$total引数をorderDetailに追加します。

function orderDetail($data,$currencyShortCode, $type, $total) { 
    ... 
    $this->Cell(14,$cellHight, $total,'TB',0,'R'); //HERE 
    ... 
} 

そして

if (!empty($customerOrders)) { 
    $pdf->orderDetail($customerOrders, $data['currency'], 'Client', $data['source_totals']['Client']); 
} 
// Also add the 4th argument for stock orders, floor orders and others. 
2

PDFを生成するためのもう一つの素晴らしい方法は、単にwkhtmltopdfバイナリを使用している:あなたはこのような何かを得ます。

HTMLを生成するレポートがある場合、出力バッファリングを使用してHTMLを生成してからpdfに変換すると、ほとんどの環境で実行でき、WebKit(Chrome 、Safariなど)は、慣れ親しんだ言語(HTML)を使用してそれを行います。

HTH。

関連する問題