Hoşgeldiniz. Unutmayın, çok istiyorsanız mutlaka bir yolu vardır.!

C# ile Yazıcı Çıktısı Alma İşlemleri C# ile Windows iş uygulaması geliştiriyorsanız program ınızın mutlaka yazıcı çıktısı alma bölümü olacaktır. Bu makalede C# ile nasıl
  • 5 üzerinden 5.00   |  Oy Veren: 2      

  1. Sponsorlu Bağlantılar


    C# ile Yazıcı Çıktısı Alma İşlemleri

    Sponsorlu Bağlantılar




    C# ile Yazıcı Çıktısı Alma İşlemleri


    C# ile Windows iş uygulaması geliştiriyorsanız programınızın mutlaka yazıcı çıktısı alma bölümü olacaktır. Bu makalede C# ile nasıl yazıcı çıktısı alınabileceğinin temelleri üzerinde duracağım.

    .NET sınıf kütüphanesi her alanda olduğu gibi yazıcı çıktısı alma ile ilgili bir takım sınıflar sağlamıştır.PrintDocument sınıfı yazı çıktısı alma ile ilgili en temel sınıftır. Bu yazıda bu sınıfın özelliklerini, olaylarını ve metotlarını ayrıntılı bir şekilde inceleyip tek sayfalı yada çok sayfalı yazıcı çıktısının nasıl alınabileceğini göstereceğim. Ayrıca yazıcı çıktısı alma ile çok yakından ilgili olan PrintPreview,PageSetupDialog ve PrintDialog gibi sınıflarıda inceleyeceğiz.

    PrintDocument Sınıfı


    Bu sınıf programlarımıza yazıcı çıktısı alma desteğini eklemek için kullanabileceğimiz en temel yapıdır. Bu sınıf türünden bir nesne yaratıldığında çıktı alma ile ilgili hemen her tür bilgiye erişmemiz mümkündür.

    PrintDocument YaziciCiktisi = new PrintDocument();

    şeklinde bir tanımlama yaptığımızda varsayılan yazıcı(default printer) ile çalışılmaktadır. Bir dökümanı yazıcıya göndermek için PrintDocument sınıfının Print() metodu kullanılır. Print() metodu çağrıldığı anda PrintPage olayı meydana gelir. Bu olayı yakalayan kontrol yazıcıya gönderilecek döküman üzerinde işlemler yaparak çıktının şeklini belirlemelidir. Her bir sayfa için ayrıca PrintPage olayı meydana geleceği için her bir olay içinde doğru sayfaları yazıcıya göndermek için bir takım işlemler yapmak gerekecektir. Aksi halde her defasında birinci sayfayı yazıcıya gönderme ihtimalimiz vardır. Kısacası PrintPage olayı olmadan yazıcıya çıktı bilgilerini gönderemeyiz. Bu yüzden ilk olarak PrintPage olayını ve bu olaya ait argümanları içeren PrintPageEventArgs sınıfını inceleyelim.


    Önce PrintPage olayının argümanlarını içeren PrintPageEventArgs sınıfının üye elemanlarını inceleyelim, ardında bir konsol uygulamasından yazıcıya nasıl bir döküman göndereceğimizi göstereceğim.


    PrintPageEventArgs sınıfnın üye elemanları :


    Graphics : Yazıcıya gönderilecek döküman bilgilerini belirleyen grafik nesnesidir. Yazıcya gönderilecek bilgilerin tamamı bu nesne içerisinde belirtilecektir. Not : Graphics sınıf GDI+ kütüphanesinin en önemli sınıfıdr.

    Cancel : Çıktı alma işleminin iptal edilip edilemeyeceği ile ilgili bilgi veren bool türünden bir elemandır. Eğer değeri true ise çıktı alma işlemi iptal edilecektir.

    HasMorePages : Yazıcıya gönderilecek çıktının birden fazla sayfa kapladığı durumlarda PrintPage olayına ilişkin metotta bu özelliğin true olarak değiştirilmesi gerekir. Böylece bundan sonraki PrintPage olaylarında bu değişken kontrol edilerek diğer sayfaların çıktıya gönderilmesi ile ilgili işlemler yapılır.

    MarginBounds : Yazıcıya gönderilen çıktı dökümanının en ve boyutlarını temsil eden Rectangletüründen bir özelliktir. Rectangle sınıfıda GDI+ kütüphanesinin bir parçasıdır. Bu özellikte yazıcıya gönderilecek çıktının sadece üzerine çizim yapılabilen kısmı belirtilir.

    PageBounds : Yazıcıya gönderilen dökümanın tamamının en ve boy değerlerini tutan yine Rectangle sınıfı türünden bir elemandır.

    PageSettings: İlgili dökümana ait sayfa ayarlarını tutan ve PageSettings sınıfı türünden bir elemandır. PageSettings sınıfının Color, Landscape, Margins, PaperSize, PaperSource, PrinterResolution gibi sayfa ile ilgili bilgi tutan üye özellikleri bulunmaktadır.

    Şimdi basit bir örnekle yazıcıya çıktı gönderelim. Örneğimizde varsayılan yazıcınıza, sol üst köşesi (20,20) koordinatlarında eni ve boyu 100 olan bir dörtgen içeren sayfayı göndereceğiz. Gönderilecek sayfadaki dörtgeni çizmek için tahmin edeceğiniz üzere Graphics nesnesini kullanacağız.

    using System;
    using
    System.Drawing.Printing;
    using
    System.Drawing;

    class
    Printer
    {
    static void
    Main()
    {
    PrintDocument PD =
    new
    PrintDocument();
    PD.PrintPage +=
    new
    PrintPageEventHandler(OnPrintDocument);

    try
    {
    PD.Print();
    }
    catch
    {
    Console.WriteLine("Yazıcı çıktısı alınamıyor...");
    }
    finally
    {
    PD.Dispose();
    }
    }

    private static void OnPrintDocument(object
    sender, PrintPageEventArgs e)
    {
    e.Graphics.DrawRectangle(Pens.Red,20,20,100,100);
    }
    }



    Yukarıdaki programı derleyip çalıştırdığınızda hiç bir uyarı eğer verilmeden sisteminize bir yazıcı bağlı OnPrintDocument() metodunda hazırlanan içerik yazıcıya gönderilecektir. Eğer sisteminize bağlı bir yazıcı yoksa doğal olarak catch bloğundaki kod çalışacaktır.

    Çizilen dörtgen nesnesinin kağıdın neresine basılacağını biz belirliyoruz. MarginBounds özelliğini kullanarak çizilecek içeriğin doğru noktaya çizilmesini sağlayabiliriz. Bu özellik sizin yazıcı ayarlarınız ile ilgili olduğu için programlama yolu ile kod içerisinden değiştirilemez. Yani bu özellik "read only" bir özelliktir. Dikkat edilmesi gereken diğer bir noktada yazıcıya gönderilecek içeriğin PageBounds özelliği ile belirtilen dörtgenin dışına taşmamasıdır. Bu yüzden çizimleri yapılırken bu özellik baz alınmalıdır.

    Yukarıda yazdığımız basit programda eksiklik bulunmaktadır. Bu eksiklik çizilecek dörtgenin tek bir sayfaya sığmadığı durumlarda görülür. Söz gelimi eğer dörtgenin yüksekliğini 2000 yaparsak yazıcıdan sadece ilk kağıda sığan bölümü çıkacaktır. Birden fazla sayfası olan çıktıları yazıcıya göndermek için PrintPageEventArgs sınıfnın HasMorePages özelliği kullanılır. Bu özellik OnPrintDocument() metodu içerisinde true değerine çekilerek çıktı alma işleminin devam ettiği belirtilmelidir. Ayrıca her bir sayfanın içeriğide metot her çağrıldığında farklı bir biçimde oluşturulacağı için programcının bu ayrımı da kodlaması gerekmektedir. Örneğin yüksekliği 2000 pixel olan bir dikdörtgeni tek sayfada bastıramayacağımız için ilk sayfaya sığmayan diğer bölümleri parçalayarak her bir sayfaya sığacak şekilde ayarlamalıyız. Bu işlem için PrintPageEventArgs sınıfnın HasMorePages değişkenini kullanacağız.

    Hemen diğer bölümlere geçmeden önce birden fazla sayfalı yazıcı çıktısı alma işlemine örnek verelim. Bu örnekte bir text dosyasının içeriğini yazıcıya nasıl gönderebileceğimizi inceleyeceğiz. Tabi burda yazının birden fazla sayfada olup olmadığının kontrolünü yapmamız gerekir. Yazıları yazıcı çıktısına göndermek için Graphics sınıfnın DrawString metodunu kullanacağız. Bu metot grafik arayüzüne belirli bir fontta ve font büyüklüğünde yazı yazmamızı sağlar. Önce örneği inceleyelim ardından örnek üzerinde biraz konuşacağız.

    using System;
    using
    System.IO;
    using
    System.Drawing;
    using
    System.Windows.Forms;
    using
    System.Drawing.Printing;

    class
    Printer
    {
    private static
    StreamReader dosyaAkimi;

    static void Main(string
    [] args)
    {
    dosyaAkimi =
    new
    System.IO.StreamReader("C:\\Print.txt");

    PrintDocument PD =
    new
    PrintDocument();
    PD.PrintPage +=
    new
    PrintPageEventHandler(OnPrintDocument);

    try
    {
    PD.Print();
    }
    catch

    {
    Console.WriteLine("Yazici çiktisi alinamiyor...");
    }
    finally
    {
    PD.Dispose();
    }
    }

    public static void OnPrintDocument(object sender,PrintPageEventArgs e)
    {
    Font font =
    new
    Font("Verdana", 11) ;
    float yPozisyon = 0 ; int LineCount = 0 ;
    float leftMargin = e.MarginBounds.Left;
    float topMargin = e.MarginBounds.Top;

    string line=null
    ;

    float
    SayfaBasinaDusenSatir = e.MarginBounds.Height / font.GetHeight() ;

    while (((line=dosyaAkimi.ReadLine()) != null
    ) && LineCount < SayfaBasinaDusenSatir)
    {
    yPozisyon = topMargin + (LineCount * font.GetHeight(e.Graphics));
    e.Graphics.DrawString (line, font, Brushes.Red, leftMargin,yPozisyon);

    LineCount++;
    }

    if (line = = null
    )
    e.HasMorePages =
    false
    ;
    else

    e.HasMorePages =
    true
    ;

    }
    }


    Kısaca Benzer Konulara da Bakmalısın

  2. Yazıcı Meleklerin İsimleri Ve Görevleri
  3. Yazıcı Meleklerin İsimleri Nelerdir
  4. Sağlıklı Kilo Alma Yöntemleri, Kilo Alma, kilo alma diyeti, kilo alma ilaçları, kilo alma
  5. Yeni Müracaat Ehliyet İşlemleri, Yabancı Ehliyet İşlemleri, Kayıp ehliyet çıkarma, Ehliyet
  6. Photoshopta Geri Alma, Photoshopta Yapılan İşlemleri Geri Alma, Photoshopta Birden Fazla İ
  7. Paylaş Facebook Twitter Google


  8. Sponsorlu Bağlantılar

 

 

<b>Yorum Yaparak Bu Konunun Geliştirilmesine Yardımcı Olabilirsin</b> Yorum Yaparak Bu Konunun Geliştirilmesine Yardımcı Olabilirsin


:

Powered by vBulletin® Version 4.2.5
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
akrostiş şiirmektup örnekleri