private function cetakStruk($nama_kasir, $tanggal_transaksi, $item=[], $subtotal, $discount, $ppn, $total) {
// me-load library escpos
$this->load->library('escpos');
try {
// membuat connector printer ke shared printer bernama "injeo_sales_printer" (yang telah disetting sebelumnya)
$connector = new Escpos\PrintConnectors\WindowsPrintConnector("injeo_sales_printer");
// membuat objek $printer agar dapat di lakukan fungsinya
$printer = new Escpos\Printer($connector);
// membuat fungsi untuk membuat 1 baris tabel, agar dapat dipanggil berkali-kali dgn mudah
function buatBaris4Kolom($kolom1, $kolom2, $kolom3, $kolom4) {
// Mengatur lebar setiap kolom (dalam satuan karakter)
$lebar_kolom_1 = 12;
$lebar_kolom_2 = 8;
$lebar_kolom_3 = 8;
$lebar_kolom_4 = 9;
// Melakukan wordwrap(), jadi jika karakter teks melebihi lebar kolom, ditambahkan \n
$kolom1 = wordwrap($kolom1, $lebar_kolom_1, "\n", true);
$kolom2 = wordwrap($kolom2, $lebar_kolom_2, "\n", true);
$kolom3 = wordwrap($kolom3, $lebar_kolom_3, "\n", true);
$kolom4 = wordwrap($kolom4, $lebar_kolom_4, "\n", true);
// Merubah hasil wordwrap menjadi array, kolom yang memiliki 2 index array berarti memiliki 2 baris (kena wordwrap)
$kolom1Array = explode("\n", $kolom1);
$kolom2Array = explode("\n", $kolom2);
$kolom3Array = explode("\n", $kolom3);
$kolom4Array = explode("\n", $kolom4);
// Mengambil jumlah baris terbanyak dari kolom-kolom untuk dijadikan titik akhir perulangan
$jmlBarisTerbanyak = max(count($kolom1Array), count($kolom2Array), count($kolom3Array), count($kolom4Array));
// Mendeklarasikan variabel untuk menampung kolom yang sudah di edit
$hasilBaris = array();
// Melakukan perulangan setiap baris (yang dibentuk wordwrap), untuk menggabungkan setiap kolom menjadi 1 baris
for ($i = 0; $i < $jmlBarisTerbanyak; $i++) {
// memberikan spasi di setiap cell berdasarkan lebar kolom yang ditentukan,
$hasilKolom1 = str_pad((isset($kolom1Array[$i]) ? $kolom1Array[$i] : ""), $lebar_kolom_1, " ");
$hasilKolom2 = str_pad((isset($kolom2Array[$i]) ? $kolom2Array[$i] : ""), $lebar_kolom_2, " ");
// memberikan rata kanan pada kolom 3 dan 4 karena akan kita gunakan untuk harga dan total harga
$hasilKolom3 = str_pad((isset($kolom3Array[$i]) ? $kolom3Array[$i] : ""), $lebar_kolom_3, " ", STR_PAD_LEFT);
$hasilKolom4 = str_pad((isset($kolom4Array[$i]) ? $kolom4Array[$i] : ""), $lebar_kolom_4, " ", STR_PAD_LEFT);
// Menggabungkan kolom tersebut menjadi 1 baris dan ditampung ke variabel hasil (ada 1 spasi disetiap kolom)
$hasilBaris[] = $hasilKolom1 . " " . $hasilKolom2 . " " . $hasilKolom3 . " " . $hasilKolom4;
}
// Hasil yang berupa array, disatukan kembali menjadi string dan tambahkan \n disetiap barisnya.
return implode($hasilBaris, "\n") . "\n";
// Membuat judul
$printer->initialize();
$printer->selectPrintMode(Escpos\Printer::MODE_DOUBLE_HEIGHT); // Setting teks menjadi lebih besar
$printer->setJustification(Escpos\Printer::JUSTIFY_CENTER); // Setting teks menjadi rata tengah
$printer->text("Injeo Sales\n");
$printer->text("\n");
// Data transaksi
$printer->text("Kasir : {$nama_kasir}\n");
$tanggal_transaksi = date("d-m-Y H:i:s" , strtotime($tanggal_transaksi));
$printer->text("Waktu : {$tanggal_transaksi}\n");
// Membuat tabel
$printer->initialize(); // Reset bentuk/jenis teks
$printer->text("----------------------------------------\n");
$printer->text(buatBaris4Kolom("Item", "qty", "Harga", "Total"));
if (sizeof($$item->item_name) > 0) {
for ($i=0; $i < sizeof($item->item_name); $i++) {
$printer->text(buatBaris4Kolom($item->item_name[$i], $item->item_qty[$i].' '.$item->item_unit[$i], $item->item_price[$i], $item->item_total[$i]));
/* $printer->text(buatBaris4Kolom("Makaroni 250gr", "2pcs", "15.000", "30.000"));
$printer->text(buatBaris4Kolom("Telur", "2pcs", "5.000", "10.000"));
$printer->text(buatBaris4Kolom("Tepung terigu", "1pcs", "8.200", "16.400")); */
$printer->text(buatBaris4Kolom('', '', "Sub Total", $subtotal));
$printer->text(buatBaris4Kolom('', '', "Diskon(%)", $discount));
$printer->text(buatBaris4Kolom('', '', "PPN", $ppn));
$printer->text(buatBaris4Kolom('', '', "Total", $total));
// Pesan penutup
$printer->setJustification(Escpos\Printer::JUSTIFY_CENTER);
$printer->text("Terima kasih telah berbelanja\n");
$printer->feed(5); // mencetak 5 baris kosong agar kertas terangkat
$printer->close();
} catch (\Exception $e) {
//exception $e;