C#: Mencetak Langsung ke POS Printer

 Rani udah bikin versi VB.NET di artikel berikut:

http://rani-irsan.blogspot.com/2019/12/vbnet-mencetak-dengan-pos-printer.html

Dan sebenernya udah lama juga banyak requestan buat bikin versi C# nya juga. Tapi maafkan baru sempat (baca: mood) bikin sekarang ini. Jadi beginilah kira-kira caranya print langsung ke printer kasir atau yang biasa dikenal dengan aplikasi POS.

Rani buat 2 class untuk mendukung proses printing ini, jadi temen-temen bisa tinggal langsung pakai. Kelas-kelas ini juga udah dilengkapi fitur untuk mencetak gambar atau logo dan mengatur font sesuai keinginan. Kelas-kelas tersebut dapat di download di link berikut:

  • PrintingFormat.cs --> untuk memformat object-object yang akan dicetak.
  • Printer.cs --> untuk mengirim perintah print langsung ke printer.

Setelah file-file tersebut didownload copy ke folder project/solution seperti di bawah: 


Lalu buka project/solution tersebut dengan Visual Studio. Pergi ke Solution Explorer lalu klik "show all files" supaya aktif seperti gambar di bawah. File-file tadi akan ditampilkan di sana tapi masih samar-samar alias blom include ke project. Supaya include/masuk ke project select file-file tersebut (bisa multiple select), klik kanan -> Include In Project. Dan file-file ini pun siap digunakan.


Design UI yang kita gunakan di Form1 sederhana saja cukup menambahkan 1 buat button. Printing will be triggered byProses print akan dilakukan pada event Button1_Click()


Dan code nya seperti berikut:

using System;
using System.Windows.Forms;
using System.Drawing;
using System.Data;

namespace CSharpPrinting
{
    public partial class Form1 : Form
    {
        string StoreName = "SERBA ADA STORE";
        string StoreAddress = "Jl. Kehidupan No. 100";
        Image Img = Image.FromFile(@"c:\logo.jpg");
        string TransNo = "TCN10-20191204-001";
        string TransDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

        //for item sales | untuk item penjualan
        DataTable dtItem;
        int[] arrWidth;
        StringFormat[] arrFormat;

        //'declaring printing format class
        PrintingFormat c = new PrintingFormat();

        //for subtotal & qty total
        double dblSubtotal = 0;
        double dblQty = 0;
        double dblPayment = 50000;


        public void Data_Load()
        {
            dtItem = new DataTable();
            {
                var withBlock = dtItem.Columns;
                withBlock.Add("itemname", Type.GetType("System.String"));
                withBlock.Add("qty", Type.GetType("System.String"));
                withBlock.Add("price", Type.GetType("System.String"));
            }

            DataRow ItemRow;

            ItemRow = dtItem.NewRow();
            ItemRow["itemname"] = "Taro Snack";
            ItemRow["qty"] = "1";
            ItemRow["price"] = "5000";
            dtItem.Rows.Add(ItemRow);

            ItemRow = dtItem.NewRow();
            ItemRow["itemname"] = "Kopi Ice";
            ItemRow["qty"] = "2";
            ItemRow["price"] = "7000";
            dtItem.Rows.Add(ItemRow);

            ItemRow = dtItem.NewRow();
            ItemRow["itemname"] = "Lolipop";
            ItemRow["qty"] = "5";
            ItemRow["price"] = "1000";
            dtItem.Rows.Add(ItemRow);
        }


        public Form1()
        {
            InitializeComponent();
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            Data_Load();

            SendPrint.NewPrint();

            SendPrint.Print(Img, 100, 50);

            //Setting Font
            SendPrint.SetFont("Courier New", 11, FontStyle.Bold);
            SendPrint.Print(StoreName); //Store Name | Nama Toko

            //Setting Font
            SendPrint.SetFont("Courier New", 8, FontStyle.Regular);
            //Store Address | Alamat Toko
            SendPrint.Print(StoreAddress + ";", new int[]{280}, 0); 

            //spacing
            SendPrint.Print(" ");

            SendPrint.Print(TransNo); // Transaction No | Nomor transaksi
            SendPrint.Print(TransDate); // Trans Date | Tanggal transaksi

            SendPrint.Print(" "); //spacing
            //Setting Font
            SendPrint.SetFont("Courier New", 8, FontStyle.Bold);
            //array for column width | array untuk lebar kolom
            arrWidth = new int[] { 90, 40, 50, 70};
            //array alignment 
            arrFormat = new StringFormat[] { c.MidLeft, c.MidRight,
                                             c.MidRight, c.MidRight }; 

            //column header split by ; | nama kolom dipisah dengan ;
            SendPrint.Print("item;qty;price;subtotal", arrWidth, arrFormat);
            //Setting Font
            SendPrint.SetFont("Courier New", 8, FontStyle.Regular); 
            SendPrint.Print("------------------------------------"); //line

            dblSubtotal = 0;
            dblQty = 0;
            //looping item sales | loop item penjualan
            for (int r = 0; r <= dtItem.Rows.Count - 1; r++)
                {
                  SendPrint.Print(dtItem.Rows[r]["itemname"].ToString() + 
                       ";" + dtItem.Rows[r]["qty"] + ";" +
                       dtItem.Rows[r]["price"] + ";" +
                       (double.Parse(dtItem.Rows[r]["qty"].ToString()) * 
                        double.Parse(dtItem.Rows[r]["price"].ToString())), 
                        arrWidth, arrFormat);
                  dblQty = dblQty + 
                           double.Parse(dtItem.Rows[r]["qty"].ToString());
                  dblSubtotal = dblSubtotal + 
                         (double.Parse(dtItem.Rows[r]["qty"].ToString()) 
                          * double.Parse(dtItem.Rows[r]["price"].ToString()
                          ));
                }

                SendPrint.Print("------------------------------------");
                arrWidth = new int[] { 130, 120 };
                //array for column width | array untuk lebar kolom
                arrFormat = new StringFormat[] { c.MidLeft, c.MidRight };
                //array alignment 

                SendPrint.Print("Total;" + dblSubtotal, arrWidth, arrFormat);
                SendPrint.Print("Payment;" + dblPayment, arrWidth, arrFormat);
                SendPrint.Print("------------------------------------");
                SendPrint.Print("Change;" + 
                                (dblPayment - dblSubtotal).ToString(), 
                                arrWidth, arrFormat);
                SendPrint.Print(" ");
                SendPrint.Print("Item Qty;" + dblQty, arrWidth, arrFormat);

                //Release the job for actual printing
                SendPrint.DoPrint();
        }
    }
}

Setelah menulis kode lengkap coba jalankan dan klik tombol Button 1.


Hasilnya kira-kira seperti ini:


Klo temen-temen perlu sourcode sample project yang Rani pakai disini boleh download di sini!



Post a Comment

0 Comments