Cara menggunakan print struk dengan php

  1. private function cetakStruk($nama_kasir, $tanggal_transaksi, $item=[], $subtotal, $discount, $ppn, $total) {

  2. // me-load library escpos

  3. $this->load->library('escpos');

  4. try {

  5. // membuat connector printer ke shared printer bernama "injeo_sales_printer" (yang telah disetting sebelumnya)

  6. $connector = new Escpos\PrintConnectors\WindowsPrintConnector("injeo_sales_printer");

  7. // membuat objek $printer agar dapat di lakukan fungsinya

  8. $printer = new Escpos\Printer($connector);

  9. // membuat fungsi untuk membuat 1 baris tabel, agar dapat dipanggil berkali-kali dgn mudah

  10. function buatBaris4Kolom($kolom1, $kolom2, $kolom3, $kolom4) {

  11. // Mengatur lebar setiap kolom (dalam satuan karakter)

  12. $lebar_kolom_1 = 12;

  13. $lebar_kolom_2 = 8;

  14. $lebar_kolom_3 = 8;

  15. $lebar_kolom_4 = 9;

  16. // Melakukan wordwrap(), jadi jika karakter teks melebihi lebar kolom, ditambahkan \n 

  17. $kolom1 = wordwrap($kolom1, $lebar_kolom_1, "\n", true);

  18. $kolom2 = wordwrap($kolom2, $lebar_kolom_2, "\n", true);

  19. $kolom3 = wordwrap($kolom3, $lebar_kolom_3, "\n", true);

  20. $kolom4 = wordwrap($kolom4, $lebar_kolom_4, "\n", true);

  21. // Merubah hasil wordwrap menjadi array, kolom yang memiliki 2 index array berarti memiliki 2 baris (kena wordwrap)

  22. $kolom1Array = explode("\n", $kolom1);

  23. $kolom2Array = explode("\n", $kolom2);

  24. $kolom3Array = explode("\n", $kolom3);

  25. $kolom4Array = explode("\n", $kolom4);

  26. // Mengambil jumlah baris terbanyak dari kolom-kolom untuk dijadikan titik akhir perulangan

  27. $jmlBarisTerbanyak = max(count($kolom1Array), count($kolom2Array), count($kolom3Array), count($kolom4Array));

  28. // Mendeklarasikan variabel untuk menampung kolom yang sudah di edit

  29. $hasilBaris = array();

  30. // Melakukan perulangan setiap baris (yang dibentuk wordwrap), untuk menggabungkan setiap kolom menjadi 1 baris 

  31. for ($i = 0; $i < $jmlBarisTerbanyak; $i++) {

  32. // memberikan spasi di setiap cell berdasarkan lebar kolom yang ditentukan, 

  33. $hasilKolom1 = str_pad((isset($kolom1Array[$i]) ? $kolom1Array[$i] : ""), $lebar_kolom_1, " ");

  34. $hasilKolom2 = str_pad((isset($kolom2Array[$i]) ? $kolom2Array[$i] : ""), $lebar_kolom_2, " ");

  35. // memberikan rata kanan pada kolom 3 dan 4 karena akan kita gunakan untuk harga dan total harga

  36. $hasilKolom3 = str_pad((isset($kolom3Array[$i]) ? $kolom3Array[$i] : ""), $lebar_kolom_3, " ", STR_PAD_LEFT);

  37. $hasilKolom4 = str_pad((isset($kolom4Array[$i]) ? $kolom4Array[$i] : ""), $lebar_kolom_4, " ", STR_PAD_LEFT);

  38. // Menggabungkan kolom tersebut menjadi 1 baris dan ditampung ke variabel hasil (ada 1 spasi disetiap kolom)

  39. $hasilBaris[] = $hasilKolom1 . " " . $hasilKolom2 . " " . $hasilKolom3 . " " . $hasilKolom4;

  40. }

  41. // Hasil yang berupa array, disatukan kembali menjadi string dan tambahkan \n disetiap barisnya.

  42. return implode($hasilBaris, "\n") . "\n";

  43. }

  44. // Membuat judul

  45. $printer->initialize();

  46. $printer->selectPrintMode(Escpos\Printer::MODE_DOUBLE_HEIGHT); // Setting teks menjadi lebih besar

  47. $printer->setJustification(Escpos\Printer::JUSTIFY_CENTER); // Setting teks menjadi rata tengah

  48. $printer->text("Injeo Sales\n");

  49. $printer->text("\n");

  50. // Data transaksi

  51. $printer->initialize();

  52. $printer->text("Kasir : {$nama_kasir}\n");

  53. $tanggal_transaksi = date("d-m-Y H:i:s" , strtotime($tanggal_transaksi));

  54. $printer->text("Waktu : {$tanggal_transaksi}\n");

  55. // Membuat tabel

  56. $printer->initialize(); // Reset bentuk/jenis teks

  57. $printer->text("----------------------------------------\n");

  58. $printer->text(buatBaris4Kolom("Item", "qty", "Harga", "Total"));

  59. $printer->text("----------------------------------------\n");

  60. if (sizeof($$item->item_name) > 0) {

  61. for ($i=0; $i < sizeof($item->item_name); $i++) { 

  62. $printer->text(buatBaris4Kolom($item->item_name[$i], $item->item_qty[$i].' '.$item->item_unit[$i], $item->item_price[$i], $item->item_total[$i]));

  63. }

  64. }

  65. /* $printer->text(buatBaris4Kolom("Makaroni 250gr", "2pcs", "15.000", "30.000"));

  66.             $printer->text(buatBaris4Kolom("Telur", "2pcs", "5.000", "10.000"));

  67.             $printer->text(buatBaris4Kolom("Tepung terigu", "1pcs", "8.200", "16.400")); */

  68. $printer->text("----------------------------------------\n");

  69. $printer->text(buatBaris4Kolom('', '', "Sub Total", $subtotal));

  70. $printer->text(buatBaris4Kolom('', '', "Diskon(%)", $discount));

  71. $printer->text(buatBaris4Kolom('', '', "PPN", $ppn));

  72. $printer->text(buatBaris4Kolom('', '', "Total", $total));

  73. $printer->text("\n");

  74. // Pesan penutup

  75. $printer->initialize();

  76. $printer->setJustification(Escpos\Printer::JUSTIFY_CENTER);

  77. $printer->text("Terima kasih telah berbelanja\n");

  78. $printer->feed(5); // mencetak 5 baris kosong agar kertas terangkat

  79. $printer->close();

  80. } catch (\Exception $e) {

  81. //exception $e;

  82. }

  83. }