Dalam pengembangan aplikasi bisnis, kasir, atau sistem inventaris, kemampuan untuk menghasilkan struk atau nota pembelian secara otomatis adalah hal yang krusial. Python, dengan fleksibilitasnya, menawarkan beberapa cara untuk menciptakan output teks terformat yang menyerupai struk fisik. Metode yang paling umum digunakan adalah manipulasi string sederhana, seringkali dikombinasikan dengan pustaka pihak ketiga jika Anda memerlukan format yang lebih kompleks (seperti PDF).
Artikel ini akan fokus pada cara membuat struk menggunakan teknik dasar Python yang cocok untuk printer termal (dot matrix atau thermal receipt printer) yang umumnya mencetak teks mentah.
Struk yang baik memiliki format yang jelas: header, detail item, dan footer (total pembayaran). Karena printer thermal sangat sensitif terhadap spasi dan pemotongan baris, kita akan menggunakan f-string dan metode perataan string bawaan Python (ljust, rjust, center).
Asumsikan kita memiliki data transaksi berikut:
Kita akan menggunakan fungsi untuk mengorganisir proses pembuatan string struk.
def buat_struk(nama_toko, transaksi, total, kasir):
# Tentukan lebar maksimum struk (umumnya 32 atau 40 karakter untuk printer thermal)
LEBAR = 38
struk = []
# HEADER
struk.append(nama_toko.center(LEBAR))
struk.append("=" * LEBAR)
struk.append("KASIR: {}".format(kasir).ljust(LEBAR))
struk.append("-" * LEBAR)
# KOLOM ITEM
# Format: Nama Barang (Kuantitas x Harga) | Subtotal
struk.append("{:<20}{:>10}".format("ITEM", "HARGA"))
struk.append("-" * LEBAR)
for item in transaksi:
nama = item['nama'][:20] # Potong nama jika terlalu panjang
qty = item['qty']
harga_satuan = item['harga']
subtotal = qty * harga_satuan
# Baris Item
deskripsi_item = f"{nama} ({qty}x)"
struk.append(deskripsi_item.ljust(20) + f"{subtotal:10.2f}")
# FOOTER DAN TOTAL
struk.append("=" * LEBAR)
# Baris Total
struk.append("TOTAL BELANJA".ljust(20) + f"{total:10.2f}")
struk.append("-" * LEBAR)
struk.append("TERIMA KASIH".center(LEBAR))
struk.append(" ".center(LEBAR)) # Baris kosong
return "\n".join(struk)
# Data Contoh
data_transaksi = [
{'nama': 'Kopi Susu Gula Aren', 'harga': 15000.00, 'qty': 2},
{'nama': 'Roti Bakar Cokelat Keju', 'harga': 22500.00, 'qty': 1},
]
total_akhir = sum(item['qty'] * item['harga'] for item in data_transaksi)
# Panggil Fungsi
struk_output = buat_struk(
nama_toko="WARUNG KOPI MAJU JAYA",
transaksi=data_transaksi,
total=total_akhir,
kasir="Budi"
)
print(struk_output)
WARUNG KOPI MAJU JAYA
======================================
KASIR: Budi
--------------------------------------
ITEM HARGA
--------------------------------------
Kopi Susu Gula A (2x) 30000.00
Roti Bakar Cokelat K (1x) 22500.00
======================================
TOTAL BELANJA 52500.00
--------------------------------------
TERIMA KASIH
Kunci utama dalam membuat struk teks yang rapi adalah mengontrol posisi teks. Python menyediakan beberapa metode string yang sangat membantu:
.center(width): Memposisikan string tepat di tengah dengan total karakter width. Digunakan untuk judul toko dan pesan terima kasih..ljust(width): Melakukan perataan kiri (Left Justified). String akan diisi spasi di sebelah kanan hingga mencapai width. Ideal untuk nama item..rjust(width): Melakukan perataan kanan (Right Justified). String akan diisi spasi di sebelah kiri. Ideal untuk harga atau jumlah uang.{variabel:format}. Contoh {total:10.2f} berarti tampilkan variabel total sebagai float dengan 2 angka di belakang koma, menempati lebar total 10 karakter (otomatis rata kanan).Setelah Anda berhasil membuat string struk di Python (seperti variabel struk_output di atas), langkah selanjutnya adalah mengirimkan string tersebut ke printer fisik. Metode ini sangat bergantung pada sistem operasi dan jenis koneksi printer (USB, Serial, atau Network).
python-escposUntuk interaksi yang lebih maju, terutama jika Anda perlu mengirim perintah ESC/POS (kode khusus untuk printer thermal seperti memotong kertas, mencetak barcode, atau bold), pustaka seperti python-escpos sangat direkomendasikan. Pustaka ini menyediakan abstraksi yang memudahkan Anda mengirim perintah cetak langsung tanpa perlu mengelola kode ASCII mentah secara manual.
Contoh sederhana penggunaan python-escpos (memerlukan instalasi pip install python-escpos):
from escpos.printer import Usb # Atau Network, atau Serial
# Inisialisasi printer (tergantung vendor dan koneksi)
# p = Usb(idVendor=0x04b8, idProduct=0x0202, profile="POS-80C")
# Jika Anda menggunakan printer network:
# p = Network("192.168.1.100", port=9100)
# Cetak string yang sudah diformat
# p.text(struk_output)
# p.cut() # Perintah memotong kertas
Membuat struk di Python adalah kombinasi antara logika data dan seni pemformatan teks. Dengan menguasai perataan string dasar, Anda dapat membuat output yang terlihat profesional tanpa perlu bergantung pada pustaka grafis yang berat.