PHP PDF написание с несколькими запросами и массивами данных - PullRequest
0 голосов
/ 29 февраля 2012

Эй, ребята, я просто пытаюсь заставить эту глупую вещь работать, и я могу отрегулировать ее оттуда, я начинаю с массива, который скорее всего будет передан через $ _POST,

$cleanArray = array( array('type'=>'berries', 'numb'=>'5555'), 
                     array('type'=>'melons', 'numb'=>'686') );

Затем я объявляю некоторые массивы данных, которые будут предоставлять структуру (если есть лучший способ сделать этот конкретный шаг, ДАЙ МНЕ!), Это три типа, всего шесть.Запрос является уникальным запросом, который необходим каждому типу для получения правильной информации, в то время как размеры являются размерами поля для этого элемента в pdf.

$dataShape = array(
    'berries'   => array(   'sizes' => array( 0 => 25, 1 => 20, 3 => 10, 4 => 15, 5 => 10, 6 => 20, 7 => 20, 8 => 10, 9 => 15, 10 => 10, 11 => 15, 12 => 10, 13 => 10, 14 => 10, 15 => 10, 16 => 10, 17 => 10, 18 => 10, 19 => 200 ),
                            'query' => array( 'shipper, po, commodity as comm, count, size, label, variety, pack_date AS date, grower_lot AS lot, CONCAT(color1, "-", color2) AS color, CONCAT(sizing1, "-", sizing2, " / ", "sizing3", "-", sizing4 ) AS size, CONCAT(firmness1, "-", firmness2) AS firmness, CONCAT(scars_count1, "-", scars_count2) AS scars_count, CONCAT(bruise_count2, "-", bruise_count2) AS bruise_count, CONCAT(decay_count1, "-", decay_count2) AS green, CONCAT(sugar_brix1, "-", sugar_brix2) brix, rating, comments')),
    'citrus'    => array(   'sizes' => array( 0 => 25, 1 => 20, 3 => 10, 4 => 15, 5 => 10, 6 => 20, 7 => 20, 8 => 10, 9 => 15, 10 => 10, 11 => 15, 12 => 10, 13 => 10, 14 => 10, 15 => 10, 16 => 10, 17 => 10, 18 => 10, 19 => 200 ),
                            'query' => array('shipper, po, commodity as comm, count, size, label, variety, pack_date AS date, grower_lot AS lot, CONCAT(color1, "-", color2) AS color, CONCAT(texture1, "-", texture2) AS texture, CONCAT(puff1, "-", puff2) AS puff, CONCAT(scar1, "-", scar2) AS scars, CONCAT(solidity1, "-", solidity2) AS solidity, CONCAT(green1, "-", green2) AS green, CONCAT(sugar_brix1, "-", sugar_brix2) brix, rating, comments')),
    'melons'    => array(   'sizes' => array( 0 => 25, 1 => 20, 3 => 10, 4 => 15, 5 => 10, 6 => 20, 7 => 20, 8 => 10, 9 => 15, 10 => 10, 11 => 15, 12 => 10, 13 => 10, 14 => 10, 15 => 10, 16 => 10, 17 => 10, 18 => 200 ),
                            'query' => array('shipper, po, commodity as comm, count, size, label, variety, pack_date AS date, grower_lot AS lot, CONCAT(color1, "-", color2) AS color, CONCAT(ground_color1, "-", ground_color2) AS ground_color, CONCAT(texture1, "-", texture2) AS texture, CONCAT(scar1, "-", scar2) AS scars, CONCAT(solidity1, "-", solidity2) AS solidity, CONCAT(cut1, "-", cut2) AS cut, CONCAT(sugar_brix1, "-", sugar_brix2) brix, rating, comments')),
);

Затем я пытаюсь выполнить запрос, основываясь на типе и структуре типа, каждый массив получит имя type и превратит каждый раздел в подмассив. Вы можете увидеть это здесь.

foreach($cleanArray as $key=>$val) { echo $key;
    $result[$cleanArray[$key]['type']]
    = $dbc->fetch_array("SELECT ".implode(',',$dataShape[ $cleanArray[$key]['type'] ]['query'])." FROM `"
                        .$cleanArray[$key]['type']."` WHERE (status = '0' OR status = '1') AND `report_key` = "
                        .$cleanArray[$key]['numb']);
}

Затем я пытаюсь добавить страницы и выполнять итерации, это не работает.Он должен использовать ключи один раз, чтобы получить имена столбцов, а затем перебирать значения ключей, пока они не потрачены.Если значения меньше двенадцати строк (всего 24 строки, поскольку комментарии занимают свою собственную строку), итерируйте пустые строки до 12 строк.

foreach($result as $fruitType=>$fruitTypeArray) {
  $nameKeys = array_keys($fruitTypeArray[0]);
  $i=0; $pdf->AddPage('L');  

  foreach($dataShape[$fruitType]['sizes'] as $dataShapevalue) { 
    $pdf->Cell($dataShapevalue6,ucwords(str_replace('_',' ',$nameKeys[$i++])),1,0,'L',1); 
  }

  // go to next row
  $y_axis = $y_axis + $row_height;

  foreach($dataShape[$fruitType]['sizes'] as $dataShapeValue) { 
  foreach($fruitTypeArray as $queryName=>$queryValue) { 
  if(!$queryName=='comments') {
    $pdf->Cell($dataShapeValue,6,$queryValue,1,0,'L',1);
  } else {

  // go to next row
  $y_axis = $y_axis + $row_height;

    $pdf->Cell($dataShapeValue,6,ucwords(str_replace('_',' ',$nameKeys[$i++])),1,0,'L',1); 

  // go to next row
  $y_axis = $y_axis + $row_height;
  }

 }

1 Ответ

0 голосов
/ 01 марта 2012

Мне пришлось все переписать и переписать, вот код для тех, кому не все равно.

<?php

    // temp array
    $cleanArray = array( array('type'=>'berries', 'numb'=>'55555'), 
                         array('type'=>'melons', 'numb'=>'686') );

require('class/pdfwriter/report.php');
require('class/dbconnect.class.php');
require('class/perms.class.php');

include('class/structure.php');

$dbc = Database::obtain(DB_HOST, DB_USER, DB_PASS, DB_NAME);

$pdf = new PDF('P','mm','A4');

    $pdf->AliasNbPages();
    $pdf->AddPage('L');
    $pdf->SetFillColor(255,255,0);
    $pdf->SetAutoPageBreak('margin','1');

    $pad = 277;

    $dbc->connect();

    foreach($cleanArray as $key) {
        $data[] = getSlice($key['type']); // returns types query and cellpad settings
    }

    $i=0;
    foreach($data as $key) {
        $product[$cleanArray[$i]['type']] = $dbc->fetch_array(" SELECT ".implode(',',$key['query'])." FROM `{$cleanArray[$i]['type']}` WHERE (status = '0' OR status = '1') AND `report_key` = {$cleanArray[$i++]['numb']}");
    }

    $current=$i=0;
    foreach($product as $key) {

        $empty = 15 - count($key);
        $margin = $pad / count($key[0])+1;
        $comment = $margin * (count($key[0])-1);
        $total = $margin * (count($key[0])-5);

        $pdf->SetFont('Helvetica','',15);
        $pdf->Cell(0,0,ucwords(str_replace('_',' ',$cleanArray[$i]['type'])),0,0,'C');
        $pdf->SetFont('Arial','B',7);
        $pdf->Ln(5);

    // column names
    foreach($key[0] as $name=>$value) {
            if($name!='comments') { 
                $pdf->Cell($margin,5,strtoupper(str_replace('_',' ',$name)),1,0,'C',1);
            } else { $pdf->Cell($comment,5,'',0,1,'L'); }
    }


    // row values
    $pdf->SetFont('Times','',7);
    foreach($key as $array) {
        foreach($array as $name=>$value) {
            if($name!='comments') { 
                $pdf->Cell($margin,5,$value,1,0,'C',0);
            } else { 
                $pdf->Cell(0,5,'',0,1,'L');
                $pdf->SetFont('Arial','B',7);
                $pdf->Cell($comment,5,'COMMENTS:',1,1,'L',0); 
                $pdf->SetFont('Times','',7);
            }
        }

    }

    while($empty) {
        $innerCount = count($key[0])-1;
        while($innerCount) { 
            $pdf->Cell($margin,5,'',1,0,'C',0);
            $innerCount--;
        }
            $pdf->Cell(0,5,'',0,1,'L');
            $pdf->SetFont('Arial','B',7);
            $pdf->Cell($comment,5,'COMMENTS:',1,1,'L',0); 
            $pdf->SetFont('Times','',7);
        $empty--;
    }

        $pdf->SetFont('Arial','B',7);
        $pdf->Cell($margin,5,'',0,0,'L',0);
        $pdf->Cell($margin,5,'',0,0,'L',0);
        $pdf->Cell($margin,6,'TOTAL',0,0,'C',0);
        $pdf->Cell($margin,5,'',1,0,'L',0);

        $pdf->Cell($total,5,'',1,1,'4',0);

        $pdf->Ln(3);

        $pdf->SetFont('Times','',9);
        $pdf->Cell($pad,5,'This report (including any attachments) contains confidential information for a specific individual and purpose. If you are not the intended recipient',0,1,'C',0);
        $pdf->Cell($pad,5,'you should delete this message and are hearby notified that any disclosure, copying, or distribution of this report is strictly prohibited',0,1,'C',0);

    if(++$current!=count($product)){$pdf->AddPage('L');}
    $i++;
}

$pdf->Output();

?>
...