2017-10-09 3 views
7

소스별로 분류 된 표가 있습니다 (예 : "고객", "재고", "바닥재"). 그들은 다음과 같이 : FPDF 합계를 테이블의 마지막 행에 추가하는 방법은 무엇입니까?

List of Floor Stock orders

가 추가 될 필요가 있고 테이블의 마지막 행에 합계 가격의 목록을 포함합니다.

나는 "테이블"배열에 "합계"배열을 연결 문제가 있어요 - 특히

지금까지, 각 테이블의 합계가 다른 함수에서 생성되는 각 테이블의 끝 부분에 각각 총을 표시하는,

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

내가 내 012을 정의 어디에 : 이것은 다음과 같습니다 배열을 반환

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

: 어디 sourceTotals하는 인스턴스 배열입니다 3,목적 :

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을 반환하는 경우 그는 source_totals 노드가없는 $data 의미한다. (제안/배경 : error reportingE_ALL로 설정하면 PHP에서 이에 대해 경고 할 것이므로 실제 환경에서는 display_errors을 해제하고 log_errors을 사용하도록 설정하면 로그에 오류가 표시되지만 방문자가 화면에 표시되지 않도록 할 수 있습니다.) source_totals$data에 존재하지 않는 이유는 전체 스크립트에서 $ 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로 변환하면 대부분의 환경에서 실행될 수 있으며 웹킷 (Chrome)처럼 원하는 출력을 정확하게 제어 할 수 있습니다. , Safari 등)에 익숙한 언어 (HTML)를 사용합니다.

HTH.

관련 문제