Yazılımcının Günlüğü | YazilimGunlugu.Com
Arama
Makale Kategorileri
Üye Girişi
Şuanki online üyeler()
Aktif üye bulunmamaktadır.


Belge Yazdırma - 2

Yazar: Yağız Gönüler

Kategori: C#.NET & VB.NET

Eklenme Tarihi: 28.05.2007 14:16:42

Daha önceki makalemde PrintDocument sınıfını tanımış ve System.Drawing.Printing namespacei hakkında bilgi sahibi olmuştuk. Şimdi bu bilgilerimizi küçük bir uygulamayla pekiştirme vakti..

Daha önceki makalemde PrintDocument sınıfını tanımış ve System.Drawing.Printing namespacei hakkında bilgi sahibi olmuştuk. Şimdi bu bilgilerimizi küçük bir uygulamayla pekiştirme vakti..

Daha öncede söylediğimiz gini C#’ta belgeleri yazdırmak için kullanacağımız temel sınıf “PrintDocument” sınıfıdır.

Yazdırmayla ilgili sınıflar ise “System.Drawing.Printing” namespaceinde bulunur. Bu sınıflar hakkında detaylı bilgiler zaten ilk makalemde var.

Bu namespace hakkında detaylı bilgileri şu linklerden inceleyebiliyorduk;

http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDrawing.asp

http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDrawingPrinting.asp

Şimdi gelelim uygulamamızın içeriğine ve oluşturulmasına. Maddeler halinde uygulamamız şu şekilde işleyecektir.

- Öncelikle programımız bir Windows programıdır. 1 formdan oluşmaktadır.

- Formun üzerinde 5 label, 5 textbox ve 3 button bulunmaktadır.

- Buttonların isimleri btnyazdir, btnonizleme, btnayarlar’dır.

- Textbox ve labelların isimlerine herhangi bir şey yazmıyoruz.

- Ayrıca projemize toolboxtan pageSetupDialog, printDialog, printDocument ve printPreviewDialog ekliyoruz.

- PageSetupDialog, printDialog ve printPreviewDialog’un document özelliğinde printDocument1’i seçiyoruz.

- Amacımız textboxa yazdığımız değerlerin (bu değerler veritabanından da gelebilir) labellarla karşılıklı bir biçimde bir sayfada yayınlanması ve print edilebilinmesi.
Aslında bu tip işlemler crystal reports’la da yapılabilinir ancak bu şekilde daha basit ve daha az zamanla istediğimize ulaşabiliriz bu tamamen sizin opsiyonunuzda J
Uygulamanız orta düzeydeyse bu print yolu da ihtiyacınızı rahatlıkla karşılayabilir.

- Çalıştığım kurumdaki geliştirdiğim projede böyle bir şeye ihtiyacım vardı. 2 yol vardı önümde; ya crystral reportslarla yapıcaktım ya da bu şekilde bir sistemle.
Projem bir işçi takip programıydı ve artık banada 15 veri giriş çıkışı pek abartı gelmediğinden bu sistemi uyguladım.
Eğer sizden çok ciddi bir raporlama bekleniyorsa mutlaka crystal reports kullanın derim.
Bu sadece insanların bilgi edinebileceği basit bir yazdırma şekli olucak.
Aslında sayfa tasarımındaki yaratıcılık tamamen sizin elinizde. Grafikle arası iyi olanlar çok hoş şeyler çıkarabilir J

Formumuzun görünümü şu şekilde olacaktır;


Ayrıca eklediğimiz diğer kontrollerimizde şöyle;

Şimdi gelelim kodlarımıza. Kodların açıklamalarını satır aralarında bulabileceksiniz.
Bu şekilde birebir kodları anlayabilir ve aklınızda kurabilirsiniz.

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)

{

//bir graphics tanımlıyoruz

//e parametresi ile yazdırma işlemi sırasında kullanılacak nesne, metoda gönderılır

Graphics cizer = e.Graphics;

//f ismibde bir font tanımlayıp 12 punto buyuklugunde ve Trebuchet MS cinsinde oldugunu belirtiyoruz

Font f = new Font("Trebuchet MS", 12);

//bir fırça olusturup rengini yesil seciyoruz

Brush b = Brushes.Green;

//garfigimizin milimetrik olacagini belirtiyoruz
//cunku vericegimiz rakamlar milimetre hesabi olucak
//ve bize sayfa duzenimizi buna gore ayarlayacagiz

cizer.PageUnit = GraphicsUnit.Millimeter;

//yazdirma olayi drawstring metodu ile olmaktadir

//bu metodun ılk parametresi degeri alacagi kontrol olacaktir

//ikinci parametre font, ucuncusu brush, dorduncusu baslangic degeri

//ve besinci parametre bitis degeri olmalidir

cizer.DrawString(label1.Text, f, b, 25, 25);

cizer.DrawString(textBox1.Text, f, b, 100, 25);

cizer.DrawString(label2.Text, f, b, 25, 40);

cizer.DrawString(textBox2.Text, f, b, 100, 40);

cizer.DrawString(label3.Text, f, b, 25, 55);

cizer.DrawString(textBox3.Text, f, b, 100, 55);

cizer.DrawString(label4.Text, f, b, 25, 65);

cizer.DrawString(textBox4.Text, f, b, 100, 65);

cizer.DrawString(label5.Text, f, b, 25, 80);

cizer.DrawString(textBox5.Text, f, b, 100, 80);

//istersek sayfamızın tam ortasına bir elips cizdirebiliriz

//belki bu da sayfa tasarımını ayarlamamızda bıze yardımcı olabılır

//once bir kalem tanımlarız ve rengini belirleriz
//Pen p = new Pen(Color.Blue);
//sonrada elips cizecegimizi belirleyip parametrelerimizi gireriz
//cizer.DrawEllipse(p, 100, 100, 40, 30);

//yine istersek sayfamıza kenarlık cizdirebiliriz
//yine once bir kalem tanımlar rengini belirleriz

//Pen p = new Pen(Color.Blue);
//cizer.DrawRectangle(p, 20, 20, 100, 200);

//ise bir kolaylık olarak resimde ekleyebiliriz

//formumuza bir picturebox koyup resimini belirtiriz

//daha sonra o resmide yazdirmak icin

//e.Graphics.DrawImage(picturebox1.image, 50,50);

//seklinde belirtmemiz yeterli

}

private void printDocument1_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e)

{

//sayfa sayımızı hesaplıyoruz, en fazla 1 sayfa olabilir

printDocument1.PrinterSettings.MinimumPage = 1;

printDocument1.PrinterSettings.MaximumPage = 1;

}

private void btnayarlar_Click(object sender, EventArgs e)

{

//sayfa ayarlarımız ıcın bir dialog kutusu cıkartıyoruz

//bu kutudan gerekli ayarlamaları yapabiliriz

pageSetupDialog1.ShowDialog(this);

}

private void btnonizleme_Click(object sender, EventArgs e)

{

//onizleme kutusu cıkartarak sayfanın yazdırılmadan once son durumunu gorebiliriz

printPreviewDialog1.ShowDialog(this);

}

private void button2_Click(object sender, EventArgs e)

{

//son olarak yazdirma islemini yapacagimiz kutuyu ekrana getiriyoruz

//buradan ilgili printerı secerek yazdırma ıslemımızı tamamlayabılırız

printDialog1.ShowDialog(this);

}

Projemizi çalıştıralım. Önce sayfa ayarlarını yapacağımız buttonumuza tıklayalım.
Görünüm şu şekilde olmalıdır;

Daha sonra tamam diyerek formumuzdaki textboxlara çeşitli değerler girelim.
Değerleri girdikten sonra da önizleme butonuna tıklayalım. Görünüm şöyle olacaktır;

Son olarak önizleme penceremizi kapatıp yazdır buttonuna tıkladığımızda, belirttiğimiz printerdan sayfamızın çıktığı görünmelidir J
Aksi durumda kodlarımızı kontrol etmeliyiz. Özellikle toolboxtan sürüklediğimiz kontrollerin printDocument nesnesini belirtmeliyiz.
Zira bu küçük hatalar projemizde sorunlar ortaya çıkartabilir ve sonuç düzgün olmaz.

Yine bir sorun çıkarsa bana mail yoluyla ulaşabilirsiniz J

Umarım faydalı bir makale olmuştur, ben kendi projelerimde epey faydasını gördüm.

Tekrar etmem gerekirse, bir sayfa çıkartmak istediğiniz projelerinizde bu sistemi kullanabilirsiniz.

Ancak ciddi bir raporlama sistemi oluşturmak istiyorsanız crystal reports kullanmalısınız.

Farklı makalelerde tekrar görüşmek üzere.

Yağız GÖNÜLER
yagizgonuler@gmail.com

Yazar Hakkında Yorum Yok Yorum Yaz Yazara ait diğer Makaleler
Tema
Anket
ASP.NET MVC'yi Projeleriniz de kullandınız mı?


En Çok Okunan Makaleler
En Son Eklenen Makaleler
Soru Merkezinde Bekleyenler
Ana Sayfa | Hakkımızda | Editörler | Yazarlar | RSS RSS | İletişim
Yazılım Günlüğü 2007-2013 © Tüm Hakları Saklıdır.