Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][HTML][PHP] Generowanie PDF zgodne z ilością
Forum PHP.pl > Forum > Przedszkole
nikos
Witam!

W aplikacji którą próbuję zmodyfikować mam generator biletów pdf, generuje on bilety z zamówienia.
Niestety jeśli klient zamówi np ten sam produkt i ustawi w ilości kilka sztuk wydrukuje się tylko jeden bilet.

W jaki sposób można to osiągnąć
  1. // Generate pdf start
  2. private function infoOrderGenerate($ids) {
  3. $this->load->helper('tcpdf_helper');
  4. $this->load->model('companymodel');
  5. tcpdf();
  6. $pdf = new TCPDF('L', 'mm', array(30, 70), true, 'UTF-8', false);
  7. $pdf->SetTitle('PDF');
  8. $pdf->SetFont('helvetica', '', 7, '', 'false');
  9. $pdf->setPrintHeader(false);
  10. $pdf->setPrintFooter(false);
  11. // set margins
  12. $pdf->SetMargins(1, 1, 1);
  13. $pdf->SetHeaderMargin(0);
  14. $pdf->SetFooterMargin(0);
  15. $pdf->SetAutoPageBreak(false);
  16. $pdf->SetDisplayMode('real', 'default');
  17.  
  18. foreach ($ids as $id) {
  19. $template = $this->getDetailsOrder($id);
  20.  
  21.  
  22.  
  23. // $template['codes'] = $this->getDiscountCodeAndShipmentsByOrder($template['orders']->result_array());
  24.  
  25. $company = "";
  26.  
  27. if(isset($template['order'][0]['id_company'])){
  28. $companyName = $this->companymodel->getCompanyName($template['order'][0]['id_company']);
  29. $company = $companyName[0]['name'];
  30. }
  31.  
  32.  
  33.  
  34. $title = $template['order'][0]['first_name'].' '.$template['order'][0]['last_name'].' - '.$template['cases'][0]['casedetails']['case_name'];
  35. $id = $template['order'][0]['id_order'] * 8;
  36. $description = $template['order'][0]['order_note'];
  37. $date = $template['order'][0]['created_at'];
  38.  
  39.  
  40.  
  41.  
  42. foreach($template['cases'] as $value) {
  43.  
  44. $pdf->AddPage();
  45. $html = '<span>'.$value['casedetails']['case_name'].'</span><br>
  46. <span style="font-size: 10px;">Telefon: '.$value['casedetails']['phone_name'].'</span><br>
  47. <span style="font-size: 10px;">Id. '.$id.' - '.$template['order'][0]['first_name'].' '.$template['order'][0]['last_name'].'</span><br>
  48. <span style="font-size: 9px;">Wzór:'.$value['pattern_code'].' Firma: ' . $company .' </span><br>
  49. <span style="font-size: 9px;">Data:'.$date.'</span><br>
  50. <span style="font-size: 8px;">Notatka:'.$description.'</span>
  51. <br pagebreak="true" />';
  52.  
  53. $pdf->writeHTML($html, true, 0, true, 0);
  54. }
  55. $pdf->lastPage();
  56. }
  57.  
  58. $pdf->Output($title.'.pdf', 'I');
  59. }
  60.  
  61. private function getDetailsOrder($id) {
  62. $order = $this->ordermodel->getOrder($id);
  63. $orderDetails['order'] = $order->result_array();
  64.  
  65. if($orderDetails['order'][0]['is_from_discount_code'] == 0) {
  66. $orderDetails['cases'] = $this->ordermodel->getOrderCases($id);
  67. } else {
  68. $orderDetails['cases'] = $this->ordermodel->getOrderCasesByDiscountCode($id);
  69. }
  70.  
  71. $orderDetails['cases'] = $this->addCaseDetailsToOrder($orderDetails['cases']->result_array());
  72.  
  73. return $orderDetails;
  74. }
  75. // Generate pdf stop
  76.  


Wiem, że ilość mogę uzyskać przez
  1. .$value['quantity'].

Poproszę o podpowiedź gdzie i w jaki sposób można byłoby za pomocą pętli wydrukować ten bilet n razy.
Pozdrawiam
trueblue
Poniżej minuty w Google: https://tcpdf.org/examples/example_044/
nikos
Czyli np dodać
  1. ....
  2. $pdf->AddPage();
  3. $html = '<span>'.$value['casedetails']['case_name'].'</span><br>
  4. <span style="font-size: 10px;">Telefon: '.$value['casedetails']['phone_name'].'</span><br>
  5. <span style="font-size: 10px;">Id. '.$id.' - '.$template['order'][0]['first_name'].' '.$template['order'][0]['last_name'].'</span><br>
  6. <span style="font-size: 9px;">Wzór:'.$value['pattern_code'].' Firma: ' . $company .' </span><br>
  7. <span style="font-size: 9px;">Data:'.$date.'</span><br>
  8. <span style="font-size: 8px;">Notatka:'.$description.'ilosc: '.$value['quantity'].' </span>
  9. <br pagebreak="true" />';
  10.  
  11. $pdf->writeHTML($html, true, 0, true, 0);
  12. if($value['quantity']>1){
  13. $pdf->copyPage();
  14. }
  15. }
  16. $pdf->lastPage();
  17. }
  18. ...

Gdy mamy np 2 jeśli mamy więcej to pętla for?
Puszy
Tak z ciekawości, czy przypadkiem każdy bilet nie ma osobnego id, kodu kreskowego etc?
nikos
Cytat(Puszy @ 25.07.2017, 13:23:03 ) *
Tak z ciekawości, czy przypadkiem każdy bilet nie ma osobnego id, kodu kreskowego etc?


Tak jest tam id i może to być mylące jeśli wydrukują się dwa z takim samym
trueblue
To musisz kod HTML wstawić (writeHTML) tyle razy ile zamówiono biletów. Przy czym za każdym razem trzeba podmieniać id w zmiennej przechowującej ten HTML.
Puszy
Zrób funkcję która będzie generowała HTML z biletem i odpowiednimi kodami, za parametr przyjmij te zmienne dane. Potem utwórz PDF i korzystając z pętli dodawaj bloki HTML generowane przez tę funkcje.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.