C# Termal Yazıcı Çıktı Alma (Adisyon-Bilgi Fişi)

Termal yazıcılardan çıktı almak normal yazıcılara göre biraz farklıdır. En temel fark sayfa uzunluğunun sabit olmamasıdır. Sayfa uzunluğunu dinamik yapıp genişlik ayarlarını da standartlara göre ayarlarsak (58mm 80mm gibi) amacımıza ulaşmış oluruz. C# winform uygulamalarında/projelerimizde adisyon, bilgi fişi gibi çıktılar için aşağıda vereceğim kodları rahatlıkla kullanabilirsiniz. Örneğin barkodlu satış programı için kullandığım yapı şu şekildedir. Dinamik verilerimizi elde edeceğimiz model classımızı oluşturacağımız kodlar;


public class UrunListesiTermal
    {       
        public string UrunAd { get; set; }
        public string Birim { get; set; }
        public double Miktar { get; set; }
        public double Fiyat { get; set; }
    }

Yazdır classımız;


 public class Yazdir
    {
        public List urunListesi { get; set; }

        public int IslemNo { get; set; }
        public string Unvan { get; set; }
        public string Adres { get; set; }
        public string Telefon { get; set; }
        public DateTime Tarih { get; set; }
        public string VergiDairesi { get; set; }
        public string TermalTip { get; set; }
        PrintDocument pd = new PrintDocument();

        public void YazdirmayaBasla()
        {
            try
            {
                pd.PrintPage += Pd_PrintPage;
                pd.Print();
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.ToString());
            }

        }


        private void Pd_PrintPage(object sender, PrintPageEventArgs e)
        {
            if (TermalTip == "58mm")
            {
                #region 58mm Termal Yazıcı
                int j = 0;
                int z = 185;
                while (j < urunListesi.Count)
                {
                    j += 1;
                    z += 20;
                }
                z += 30;
                PaperSize pkCustomSize58 = new PaperSize("58mm termal", 220, z);
                pd.DefaultPageSettings.PaperSize = pkCustomSize58;

                int i = 0; //For Gridview Row Count
                int sno = 1; //For Grid Serial Number

                Font fontBaslik = new Font("Calibri", 12, FontStyle.Bold);
                Font fontBilgi = new Font("Calibri", 8, FontStyle.Bold);
                StringFormat fmt0 = new StringFormat(StringFormatFlags.FitBlackBox);
                fmt0.Alignment = StringAlignment.Center;
                // Rectangle rc0 = new Rectangle(5, yukseklik, 200, 100);
                string[] unvan = Unvan.Split(' ');
                if (unvan.Length == 1)
                {
                    e.Graphics.DrawString(unvan[0], new Font("Calibri", 14, FontStyle.Bold), Brushes.Black, new Point(5, 5));
                }
                else if (unvan.Length == 2)
                {
                    e.Graphics.DrawString(unvan[0] + " " + unvan[1], new Font("Calibri", 14, FontStyle.Bold), Brushes.Black, new Point(5, 5));
                }
                else if (unvan.Length == 3)
                {
                    e.Graphics.DrawString(unvan[0] + " " + unvan[1], fontBaslik, Brushes.Black, new Point(5, 5));
                    e.Graphics.DrawString(unvan[2], fontBaslik, Brushes.Black, new Point(15, 20));
                }
                else
                {
                    e.Graphics.DrawString(Unvan, new Font("Calibri", 14, FontStyle.Bold), Brushes.Black, new Point(5, 5));
                }




                //Telefon 
                e.Graphics.DrawString("Telefon : " + Telefon, fontBilgi, Brushes.Black, new Point(5, 45));
                //İşlem No
                e.Graphics.DrawString("İşlem No : " + IslemNo, fontBilgi, Brushes.Black, new Point(5, 60));
                //Tarih
                e.Graphics.DrawString("Tarih : " + Tarih, fontBilgi, Brushes.Black, new Point(5, 75));
                e.Graphics.DrawString("Vergi Dairesi : " + VergiDairesi, fontBilgi, Brushes.Black, new Point(5, 90));
                e.Graphics.DrawString(
                   "----------------------------------------",
                   new Font("Arial", 10), Brushes.Black,
                    new Point(0, 100));
                int y = 140;
                double geneltoplam = 0;
                Graphics gMiktar = e.Graphics;
                RectangleF rectUrunAdi = new RectangleF(0.0F, y - 20, 200.0F, 30.0F);
                RectangleF rectMiktar = new RectangleF(60.0F, y - 20, 200.0F, 30.0F);
                RectangleF rectFiyat = new RectangleF(100.0F, y - 20, 200.0F, 30.0F);
                RectangleF rectTutar = new RectangleF(160.0F, y - 20, 200.0F, 30.0F);
                StringFormat formatMiktar = new StringFormat(StringFormatFlags.DirectionRightToLeft);
                gMiktar.DrawString("Ürün Adı", new Font("Arial", 8F, FontStyle.Underline), Brushes.Black, rectUrunAdi);
                gMiktar.DrawString("Miktar", new Font("Arial", 8F, FontStyle.Underline), Brushes.Black, rectMiktar);
                gMiktar.DrawString("Br.Fiyat", new Font("Arial", 8F, FontStyle.Underline), Brushes.Black, rectFiyat);
                gMiktar.DrawString("Tutar", new Font("Arial", 8F, FontStyle.Underline), Brushes.Black, rectTutar);
                Font fontdiger = new Font("Arial", 7);
                foreach (var item in urunListesi)
                {
                    double miktard;
                    double.TryParse(item.Miktar.ToString(), out miktard);
                    double fiyatd;
                    double.TryParse(item.Fiyat.ToString(), out fiyatd);
                    double aratoplam = miktard * fiyatd;
                    StringFormat formatpara = new StringFormat(StringFormatFlags.DirectionRightToLeft);
                    string urunad = string.Empty;
                    if (item.UrunAd.Length >= 11)
                    {
                        urunad = item.UrunAd.Substring(0, 11) + ".";
                    }
                    else
                    {
                        urunad = item.UrunAd;
                    }
                    e.Graphics.DrawString(urunad, fontdiger, Brushes.Black, new Point(5, y));
                    if (item.Birim != "Adet")
                    {
                        e.Graphics.DrawString(item.Miktar.ToString() + "kg", fontdiger, Brushes.Black, new Point(70, y));
                    }
                    else
                    {
                        e.Graphics.DrawString(item.Miktar.ToString() + "ad", fontdiger, Brushes.Black, new Point(70, y));
                    }

                    e.Graphics.DrawString(item.Fiyat.ToString("C"), fontdiger, Brushes.Black, new Point(140, y), formatpara);
                    e.Graphics.DrawString(aratoplam.ToString("C"), fontdiger, Brushes.Black, new Point(190, y), formatpara);
                    y += 15;
                    geneltoplam += aratoplam;
                }
                #region Alt Bölüm
                e.Graphics.DrawString(
                                             "----------------------------------------",
                                            new Font("Arial", 10),
                                            Brushes.Black,
                                            new Point(0, y));
                StringFormat fmtGt = new StringFormat(StringFormatFlags.FitBlackBox);

                fmt0.Alignment = StringAlignment.Center;
                Rectangle rcGt = new Rectangle(15, y + 15, 200, 100);
                Rectangle rcGt2 = new Rectangle(50, y + 30, 200, 100);
                e.Graphics.DrawString(
                       "Genel Toplam : " + geneltoplam.ToString("C"),
                       new Font("Arial", 9, FontStyle.Bold),
                       Brushes.Black, rcGt, fmtGt);
                e.Graphics.DrawString(
                      "(Mali Değeri Yoktur)",
                      new Font("Arial", 6, FontStyle.Bold),
                      Brushes.Black, rcGt2, fmtGt);
                e.Graphics.DrawString(
                                           "----------------------------------------",
                                           new Font("Arial", 10),
                                           Brushes.Black,
                                           new Point(0, y + 40));

                StringFormat fmt = new StringFormat(StringFormatFlags.FitBlackBox);
                Rectangle rc1 = new Rectangle(5, y + 50, 200, 100);
                Rectangle rc2 = new Rectangle(5, y + 65, 200, 100);

                // Adres
                string olusanadres1, olusanadres2;
                if (Adres.Length > 25)
                {
                    olusanadres1 = Adres.Substring(0, 35);
                    olusanadres2 = Adres.Substring(35);
                    e.Graphics.DrawString("Adres : " +
                     olusanadres1, fontBilgi,
                     Brushes.Black, rc1, fmt);

                    e.Graphics.DrawString(
                     olusanadres2.TrimStart(), fontBilgi,
                     Brushes.Black, rc2, fmt);
                }
                else
                {
                    e.Graphics.DrawString("Adres : " + Adres, fontBilgi, Brushes.Black, rc1, fmt);
                }
                //e.Graphics.DrawString(Adres, new Font("Arial", 8), Brushes.Black, rc, fmt);
                #endregion
                #endregion
            }
            else if (TermalTip == "80mm")
            {
                #region 80mm Termal Yazıcı

                int j = 0;
                int z = 185;
                while (j < urunListesi.Count)
                {
                    j += 1;
                    z += 20;
                }
                z += 30;
                PaperSize pkCustomSize58 = new PaperSize("58mm termal", 300, z);
                pd.DefaultPageSettings.PaperSize = pkCustomSize58;

                int i = 0; //For Gridview Row Count
                int sno = 1; //For Grid Serial Number

                Font fontBaslik = new Font("Calibri", 12, FontStyle.Bold);
                Font fontBilgi = new Font("Calibri", 8, FontStyle.Bold);
                StringFormat fmt0 = new StringFormat(StringFormatFlags.FitBlackBox);
                fmt0.Alignment = StringAlignment.Center;
                // Rectangle rc0 = new Rectangle(5, yukseklik, 200, 100);
                if (Unvan.Length > 0)
                {
                    string[] unvan = Unvan.Split(' ');
                    if (unvan.Length == 1)
                    {
                        e.Graphics.DrawString(unvan[0], new Font("Calibri", 14, FontStyle.Bold), Brushes.Black, new Point(5, 5));
                    }
                    else if (unvan.Length == 2)
                    {
                        e.Graphics.DrawString(unvan[0] + " " + unvan[1], new Font("Calibri", 14, FontStyle.Bold), Brushes.Black, new Point(5, 5));
                    }
                    else if (unvan.Length == 3)
                    {
                        e.Graphics.DrawString(unvan[0] + " " + unvan[1], fontBaslik, Brushes.Black, new Point(5, 5));
                        e.Graphics.DrawString(unvan[2], fontBaslik, Brushes.Black, new Point(15, 20));
                    }
                    else
                    {
                        e.Graphics.DrawString(Unvan, new Font("Calibri", 14, FontStyle.Bold), Brushes.Black, new Point(5, 5));

                    }

                }




                //Telefon 
                e.Graphics.DrawString("Telefon : " + Telefon, fontBilgi, Brushes.Black, new Point(5, 45));
                //İşlem No
                e.Graphics.DrawString("İşlem No : " + IslemNo, fontBilgi, Brushes.Black, new Point(5, 60));
                //Tarih
                e.Graphics.DrawString("Tarih : " + Tarih, fontBilgi, Brushes.Black, new Point(5, 75));
                e.Graphics.DrawString("Vergi Dairesi : " + VergiDairesi, fontBilgi, Brushes.Black, new Point(5, 90));
                e.Graphics.DrawString(
                   "------------------------------------------------------------",
                   new Font("Arial", 10), Brushes.Black,
                    new Point(0, 100));
                int y = 140;
                double geneltoplam = 0;
                Graphics gMiktar = e.Graphics;
                RectangleF rectUrunAdi = new RectangleF(0.0F, y - 20, 200.0F, 30.0F);
                RectangleF rectMiktar = new RectangleF(120.0F, y - 20, 200.0F, 30.0F);
                RectangleF rectFiyat = new RectangleF(170.0F, y - 20, 200.0F, 30.0F);
                RectangleF rectTutar = new RectangleF(240.0F, y - 20, 200.0F, 30.0F);
                StringFormat formatMiktar = new StringFormat(StringFormatFlags.DirectionRightToLeft);
                gMiktar.DrawString("Ürün Adı", new Font("Arial", 8F, FontStyle.Underline), Brushes.Black, rectUrunAdi);
                gMiktar.DrawString("Miktar", new Font("Arial", 8F, FontStyle.Underline), Brushes.Black, rectMiktar);
                gMiktar.DrawString("Br.Fiyat", new Font("Arial", 8F, FontStyle.Underline), Brushes.Black, rectFiyat);
                gMiktar.DrawString("Tutar", new Font("Arial", 8F, FontStyle.Underline), Brushes.Black, rectTutar);
                Font fontdiger = new Font("Arial", 8);
                foreach (var item in urunListesi)
                {
                    double miktard;
                    double.TryParse(item.Miktar.ToString(), out miktard);
                    double fiyatd;
                    double.TryParse(item.Fiyat.ToString(), out fiyatd);
                    double aratoplam = miktard * fiyatd;
                    StringFormat formatpara = new StringFormat(StringFormatFlags.DirectionRightToLeft);
                    string urunad = string.Empty;
                    if (item.UrunAd.Length >= 16)
                    {
                        urunad = item.UrunAd.Substring(0, 16) + ".";
                    }
                    else
                    {
                        urunad = item.UrunAd;
                    }
                    e.Graphics.DrawString(urunad, fontdiger, Brushes.Black, new Point(5, y));
                    if (item.Birim != "Adet")
                    {
                        e.Graphics.DrawString(item.Miktar.ToString() + "kg", fontdiger, Brushes.Black, new Point(130, y));
                    }
                    else
                    {
                        e.Graphics.DrawString(item.Miktar.ToString() + "ad", fontdiger, Brushes.Black, new Point(130, y));
                    }

                    e.Graphics.DrawString(item.Fiyat.ToString("C"), fontdiger, Brushes.Black, new Point(215, y), formatpara);
                    e.Graphics.DrawString(aratoplam.ToString("C"), fontdiger, Brushes.Black, new Point(275, y), formatpara);
                    y += 15;
                    geneltoplam += aratoplam;
                }
                #region Alt Bölüm
                e.Graphics.DrawString(
                                             "------------------------------------------------------------",
                                            new Font("Arial", 10),
                                            Brushes.Black,
                                            new Point(0, y));
                StringFormat fmtGt = new StringFormat(StringFormatFlags.FitBlackBox);

                fmt0.Alignment = StringAlignment.Center;
                Rectangle rcGt = new Rectangle(50, y + 15, 200, 100);
                Rectangle rcGt2 = new Rectangle(85, y + 30, 200, 100);
                e.Graphics.DrawString(
                       "Genel Toplam : " + geneltoplam.ToString("C"),
                       new Font("Arial", 9, FontStyle.Bold),
                       Brushes.Black, rcGt, fmtGt);
                e.Graphics.DrawString(
                      "(Mali Değeri Yoktur)",
                      new Font("Arial", 6, FontStyle.Bold),
                      Brushes.Black, rcGt2, fmtGt);
                e.Graphics.DrawString(
                                           "------------------------------------------------------------",
                                           new Font("Arial", 10),
                                           Brushes.Black,
                                           new Point(0, y + 40));

                StringFormat fmt = new StringFormat(StringFormatFlags.FitBlackBox);
                Rectangle rc1 = new Rectangle(5, y + 50, 200, 100);
                Rectangle rc2 = new Rectangle(5, y + 65, 200, 100);

                // Adres
                string olusanadres1, olusanadres2;
                if (Adres.Length > 50)
                {
                    olusanadres1 = Adres.Substring(0, 50);
                    olusanadres2 = Adres.Substring(50);
                    e.Graphics.DrawString("Adres : " +
                     olusanadres1, fontBilgi,
                     Brushes.Black, rc1, fmt);

                    e.Graphics.DrawString(
                     olusanadres2.TrimStart(), fontBilgi,
                     Brushes.Black, rc2, fmt);
                }
                else
                {
                    e.Graphics.DrawString("Adres : " + Adres, fontBilgi, Brushes.Black, rc1, fmt);
                }
                //e.Graphics.DrawString(Adres, new Font("Arial", 8), Brushes.Black, rc, fmt);
                #endregion
                #endregion
            }

        }
    }

Bu classı oluşturduktan sonra nasıl kullanacağımızla ilgili kod yapısı. Burada veritabanımda bazı sabitleri alıyorum. Yazıcı durumu, işlem no, işyeri bilgi, adres, telefon vb...

                    var yazici = db.Ayarlars.Where(a => a.Id == 1).SingleOrDefault();
                    if (yazici != null)
                    {
                        if ((bool)yazici.YaziciDurum)
                        {
                            var sonsatis = db.Satis.OrderByDescending(a => a.SatisId).Take(1).SingleOrDefault();
                            if (sonsatis != null)
                            {

                                var list = db.Satis.Where(a => a.IslemNo == sonsatis.IslemNo).ToList();
                                var isyeribilgi = db.IsyeriBilgis.Where(i => i.BilgiId == 1).SingleOrDefault();

                                Yazdir yazdir = new Yazdir();
                                if (isyeribilgi != null)
                                {
                                    yazdir.Unvan = isyeribilgi.Unvan;
                                    yazdir.Adres = isyeribilgi.Adres;
                                    yazdir.Telefon = isyeribilgi.Telefon;
                                    yazdir.VergiDairesi = isyeribilgi.VergiDairesi;
                                    yazdir.Tarih = DateTime.Now;
                                }
                                else
                                {
                                    yazdir.Unvan = "Ünvan";
                                    yazdir.Adres = "Adres";
                                }

                                if ((bool)yazici.YaziciOlcu)
                                {
                                    yazdir.TermalTip = "80mm";
                                }
                                else
                                {
                                    yazdir.TermalTip = "58mm";
                                }
                                yazdir.IslemNo = (int)sonsatis.IslemNo;
                                yazdir.urunListesi = list.Select(a => new UrunListesiTermal { UrunAd = a.UrunAd, Birim = a.Birim, Miktar = (double)a.Miktar, Fiyat = (double)a.BirimFiyat }).ToList();
                                yazdir.YazdirmayaBasla();
                            }
                        }

                    }


                    }
                    catch (Exception ex)
                    {
                        throw;
                    }
                    transaction.Commit();

Hemen üstteki kodlarda dediğim gibi bazı sabitleri veritabanından çekiyorum, siz şu kadarını yazarsanız çalışmanıza ışık tutabilir.

                                Yazdir yazdir = new Yazdir();
                                if (isyeribilgi != null)
                                {
                                    yazdir.Unvan = "ÖFKELİ MARKET";
                                    yazdir.Adres = "Tellidere mahallesi 12345 sokak …";
                                    yazdir.Telefon = "3223456566";
                                    yazdir.VergiDairesi ="ADANA";
                                    yazdir.Tarih = DateTime.Now;
                                }
                                else
                                {
                                    yazdir.Unvan = "Ünvan";
                                    yazdir.Adres = "Adres";
                                }
                                if ((bool)yazici.YaziciOlcu)
                                {
                                    yazdir.TermalTip = "80mm";
                                }
                                else
                                {
                                    yazdir.TermalTip = "58mm";
                                }
                                yazdir.IslemNo = (int)sonsatis.IslemNo;
                                yazdir.urunListesi = list.Select(a => new UrunListesiTermal { UrunAd = a.UrunAd, Birim = a.Birim, Miktar = (double)a.Miktar, Fiyat = (double)a.BirimFiyat }).ToList();
                                yazdir.YazdirmayaBasla();

Genel yapı bu şekildedir. Direkt olarak kendi kodlarımı kopyala yapıştır dediğim için takıldığınız alanlar olabilir. Sorunuz olursa mesaj yazabilirsiniz.




Etiketler
Barkod Termal Yazıcı Print Graphics
Mesaj Yaz