Cara mencetak struk dengan PHP EscPOS CodeIgniter Panduan Lengkap
Pada artikel ini, kita akan belajar mencetak data di printer kasir menggunakan PHP CodeIgniter, dengan bantuan EscPOS dan tentunya dengan penjelasannya. Saya usahakan untuk memberikan penjelasan sejelas mungkin.
Langkah dibawah dibuat berdasarkan step by step, dan diberikan download file source code disetiap langkah agar anda dapat memulai dari mana saja.
Artikel ini mungkin berisi sangat panjang, bertujuan agar pembaca tak hanya bisa melakukan tapi bisa mengerti teori sehingga dapat membuat versi kreasinya sendiri.
Baca dengan pelan-pelan dan santai, tulis komentar jika ada yang ditanyakan.
Langsung saja, berikut daftar isinya.
Daftar isi
Menyiapkan printer (install dan share driver)
Printer yang saya gunakan adalah Printer MINIPOS MP-7645 (sama dengan DP7645III). Jika anda menggunakan printer lain, silahkan ikuti panduan instalasi driver sesuai tipe dan merek printer.
Klik link dibawah untuk melihat daftar printer yang dapat di support
https://github.com/mike42/escpos-php
dan ngomong-ngomong, Printer yang saya gunakan tidak terdaftar pada daftar printer yang di support, namun tetap saya coba dan hasilnya bisa bekerja dengan baik meskipun tidak semua perintah kode dapat bekerja (tidak bisa print gambar, barcode, dll).
Tidak apalah karena sudah dapat mencetak teks saja sudah cukup untuk melengkapi sistem.
Tidak apalah karena sudah dapat mencetak teks saja sudah cukup untuk melengkapi sistem.
- Jika anda menggunakan windows 10, anda WAJIB menonaktifkan windows driver signature enforcement verification (jika anda memakai windows 7, abaikan langkah ini), berikut caranya
- Klik start, cari "recovery option" > klik recovery option > pada advanced startup, klik restart now
- Setelah komputer terestart sendiri, klik Troubleshoot > Advanced Options > Startup Setting
- Kemudian, jika tampil menu seperti gambar dibawah ini, dengan keyboard, tekan nomor yang bertulis Disable driver signature enforcement (7)
- Kemudian, Silahkan download driver printer anda. Jika anda menggunakan printer yang sama dengan saya, klik download dibawah.. namun jika anda menggunakan printer lain, install driver berdasarkan petunjuknya.
Impact Printer.rar | ~821KB
- extract hasil download an kedalam folder
- Hidupkan printer, hubungkan kabel USB dengan komputer.
- [Jika anda pengguna Windows 10] Buka Control panel > Devices > Printers and Scanners kemudian klik Add printer, lalu klik The printer that i want isn't listed
- [Jika anda pengguna windows 7 & 8] Buka Control panel > Hardware and Sound > Devices and Printers > Add a printer, lalu klik The printer that i want isn't listed
- Pilih Add a local printer or network printer with manual setting (yang paling bawah) lalu klik Next
- Jika printer sudah terhubung, maka muncul USB00x (virtual printer). pilih lalu klik next
- Kemudian klik Have Disk > klik Browse > buka folder driver hasil download tadi > pilih sesuai os anda (64 atau 32 bit) kemudian klik Open pada file INF nya
- Pilih DP7645III lalu klik next.
- Jika ada tampilan seperti dibawah ini, klik install this driver anyway
- Pilih Do not share this printer, klik next lalu finish
- Printer sudah terinstall.
jika anda menggunakan printer lain, anda dapat mengikuti langkah berikutnya - (jika anda pengguna windows 10) Pada tampilan printers and scanners , klik printer anda lalu klik manage kemudian klik printer properties
- (jika anda pengguna windows 7 & 8) Pada tampilan devices and printers, klik kanan pada printer lalu klik printer properties
- Klik tab sharing > centang share this printer > beri nama pada share name (jangan ada spasi) lalu klik OK
ingat ingat nama printer ini, karena nama ini yang kita tulis didalam kode PHP
Menyiapkan lembar kerja CodeIgniter
Jika anda ingin melewati langkah ini dan ingin langsung ke langkah berikutnya,download source code dibawah ini.
Printkasir.rar (Menyiapkan lembar kerja)
Berikut langkah-langkahnya :
- Download framework CodeIgniter di laman resminya
- Extract isinya, masukkan kedalam folder project htdocs anda. Nama folder/project, terserah anda, namun pada artikel ini kita beri nama printkasir
- Untuk menghilangkan index.php pada URL, buat file .htaccess di rootnya, copy paste kode berikut ini.
RewriteEngine on RewriteCond $1 !^(index\.php|assets|images|js|css|uploads|favicon.png) RewriteCond %(REQUEST_FILENAME) !-f RewriteCond %(REQUEST_FILENAME) !-d RewriteRule ^(.*)$ ./index.php/$1 [L]
- Buka xampp, hidupkan apache, lalu akses localhost/printkasir/welcome
Jika tampil seperti dibawah, berarti anda siap untuk melanjutkan.
Mengintegrasikan library EscPOS dengan CodeIgniter
Jika anda ingin melewati langkah ini dan ingin langsung ke langkah berikutnya (memulai dari sini),
silahkan download source code dibawah.

Printkasir.rar (Integrasi EscPos)
Berikut langkah-langkahnya :
- Download library plugin EscposPHP by Mike42, klik link dibawah
Mike42-Escpos.rar | ~110KB
- Extract isi dari file tersebut ke dalam folder /application/third_party
- Kemudian buat library untuk memanggil autoloader.php yang terdapat didalam plugin dengan cara :
Pada folder application/libraries, buat file bernama Escpos.php, copy paste kode berikut:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class Escpos { public function __construct() { require_once APPPATH . 'third_party/Mike42/autoloader.php'; } } ?>
- Plugin sudah di integrasikan dengan CI, cukup memanggil library nya saja (di langkah berikutnya)
Belajar fungsi dasar EscPOS
berikut deskripsi dari beberapa fungsi yang mungkin sering dipakai.- Initialize()
Berfungsi untuk memulai penulisan printer, selain itu juga untuk mereset settingan tulisan.
Contoh seperti berikut
$printer->initialize();
- text($tulisan)
Menuliskan tulisan berupa string / huruf kedalam printer. gunakan \n untuk ganti baris.
Contoh:
$printer->text("Contoh penulisan teks \n");
- selectPrintMode($mode)
Mengatur teks agar berbentuk seperti mode tertentu. ada 6 mode yang terdapat pada plugin ini
MODE_FONT_A
MODE_FONT_B
MODE_EMPHASIZED
MODE_DOUBLE_HEIGHT
MODE_DOUBLE_WIDTH
MODE_UNDERLINE
Berikut contoh penulisannya
$printer->selectPrintMode(Escpos\Printer::MODE_UNDERLINE);
- setUnderline(true/false)
Mengatur teks agar memiliki garis bawah. Tuliskan true untuk mengaktifkan
Contoh penulisan :
$printer->setUnderline(true);
- setJustification($mode)
Mengatur rata kiri, tengah, atau kanan pada teks. format penulisan parameter seperti berikut
JUSTIFY_LEFT
JUSTIFY_CENTER
JUSTIFY_RIGHT
Berikut contoh penulisannya :
$printer->setJustification(Escpos\Printer::JUSTIFY_LEFT);
- setFont($mode)
Mengatur jenis font tulisan.
Kebanyakan printer memiliki 2 jenis font, dan beberapa printer bahkan memiliki 3 font. parameternya seperti berikut:
FONT_A
FONT_B
FONT_C
berikut contoh penulisannya :
$printer->setFont(Escpos\Printer::FONT_A);
- setLineSpacing($tinggi)
Mengatur jarak setiap baris tulisan. parameter inputan berupa angka
Berikut contoh penulisannya :
$printer->setLineSpacing(40);
- setPrintLeftMargin($jarak)
Mengatur jarak tulisan dari tepi kiri (margin left). Parameter inputan berupa angka
Berikut contoh penulisannya :
$printer->setPrintLeftMargin(20);
- setReverseColor(true/false)
Mengatur tulisan agar warnanya terbalik, teks berwarna putih, dan background berwarna hitam
Berikut contoh penulsiannya :
$printer->setReverseColor(true);
Mencetak bermacam-macam jenis tulisan
Sebelum menerapkan kode kode diatas, kita buat controller dan methodnya terlebih dahulu, kemudian kita tuliskan kode penulisan cetak printer didalam method tersebut.
- Pada Application/controllers, Buat file Transaksi.php
Copy paste kode berikut ini (penjelasan terletak di keterangan kode / comment)
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Transaksi extends CI_Controller { public function cetak_struk() { // Disini kita menuliskan kode penulisan cetak printer } } /* End of file Transaksi.php */ /* Location: ./application/controllers/Transaksi.php */ ?>
- Skenarionya adalah, saya ingin mencoba segala jenis bentuk teks seperti yang dijelaskan satu persatu kode diatas. sehingga terbentuk keseluruhan kode seperti berikut
(penjelasan terletak di keterangan kode / comment)
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Transaksi extends CI_Controller { public function cetak_struk() { // me-load library escpos $this->load->library('escpos'); // membuat connector printer ke shared printer bernama "printer_a" (yang telah disetting sebelumnya) $connector = new Escpos\PrintConnectors\WindowsPrintConnector("printer_a"); // membuat objek $printer agar dapat di lakukan fungsinya $printer = new Escpos\Printer($connector); /* --------------------------------------------------------- * Teks biasa | text() */ $printer->initialize(); $printer->text("Ini teks biasa \n"); $printer->text("\n"); /* --------------------------------------------------------- * Select print mode | selectPrintMode() */ // Printer::MODE_FONT_A $printer->initialize(); $printer->selectPrintMode(Escpos\Printer::MODE_FONT_A); $printer->text("teks dengan MODE_FONT_A \n"); $printer->text("\n"); // Printer::MODE_FONT_B $printer->initialize(); $printer->selectPrintMode(Escpos\Printer::MODE_FONT_B); $printer->text("teks dengan MODE_FONT_B \n"); $printer->text("\n"); // Printer::MODE_EMPHASIZED $printer->initialize(); $printer->selectPrintMode(Escpos\Printer::MODE_EMPHASIZED); $printer->text("teks dengan MODE_EMPHASIZED \n"); $printer->text("\n"); // Printer::MODE_DOUBLE_HEIGHT $printer->initialize(); $printer->selectPrintMode(Escpos\Printer::MODE_DOUBLE_HEIGHT); $printer->text("teks dengan MODE_DOUBLE_HEIGHT \n"); $printer->text("\n"); // Printer::MODE_DOUBLE_WIDTH $printer->initialize(); $printer->selectPrintMode(Escpos\Printer::MODE_DOUBLE_WIDTH); $printer->text("teks dengan MODE_DOUBLE_WIDTH \n"); $printer->text("\n"); // Printer::MODE_UNDERLINE $printer->initialize(); $printer->selectPrintMode(Escpos\Printer::MODE_UNDERLINE); $printer->text("teks dengan MODE_UNDERLINE \n"); $printer->text("\n"); /* --------------------------------------------------------- * Teks dengan garis bawah | setUnderline() */ $printer->initialize(); $printer->setUnderline(Escpos\Printer::UNDERLINE_DOUBLE); $printer->text("Ini teks dengan garis bawah \n"); $printer->text("\n"); /* --------------------------------------------------------- * Rata kiri, tengah, dan kanan (JUSTIFICATION) | setJustification() */ // Teks rata kiri JUSTIFY_LEFT $printer->initialize(); $printer->setJustification(Escpos\Printer::JUSTIFY_LEFT); $printer->text("Ini teks rata kiri \n"); $printer->text("\n"); // Teks rata tengah JUSTIFY_CENTER $printer->initialize(); $printer->setJustification(Escpos\Printer::JUSTIFY_CENTER); $printer->text("Ini teks rata tengah \n"); $printer->text("\n"); // Teks rata kanan JUSTIFY_RIGHT $printer->initialize(); $printer->setJustification(Escpos\Printer::JUSTIFY_RIGHT); $printer->text("Ini teks rata kanan \n"); $printer->text("\n"); /* --------------------------------------------------------- * Font A, B dan C | setFont() */ // Teks dengan font A $printer->initialize(); $printer->setFont(Escpos\Printer::FONT_A); $printer->text("Ini teks dengan font A \n"); $printer->text("\n"); // Teks dengan font B $printer->initialize(); $printer->setFont(Escpos\Printer::FONT_B); $printer->text("Ini teks dengan font B \n"); $printer->text("\n"); // Teks dengan font C $printer->initialize(); $printer->setFont(Escpos\Printer::FONT_C); $printer->text("Ini teks dengan font C \n"); $printer->text("\n"); /* --------------------------------------------------------- * Jarak perbaris 40 (linespace) | setLineSpacing() */ $printer->initialize(); $printer->setLineSpacing(40); $printer->text("Ini paragraf dengan \nline spacing sebesar 40 \ndi printer dotmatrix \n"); $printer->text("\n"); /* --------------------------------------------------------- * Jarak dari kiri (Margin Left) | setPrintLeftMargin() */ $printer->initialize(); $printer->setPrintLeftMargin(10); $printer->text("Ini teks berjarak 10 dari kiri (Margin left) \n"); $printer->text("\n"); /* --------------------------------------------------------- * membalik warna teks (background menjadi hitam) | setReverseColors() */ $printer->initialize(); $printer->setReverseColors(TRUE); $printer->text("Warna Teks ini terbalik \n"); $printer->text("\n"); /* --------------------------------------------------------- * Menyelesaikan printer */ $printer->feed(4); // mencetak 2 baris kosong, agar kertas terangkat ke atas $printer->close(); } } /* End of file Transaksi.php */ /* Location: ./application/controllers/Transaksi.php */ ?>
- Kemudian akses localhost/printkasir/transaksi/cetak_struk
Hasilnya, memang kosong tidak ada output apapun di browser, namun printer secara otomatis mencetak tulisan dan hasilnya seperti berikut :
Pada hasil cetakan diatas, terlihat bahwa print yang saya gunakan (Minipos MP-7645) tidak memiliki font C, tidak support setPrintLeftMargin() dan tidak support setReverseColors().
Mungkin fungsi tersebut bisa digunakan pada printer lain.
Berikut source code nya :
Membuat Table Struk Belanja
Seperti yang kita tahu, plugin EscPos tidak memiliki fitur table, sehingga kita harus buat sendiri menggunakan fungsi fungsi yang ada. Anda bisa saja gunakan fungsi text() dan memberikan spasi setiap kolom sehingga membentuk tabel, namun bagaimana jika isi tabel tersebut bersifat dinamis (berganti-ganti)?
Hal tersebut dapat dilakukan dengan memanipulasi string yang disediakan oleh bahasa pemrograman PHP secara global.
Pada skenario kali ini, kita akan membuat tabel yang memiliki 4 kolom terdiri dari nama barang, jumlah/qty, harga dan subtotal. Namun, kita ingin teks disetiap cellnya dapat berubah-ubah (dapat diset dengan variabel) tanpa merusak kerapian tabel.
[siap-siap berpikir kritis!]
Ide pokoknya / algoritma-nya adalah dengan memberikan 4 variabel teks yang masing-masing diberikan spasi tambahan sehingga jumlah karakter per kolom akan tetap, tak peduli berapapun karakter teksnya (pakai str_pad()). Sehingga jika kolom tersebut digabungkan satu sama lain, akan membentuk 1 baris tabel, dengan posisi teks yang tetap.
Namun, bagaimana jika 1 teks kolom memiliki jumlah karakter melebihi lebar yang ditentukan? maka, teks disetiap kolom perlu dideteksi karakter yang tumpah, lalu taruh di baris berikutnya
Algoritma tersebut dapat membentuk kode seperti berikut:
Copy paste source code berikut kedalam controller transaksi anda
(Penjelasan terletak di keterangan kode / comment) :
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Transaksi extends CI_Controller { public function cetak_struk() { // me-load library escpos $this->load->library('escpos'); // membuat connector printer ke shared printer bernama "printer_a" (yang telah disetting sebelumnya) $connector = new Escpos\PrintConnectors\WindowsPrintConnector("printer_a"); // 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("Nama Toko\n"); $printer->text("\n"); // Data transaksi $printer->initialize(); $printer->text("Kasir : Badar Wildanie\n"); $printer->text("Waktu : 13-10-2019 19:23:22\n"); // Membuat tabel $printer->initialize(); // Reset bentuk/jenis teks $printer->text("----------------------------------------\n"); $printer->text(buatBaris4Kolom("Barang", "qty", "Harga", "Subtotal")); $printer->text("----------------------------------------\n"); $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("----------------------------------------\n"); $printer->text(buatBaris4Kolom('', '', "Total", "56.400")); $printer->text("\n"); // Pesan penutup $printer->initialize(); $printer->setJustification(Escpos\Printer::JUSTIFY_CENTER); $printer->text("Terima kasih telah berbelanja\n"); $printer->text("http://badar-blog.blogspot.com\n"); $printer->feed(5); // mencetak 5 baris kosong agar terangkat (pemotong kertas saya memiliki jarak 5 baris dari toner) $printer->close(); } } /* End of file Transaksi.php */ /* Location: ./application/controllers/Transaksi.php */ ?>
Kemudian, buka url localhost/printkasir/transaksi/cetak_struk pada browser anda..
Printer anda akan mencetak seperti gambar dibawah ini :
Berikut source code nya
Printkasir.rar (Mencetak struk belanja)
Kesimpulan
Setelah anda mempraktekan, silahkan coba buat model pencetakan sesuai kegunaan anda.Jika anda sedang mengerjakan project Point of Sales, anda bisa gunakan button untuk mentrigger request ajax ke method yang digunakan untuk mencetak.
Seperti berikut :
Dan, ngomong-ngomong jika anda minat dengan sistem POS yang saya buat,
silahkan PM WA ke : 082228111059 utk demo aplikasi, harga, dan kesepakatan.[Update: Sistem POS sedang di upgrade sistem kode dan fiturnya menggunakan CodeIgniter 4 dan tempate UI yang lebih interaktif]
Semoga artikel ini bisa bermanfaat ..
Jangan ragu untuk memberikan kritk, saran atau pertanyaan di kolom komentar.
Sekian. terima kasih.
Btw, pada proses penulisan artikel ini, ini kertas dot matrix yang saya habiskan
wkwkwk....
41 Comments
Halo mas, btw kalo untuk pemilihan printernya gimana ya mas, apakah memang mesti fix jenis printer yang disupport yang ada di daftar support printer esc/pos seperti terlihat di sini https://github.com/mike42/escpos-php. Terima kasih.
@Indrato Yang ada di list printer itu adalah printer yang disarankan oleh developernya, dijamin semua fitur bisa kepakai. Kalau printer selain itu, tetep bisa dipakai jika printer tersebut menerima perintah "esc" (biasanya tertulis di printer / boxnya). Contohnya saya pakai MP-7645 masih bisa dipakek.
Wohhhh gitu, thanks mas pencerahannya, sangat bermanfaat...
thanks mas, sudah saya coba dan berhasil, tapi waktu saya coba dihosting koq belum bisa ya?
solusinya mas, terimakasih banyak sebelumnya.
@Unknown iya, pada tutorial ini posisi printer ada di server sehingga proses pencetakan terjadi di server, jadi tidak bisa digunakan jika servernya ada di internet.. untuk sementara ini escpos masih belum support windows usb printing, (tapi kayaknya di linux bisa, namun aku belum pernah nyoba)
jadi, penggunaan terbaiknya di pakai di jaringan lokal, agan juga bisa ngeprint di printer yang terhubung dengan komputer lain dengan menentukan IP komputer tersebut.
contohnya seperti ini:
$connector = new Escpos\PrintConnectors\WindowsPrintConnector("smb://192.168.3.1/printer_a");
$printer = new Escpos\Printer($connector);
mas mau tanya.. saya coba aplikasikan di komputer server dan client menggunakan jaringan lokal dengan xampp, di komputer server berhasil cetak, tapi saat di cetak di komputer client itu selalu cetaknya di printer server terus, bukan di printer client? itu bagaimana mas? solusinya? saya menggunakan printer paraller.
Solusinya ada di komentar diatasnya gan, pada kode instruksi untuk pencetekannya harus di tentukan ip client yang akan digunakan sebagai network printer dengan protokol smb,
(smb itu network sharing khusus windows, jadi pastikan client nya pakai windows)
ini dia
jadi, penggunaan terbaiknya di pakai di jaringan lokal, agan juga bisa ngeprint di printer yang terhubung dengan komputer lain dengan menentukan IP komputer tersebut.
contohnya seperti ini:
$connector = new Escpos\PrintConnectors\WindowsPrintConnector("smb://192.168.3.1/printer_a");
$printer = new Escpos\Printer($connector);
// Instruksi tentang apa yang dicetak
kira kira di apache di centos bisa nggak mas
@yuldi : tergantung dimana letak printernya.. kalau ada di client yang pakai windows, selama connectnya pakai "smb://alamatipclientnya/namaprinter" seperti komen diatas masih bisa kok..
tapi beda lagi kalau printernya ada di server yang mana itu adalah linux, printer connectornya bukan pakai windows connector lagi tapi pakai berikut ini:
$connector = new Escpos\PrintConnectors\FilePrintConnector("/dev/ttyUSB0");
ttyUSB0 itu driver printer yang terpasang di linux, tergantung nginstallnya gimana.
klo printer clientnya ada banyak itu pke smb gimna ya bang??
@Anonymus: kalau saya biasanya saya buatin tabel di database lagi untuk menyimpan tiap-tiap data printernya, isinya nama print dan alamat ip nya,
lalu ip di printernya (pd kasus ini di clientnya juga) saya set ke statis atau bisa juga di binding lewat router (kalau routernya bisa)..
alhasil bisa multi-printer
terserah sih, gk harus lewat database.. bisa juga lewat array. intinya menyimpan kumpulan link ip printer yg akan digunakan.
misal datanya seperti ini:
printer1 -> smb://192.168.1.2/epsonprinter
printer2 -> smb://192.168.1.3/minipos7645
printer3 -> smb://192.168.1.4/php_printer
dst..
kalau mau ngeprint di printer2 tinggal masukkan isi data printer2 ke parameter windowsprintconnector() :)
Hello friends, a question how can I print a logo on the top of the receipt in codinteger?
@Anonymous: Hi!, of course you can but I think you should use printer that listed in escpos github page, There is a function bitImage($image, $size) which you can read more in the link below.
https://github.com/mike42/escpos-php
bang mw tanya klw print gambar gimana ya
Klok cara untuk redirect ke halaman transaksi setelah mencetak gma ya mas
how can i print logo in mike42 in codinteger
@Emfauzan: Bisa pakai header("location:http://urlnya.disini") tuliskan setelah kode pencentakan pada printer.
@Luis: You could use bitImage($image, $size) but make sure you use printer listed in Mike's Escpos repo here : https://github.com/mike42/escpos-php
because it seems like it's a special feature..
Bang ada no hp yng bisa hubungi
@Yudi : ada di menu atas gn
bisa gak om, misal printer nya dari pc lain, yang terhubung 1 jaringan wifi dan printer nya sudah di share, bisa gak om
@Raka: Tentu aja bisa, coba baca komentar diatas,
Solusinya yaitu menggunakan protokol smb:// yaitu pada pc lain, printernya dishare seperti cara yg ditulis diatas lalu dipanggil IPnya menggunakan protokol smb ..
smb://ipnya_pc_lain/nama_shared_printernya
jadi kodingannya seperti ini
$connector = new Escpos\PrintConnectors\WindowsPrintConnector("smb://192.168.3.1/printer_a");
$printer = new Escpos\Printer($connector);
Minusnya adalah, pada pc lain tersebut harus diset static IP agar IPnya gk berubah-ubah, kalau pakai dinamis itu agak susah, harus sinkronisasi IP terus jadinya.
"Klok cara untuk redirect ke halaman transaksi setelah mencetak gma ya mas"
@Emfauzan: Bisa pakai header("location:http://urlnya.disini") tuliskan setelah kode pencentakan pada printer.
aku coba nggaa bisa mas...solusi?
Terima kasih article nya mas...
Dari contoh yang diatas, mas mencontohkan data-data statis seperti ini
$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"));
gimana jika kalau menggunakan dinamis mas ? apakah bisa menggunakan array saja mas ?
mohon beri sample nya mas..
@beginner: solusinya adalah pakai ajax, klo saya sendiri utk pencetakan struk itu biasanya gk perlu refresh atau pindah ke halaman lain, jadi cukup diklik tombol > ajax dilakukan > muncul pesan / notif konfirmasi printer
kalau pakai ajax ya sama aja kode untuk printingnya, bedanya cuma diakses "diam-diam" oleh ajax dari suatu halaman, gitu.
@Klinik Code : data data statis itu bisa diganti dengan dinamis seperti variabel, array, objek apapun itu tanpa merusak tatanan di struknya. jadi cukup ganti aja jadi variabel
misalnya gini:
buatBaris4Kolom($struk->nama_barang, $struk->qty, $struk->harga, $struk->subtotal)
Minat POS nya
@Gudy: maaf gan, waktunya belum tepat kayaknya..
sayangnya sistem pos lama udah corrupt dan dokumen pendukungnya sudah hilang, lagi pula juga sudah outdated.
dan sekarang sistem pos saya masih tahap di redesign dan di koding ulang menggunakan Codeigniter 4 sama fix2 bug terdahulu biar realibilitasnya meningkat.. untuk Oktober November 2020.
ini selesai di November akhir. Kalau sudah, rencananya saya publikasikan panduan, SKPL dan dokumentasinya di blog ini
ok gan siap......
Mas, itu perhitungan kolomnya pakai apa yta? kok bisa dpt angka 12, 8,8,9 gitu?
terus kalau print ke continous paper di epson LX310 itu kan udah ada potongan kertasnya, cm 14cm dan lebar 21.4cm
nah itu perhitungan kolomnya gimana? saya butuh untuk 2 tabel
tabel pertama 2 kolom, masing2 rata kiri dan rata kanan
tabel kedua itu itemnya, 6 kolom
tabel ketiga untuk tanda tangan, kolom kanan dan kolom kiri bagi rata
masing2 justify center
mohon bantuannya
itu dari lebar karakter maksimal yang bisa di print oleh si printernya..
itu sih ya harus dicoba-coba dulu...
kalau di printer saya itu maksimal bisa cetak 40 karakter dalam satu baris,
jadi saya bagi setiap kolom menjadi 12, 8, 8, dan 9 total menjadi 37, 3 sisanya buat spasi antar kolom..
Lebar karakter maksimum ini mungkin berbeda dengan printer agannya
gan mau tanya ..
jadi misalkan di hosting butuh pc yang lain biar bisa print? yang pake ip pc itu..
terus misalkan udh di hosting nah trs pas print nya pake hp ..
lgsg konek ke pc trs print?
@Unknown: Kalau untuk deployment di internet, kondisi yang paling ideal adalah dengan menggunakan Ip publicnya ISP..
misalkan agan menggunakan indihome, itu bisa dimanfaatkan IP Publicnya untuk di port fordwarding ke komputer agan (yang sekaligus jadi printer server).. jadi, komputernya udah menjadi hosting + printernya.. tinggal sewa domain yg diarahkan ke ip public nya.
Tapi kalau webservernya di cloud hosting, bisa juga di set ip printernya ke Ip public komputer printernya (BUKAN Ip lokalnya). Tapi kalau gk langganan ISP ya berubah2 ip publicnya.
Terimakasih...
Worked!
@romiardisaja: sama-sama, selamat mengoprek..
mas, mau tanya...
cara setting margin, gmn ya mas ?
jadi tulisannya itu hilang kekanan gitu...kebtulan saya pake EPSON TM T82 dengan kerta 58mm. Mohon bantuannya mas..
kalau pake printer biasa bisa nggk bang?
@Novinaldi: Kalau mau buat margin bisa pakai setPrintLeftMargin(jarakMargin)
Tapi jika tidak bisa (Terkadang begitu sebab masalah kompatibilitas) bisa juga diakali dengan cara ditambahkan spasi diawal tiap baris.
@hamid alri: nggak bisa bang, ini untuk otomasi printer kasir. Untuk printer biasa cukup desain halaman dokumen menggunakan HTML+CSS lalu user tinggal tekan CTRL+P
Pak, Saya sudah hosting program di web, bagaimana cara supaya
dari sisi client bisa print? adakah library lagi yg langsung bisa pak
Thanks Pak
Pak itu nomer wa nya gak terdaftar ya?
@BennyT : Kalau webapp nya sudah berada di internet, agar bisa printing itu harus dilakukan di client. Jadi harus pakai library yang berbasis JS. Sayangnya saya tidak tau dan belum pernah mencoba print langsung dari cloud. Alternatifnya yaitu mengembangkan aplikasi client side seperti web lokal yang tersinkron dengan cloud, atau bisa juga desktop.
@Abdullah: Nomor sudah diperbarui bang..
mas saya hasil nya tidak sesuai , ketika di print sub total nya di bawah barang kenapa ya?
@sam: Itu karena jumlah karakter maksimal dalam 1 baris lebih sedikit dari yang ditentukan.
Atur variabel lebar_kolom_1, 2, 3 dan 4 agar totalnya menjadi jumlah karakter maksimal dikurangi 3 (3 ini dipakai untuk jarak antar kolom). Contoh pada printer saya bisa muat sampai 40 karakter, jadi saya set ke 12, 8, 8, 9 menjadi total 37...