C# ile Yazici kullanimi; Cikti alma

Merhaba Sevgili okurlarım;
Sizinle bu yazimda bir gorsel egitim paylasmak istedim. Egitimin icerigi C# ile Windows Printer uzerinden cikti almak. Ciktinin icerisine drawString ile duz yazi ve drawImage ile resim ekleyerek bunlari kagit yazicimizdan veya ayni mantikta calismakta olan Kart yazicimizdan ciktilarini almak.

Video icerisinde ayriyetten C# ile sayfadan cikti almanin yani sira Windows’un default yazicisina veya kullanicinin secimini yapacagi bir yaziciya data gondermeyi de gostermekte.

Programin source kodunuda videonun altina ekledim ki kopyalayarak yeniden kod yazmak istemeyen arkadaslar copy paste yaparak kendi programlarina dahil edebilsinler.

C# ile Printer Kullanimi from Recep Akkoc on Vimeo.

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
// Print objelerinin
// bulundugu kutuphane
using System.Drawing.Printing;

namespace Printing
{
    public partial class Form1 : Form
    {
        // Bir PrintDocument Yaratiyoruz.
        PrintDocument pDoc;

        // kacinci sayfayi bastigini hafizada tutmak gerek.
        // bunun icin global bir int tanimliyoruz.
        // coklu sayfa yazmada cift yuz yazma ozelligi olan
        // kart ve kagit yazicilar icinde devami var'i kullancaz.
        bool devamiVar = false;
        int sayfa = 1;

        public Form1()
        {
            InitializeComponent();

            // PrintDocument nesnemizin tanimlamasi gerceklesiyor.
            pDoc = new PrintDocument();

            // Print event'i yaratiliyor.
            pDoc.PrintPage += new PrintPageEventHandler(pDoc_PrintPage);
        }

        // Print Fonksionu
        void pDoc_PrintPage(object sender, PrintPageEventArgs e)
        {
            // Bundan sonra X, Y, Genislik, Yukseklik gibi olculerde
            // Pixel degil Milimetre kullanicahiz
            e.Graphics.PageUnit = GraphicsUnit.Millimeter;

            // Bu sekilde sabit bir printer'a yonlendire biliriz
            // e.PageSettings.PrinterSettings.PrinterName = "Bir Printer Adi";

            // yazdirmada kullanilacak bir font olusturalim.
            Font aFont = new System.Drawing.Font("Arial", 11);

            // stringi pDoc nesnemize yazdiralim.
            // string olarak "Deneme" verdik.
            // renk olarak brushes.black verdik ve X,Y olarak noktalarimizi belirttik.
            // ben genelde point kullanmaktan yana degilimdir gerci
            // bu yuzden tanimlamayi pointsiz yapalim.
            e.Graphics.DrawString("Deneme", aFont, Brushes.Black, 10f,10f);

            Image aImg = Image.FromFile(@"C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Blue hills.jpg");

            // Resim ekleme sol'dan 10 mm, yukardan 25 mm atliyarak
            // resmi resize etmek isterseniz bunuda bunuda
            // genislik 30 mm yukseklik 42 mm olarak atadik.
            e.Graphics.DrawImage(aImg, 10, 25,30,42);

            // Her baskida sayfa sayisini artiralim.
            sayfa++;

            // baski 10 sayfa ise son sayfada devami olmayacagini belirtelim.
            if (sayfa == 10)
                devamiVar = false;

            // devami varsa sonraki sayfaya gecelim.
            if (devamiVar)
                e.HasMorePages = true;
        }

        private void btnStart2Print_Click(object sender, EventArgs e)
        {
            // suan bir printer belirtmedigimiz icin default printer'a atacaktir.
            // printer tanitmak icin usteki fonksionda islem yapilmalidir veyahut
            // print dialog nesnesi kullanilmalidir.
            // ikidinide size gostermek istiyorum.
            // pDoc.Print();

            // Print Dialog olusturdugumuz zaman
            PrintDialog apDialog = new PrintDialog();

            // Hangi dokumana bagli oldugunu seceriz.
            apDialog.Document = pDoc;

            // ve islem okey ise
            if (apDialog.ShowDialog() == DialogResult.OK)
            {
                // coklu sayfa basacagimizi belirten degiskeni true yapalim.
                devamiVar = true;

                // print islemi gerceklesir.
                pDoc.Print();
            }
        }
    }
}

21 comments

    1. Windows Print kullananlar evet. Kendilerine ait ozel dilleri olan printerlarda mevcut.
      Suan bu konuda bir yazida hazirliyordum aslinda.

      1. İyi denk gelmişim (:
        Etiket makinelerinin içeriklerinde bununla (Windows Print İbaresi) ilgili bilgi göremiyorum. Alayım da şunu bir olursa olur mu diyeceğim, tecrübelerinden aktarır mısın veya önere bileceğin küçük boyutlu bir cihaz var mıdır.

  1. sagolasın çok iyi rastladı bu. ekip olarak yeni aldığımız işi csharpta yapmamız gerekiyor ve bilen yok. googlelayarak yapıyoruz çoğu yerde spagetti yazıyoruz. bu kodlar bayağı işimize yaradı. minnettarız.

  2. ben kutuphane programı yapıyorum programım bitmişti ama hocam benden barkod okuyucuyuda kullanmamı ıstedı ama ben nasıl kullanacagımı bilmiyorum bana yardım eder mısınız

    1. tabiki. Barkod tipleri hakkinda bilginiz var mi ? ne cesit bir barkod yazdirmak istiyorsunuz bunu belirtirseniz o barkodu yazdiracak bir dll sizin ile paylasabilirim.

  3. Printdocument tan kaç adet sayfa açıldığını ve bu açılan sayfaların numaralarının 2/3 şeklinde her sayfada olacak biçimde nasıl yazdırabiliriz.

    1. hocam çoklu sayfa yazdırırken önce devamivarmi kontrolunu true yaptığım yerde sen int kullanıp kac sayfa yazdırılacak diye bir kontrolde bulunman gerekecektir.
      Kaç sayda yazdırıldıgını bildikten sonra kaçıncı sayfada olduğunu takip edecek 2. bir int daha kullanarak o sayfaya gelip gelmediğini tutarsın. bunu bir yere DrawString ile yazdirabilirsin.

  4. Bendeki yazıcı tipi tsc marka bir yazıcı bunla bir etiket yazdırmak istiyorum. c# kodu ile yazdırcam da bunu tsc de bunu nasıl görüdrcez yardımcı olabilirseniz sevinirim.

  5. Milimetreye çevirme olayı çok işime yaradı. Her yerde bunu arıyordum çok teşekkürler 😀

  6. merhaba
    suan yapmis olduğum bi c# programinda etiket cıkartmak istiyorum ama yapamdim yardimci olursanız çok sevinirim yazıcı smart label printer 650

    1. Merhaba Hocam, Bu kodlar ile etiket yazıcınızdan çıktı alabilirsiniz. Eğer özel bir noktada sorun yaşarsanız benim ile iletişime Recep.akkoc[a]yoroca.com dan iletişime geçerek yardım isterseniz yardımcı olurum.

  7. Merhaba hocam, elimde 2 adet datagridview var. Bu 2 datagridview’i bir word sayfasına bastırmak istiyorum. Nasıl yapabilirim.

    1. Word’e bastırma konusunda cristalreport tarzinda toollar kullanmanı tavsiye ederim. Excell biraz daha serbest olsada Word microsoftun kendi urunu versionlarda farkliliklar yapman gerekiyor. Hazır tool bunları kendisi Hallediyor.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.