Belge Yazdırma (PrintDocument, PrintSettings)

Yağız Gönüler tarafından yayınlanmıştır 13. Ağustos 2008 12:12
 

Bu namespace hakkında detaylı bilgi için şu linkleri inceleyebilirsiniz;

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

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

 



PrintDocument

 

Uygulamalarımızın çıktısını yazıcıya gönderen sınıf PrintDocument sınıfıdır. Bu sınıfın metod ve özelliklerini inceleyelim.

 


Özellikler

DefaultPageSettings: Yazdırılacak sayfalardaki kenar boşlukları (margins) gibi sayfa ayarlarını ifade eder. PageSettings sınıfının bir örneğini alır ve veya döndürür.

DocumentName: Belgenin ismini temsil eder. Bu ismi, yazıcının kendi penceresini açtığımızda görünen yazdırma kuyruğundaki belgeler kısmında görebiliriz.

OriginAtMargins : “Boolean” bir değer alır. Sayfanın koordinat sisteminin başlangıç noktasını belirlemede kullanılır. Varsayılan değeri “false” olarak ayarlıdır. Yani “Graphics” sınıfı kullanılarak sayfaya bir şey yazdırıldığında, 0:0 noktası sayfanın sol üst noktasıdır. Ancak “true” olarak ayarlanırsa 0:0 noktası sayfa marjin ayarlarına göre belirlenir. Örneğin sol marjin 50, üst marjin 80 ise başlangıç noktası 50:80 koordinatları olur.

PrintController: Yazdırma işlemini kontrol eden “PrintController” sınıfının bir örneğini alır.

PrinterSettings : Yazıcı ayarlarını tutar. “PrinterSettings” sınıfının bir örneğini alır.

 

Metodlar

Print: Yazdırma işlemini başlatır.

 

Olaylar

BeginPrint : “Print” metodu çağrıldıktan hemen sonra ilk sayfanın yazdırma işlemi başlamadan önce tetiklenir. Sayfada kullanılacak “Font” vb. tanımların yapıldığı yerdir. Bu tanımları “PrintPage” içerisinde yapıp, bu olayı kullanmayabiliriz. Ancak unutmayın ki genel kural olarak döngü içlerinde değişken tanımı yapılmaz. Hata değildir ama performansı açısından sakıncalıdır. “PrintPage” olayı her sayfa yazdırılırken çağrılır. Yani 100 sayfalık bir belgede 100 defa bu olayın metodu kullanılır. Yani bir tür döngüdür. Eğer değişken tanımları (Font,Color vs.) “PrintPage” içerisinde yapılırsa aynı değişken 100 defa tanımlanmış olur. “Local” değişken olduğu için metodun işi bitince siliniyor diyebiliriz. Ancak “Garbage Collector”de ancak sistemde başka işlem yoksa çalışır, yani en iyi ihtimalle yazdırma sonlanınca çalışacaktır.

 

EndPrint: Son sayfa yazdırıldıktan sonra tetiklenir. Genelde “BeginPrint” olayı metodunda tanımlanan değişkenlerin, yok edildiği yerdir.

 

PrintPage: Bir sayfanın yazdırma işlemi başladığında tetiklenir. Yazdırılacak metin, resim ve belgelerin yazdırıldığı yer, bu olayın metodudur.

 

QueryPageSettings: Her sayfa yazdırılmadan önce tetiklenir. Sayfaların ayarlarını belirler.

 



PageSettings

 

Bir sayfanın, sayfa ayarlarını belirlemek için kullanılır.

 

Özellikler

 

Bounds: Sayfanın boyutlarını bulur. ReadOnly bir özelliktir. “Rectangle” sınıfının bir örneğini döndürür. Sayfanın yatay veya dikey olmasını dikkate alır. (Landscape özelliğinin True olarak ayarlanmasına veya ayarlanmamasına göre boyutları belirler.)

 

Color: Boolean bir değer tutar. Sayfanın renkli basılıp basılmayacağını belirler.

 

HardMarginX: Sayfanın solundaki “hard margin” boşluğunu inç/100 biriminde bulur. ReadOnly özelliktedir. Hard Margin ayarları yazıcıdan yazıcıya değişir. Yazıcılar kağıtların kenarlarındaki bazı alanlara baskı yapmazlar. Bu alanlara Hard Margin denir.

 

HardMarginY: Sayfanın üstündeki “hard margin” boşluğunu inç/100 biriminde bulur. ReadOnly bir özelliktir.

 

LandsCape: Sayfanın yatay olup olmadığını belirler.

 

Margins: Sayfanın kenar boşluklarını belirler. Margins sınıfının bir örneğini tutar. Bu sınıfın Left, Right, Top, Bottom özelliklerini kullanarak kenar boşluklarını belirleyebiliriz.

 

PaperSize: Sayfanın boyutunu tutar. “PaperSize” sınıfının bir örneğini kullanır. Bu sınıfın özellikleri şunlardır;

Height : Yükseklik

Width : Genişlik
PaperName : Kağıt tipinin ismi

Kind :”PaperKind” numaralı listesindeki değerlerden birini alır. Bunlardan birkaçı letter, lettersmall, a3, a4, a4small, a5, b4, b5, legal, tabloid’dir.

 

PaperSource : Yazıcının kağıt kaynağını belirler. “PaperSource” sınıfının bir örneğini kullanır. Bu sınıfın “Kind” özelliğini kullanarak kaynağın tipini belirtebiliriz. Bu değerler “PaperSourceKind” numaralı listesinde tutulur. Bunlardan birkaçı upper, lower, middle, manual, envelope, manualfeed’dir.

 

PrintableArea : Yazıcıya göre yazdırılacak alanı belirler. Yazıcıların genellikle sayfa kenarlarını “kesmepayı” ve “tutmapayı” diye ifade edilen kendileri için ayarladıkları alanları(hard margin) vardır. Bu kısımları yazdırma için kullanamayız.

 

PrinterResolution : Yazıcının çözünürlüğünü belirler. “PrinterResolution” sınıfının bir örneğini kullanır. Bu sınıfın 3 özelliği vardır. Bunlar;

Kind: Çözünürlük türünü belirler. PrinterResolutionKind numaralı listesini kullanır. Bu listedeki (enumeration) değerler şunlardır;

High, Medium, Low, Draft, Custom, X(Yazıcının yatay çözünürlüğünü ayarlar), Y(Yazıcının dikey çözünürlüğünü ayarlar)’dir.

 

PrinterSettings: Sayfanın yazıcı ayarlarını belirler. “PrinterSettings” sınıfının bir örneğini kullanır.

 

 

 

Şimdi bu anlattıklarımı pekiştirmek amacıyla küçük bir uygulama geliştirelim ve makalemizi sonlandıralım.

 

Yeni bir Windows projesi oluşturuyoruz. Formumuza 3 button, 1 textbox (multiline özelliği true olmalı) ve yazdırma kontrollerimizi (printdocument1, printpreviewdialog1, printdialog1, pagesetupdialog1) ekliyoruz. Görünüm aşağıdaki gibi olmalıdır;

 

 

 

 

PrintPreviewDialog1’in Document özelliğini PrintDocument1 olarak ayarlıyoruz.

PageSetupDialog1’in Document özelliğini de PrintDocument1 olarak ayarlıyoruz.

 

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Drawing.Printing; //unutmayın

using System.Text;

using System.Windows.Forms;

 

 

namespace PrintWorks

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

 

private void btnayarlar_Click(object sender, EventArgs e)

{

this.PageSetupDialog1.ShowDialog();

PageSettings ayarlar = this.PageSetupDialog1.PageSettings;

this.PrintDocument1.DefaultPageSettings = ayarlar;

}

 

private void btnonizleme_Click(object sender, EventArgs e)

{

this.PrintPreviewDialog1.ShowDialog();

}

 

private void btnyazdir_Click(object sender, EventArgs e)

{

this.PrintDialog1.ShowDialog();

}

 

 

int toplamsayfa = 10;

int sayfano = 1;

 

private void PrintDocument1_PrintPage(object sender, PrintPageEventArgs e)

{

//yazi fontumuzu ayarliyoruz

Graphics gr = e.Graphics;

//yazi tipi arial, boyutu 30 ve bold karakterlerle yazilicak

Font f = new Font("Arial", 30, FontStyle.Bold);

//yazdirma alanimizin ozellıklerını belirliyoruz

Rectangle yazdirma_alani = new Rectangle();

yazdirma_alani.X = this.PrintDocument1.DefaultPageSettings.Margins.Left;

yazdirma_alani.Y = this.PrintDocument1.DefaultPageSettings.Margins.Top;

yazdirma_alani.Width = this.PrintDocument1.DefaultPageSettings.PaperSize.Width - this.PrintDocument1.DefaultPageSettings.Margins.Left - this.PrintDocument1.DefaultPageSettings.Margins.Right;

yazdirma_alani.Height = this.PrintDocument1.DefaultPageSettings.PaperSize.Height - this.PrintDocument1.DefaultPageSettings.Margins.Top - this.PrintDocument1.DefaultPageSettings.Margins.Bottom;

 

if (this.PrintDocument1.DefaultPageSettings.Landscape)

{

int tempwidth = yazdirma_alani.Width;

yazdirma_alani.Width = yazdirma_alani.Height;

yazdirma_alani.Height = tempwidth;

 

}

//yazdirma alaninin kenarındaki cizgilerin ozelliklerini ayarliyoruz

Pen p = new Pen(Color.Pink);

p.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;

gr.DrawRectangle(p, yazdirma_alani);

gr.DrawString(this.TextBox1.Text + " : " + sayfano, f, Brushes.Black, (yazdirma_alani.X + 10), (yazdirma_alani.Y + 20));

sayfano++;

if (sayfano < toplamsayfa)

e.HasMorePages = true;

else

e.HasMorePages = false;

 

}

 

 

}

}

 

 

 

 



Uygulamamızın çalışır durumdaki önizleme görüntüsü şöyle olacaktır;

 

 

 



Ayarlar butonunun click eventindeki

 

this.PageSetupDialog1.ShowDialog();

PageSettings ayarlar = this.PageSetupDialog1.PageSettings;

this.PrintDocument1.DefaultPageSettings = ayarlar;

 

kodların sayesinde açılan sayfa ayarları penceresindeki ayarlar olduğu gibi belgemize aktarılmaktadır.

 

 

 

 

 




Bu makalemizde böylelikle sona erdi. C#.Net ile Belge yazdırmayı, PrintDocuments ve PrintSettings sınıfının özelliklerini öğrenmiş olduk.

Umarım faydalı ve işe yarar olmuştur. Farklı makalelerde tekrar görüşmek üzere, İyi çalışmalar.

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler: ,

Software | Articles | Windows

Yorum ekle


(Gravatar simgesini gösterecek)  

  Country flag

biuquote
  • Yorum
  • Canlı önizleme
Loading





Bu site BlogEngine.NET 1.4.5.0 ile oluşturulmuştur. Türkçe çevirisi BlogEngine TR ekibi tarafından yapılmıştır.
Sitedeki kod ve tasarım değişiklikleri ise Yağız Gönüler tarafından geliştirilmiştir.
2008 © www.yagizgonuler.com

Şifahen değil acilen!

Anket

Yazılım geliştirirken en keyif aldığınız alan hangisi?




Sonuçlar

Son Yorumlar

Comment RSS

Calendar

<<  Ocak 2009  >>
PaSaÇaPeCuCuPa
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

Yazıları geniş takvimde göster

Ne Dinliyorum?

Kirpi - TearDrop (12 saat önce)
Kirpi - My Name Is Kirpi (12 saat önce)
Kirpi - The Song (12 saat önce)
Kirpi - Spell (12 saat önce)
Huseyin Karadayi - Bonus Track Funk Clarinet (String Mix) (12 saat önce)
Huseyin Karadayi - Sacred Gate (13 saat önce)
Huseyin Karadayi - Exotica (13 saat önce)
Huseyin Karadayi - Take Me Away / No Time To Waste (Vocal By Melis Sökmen) (13 saat önce)
Huseyin Karadayi - Eyes Don't Lie (Duet By Enoi & Funky C) (13 saat önce)
Huseyin Karadayi - This Way (Usy Groove) (13 saat önce)

Ne Okuyorum?


Haftanın Sözü


"Sukûnetim asaletimdendir;
Lâkin her lâfa verilecek bir cevabım var.
Bir bakarım lâf lâfmı diye,
Birde bakarım söyleyen adammı diye.."

Mevlânâ Celaleddin-i Belhi Rumi
(1207-1273)

Adanmış Hayatlar

"Zaten aşklar hep yalan dolan,
Sonu hep acı hüsran.
Bize her sevdadan geriye kalan
Sadece Galatasaray..
"

Son Dakika

İstanbul'da Hava

ISTANBUL

Ziyaretçi Sayısı

Ziyaretçi Sayısı