2017-10-09 19 views
7

Tôi có một bộ bảng được phân loại theo nguồn của chúng, ví dụ: "Khách hàng", "Cổ phiếu", "Đồ sàn". Họ trông như thế này:Làm cách nào để thêm tổng số FPDF vào hàng cuối cùng của bảng?

List of Floor Stock orders

Mỗi chứa danh sách giá cả, mà cần phải được bổ sung lên và đạt trên hàng cuối cùng của bảng.

tôi đang gặp vấn đề liên kết một "tổng" mảng vào "bảng" mảng - đặc biệt là hiển thị mỗi tổng vào cuối mỗi bảng

Cho đến nay, tổng số của mỗi bảng được tạo ra trong chức năng khác, nơi sourceTotals là một mảng Ví dụ:

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

này trả về một mảng trông như thế này:

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

Dưới đây là nơi tôi xác định 012 của tôiđối tượng:

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(); 

Chức năng orderDetail là những gì cấu trúc bảng trong vòng đối tượng $pdf để bảng có các tế bào tương ứng với các tên cột đúng:

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'); 
} 

Tôi chỉ không chắc chắn như thế nào để vượt qua setSourceTotalsArray vào orderDetail, vì nỗ lực hiện tại của tôi chỉ trả về null.

Trả lời

5

Phương thức setSourceTotalsArray của bạn không thực sự làm bất cứ điều gì, vì vậy nếu nó trả về null có nghĩa là $data không có nút source_totals. (Đề xuất/sidenote: đặt error reporting thành E_ALL để PHP cảnh báo bạn về điều này; sau đó cho môi trường sống biến display_errors tắt và bật log_errors để bạn thấy lỗi trong nhật ký nhưng khách truy cập sẽ không thấy chúng trên màn hình.) Lý do source_totals không tồn tại trong $data là $ data variable insideđặt hàngDetail is only a subset of $ data` trong toàn bộ tập lệnh.

Điều tôi sẽ làm là thêm đối số $total vào orderDetail. Bạn có được một cái gì đó như thế này:

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

Một cách tuyệt vời để tạo PDF chỉ đơn giản là sử dụng hệ nhị phân wkhtmltopdf.

nếu bạn đã có báo cáo, tạo html, bạn có thể sử dụng bộ đệm đầu ra để tạo html và sau đó chuyển đổi sang pdf, nó có thể chạy trên hầu hết các môi trường và bạn có thể kiểm soát chính xác đầu ra mình muốn, giống như WebKit (Chrome , Safari, v.v.), sử dụng ngôn ngữ quen thuộc (HTML).

HTH.

Các vấn đề liên quan