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.