Simbol Tanda Terima / Struk

Panduan Lengkap Cara Membuat Struk di Python

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.

1. Struktur Dasar Struk Teks

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).

Data yang Dibutuhkan

Asumsikan kita memiliki data transaksi berikut:

2. Implementasi Python dengan F-String dan Perataan

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)
        

Pratinjau Hasil 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           
            

3. Pemahaman Metode String untuk Perataan

Kunci utama dalam membuat struk teks yang rapi adalah mengontrol posisi teks. Python menyediakan beberapa metode string yang sangat membantu:

  1. .center(width): Memposisikan string tepat di tengah dengan total karakter width. Digunakan untuk judul toko dan pesan terima kasih.
  2. .ljust(width): Melakukan perataan kiri (Left Justified). String akan diisi spasi di sebelah kanan hingga mencapai width. Ideal untuk nama item.
  3. .rjust(width): Melakukan perataan kanan (Right Justified). String akan diisi spasi di sebelah kiri. Ideal untuk harga atau jumlah uang.
  4. F-String Formatting (Lebih Modern): Menggunakan notasi {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).

4. Langkah Selanjutnya: Mencetak ke Printer Termal

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).

Menggunakan Pustaka python-escpos

Untuk 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.