Merhaba değerli Webkolog.net takipçileri, bugünkü yazımızda C# .NET Framework 4 ile Windows Forms uygulamalarımızda yazdırma (print) işlemlerini nasıl gerçekleştireceğimizi detaylı bir şekilde inceleyeceğiz. Uygulamalarımızdan raporlar, belgeler veya grafikler basmak, birçok iş uygulamasının temel bir ihtiyacıdır. .NET Framework, bu işlemleri kolaylaştıran güçlü sınıflar sunar. Gelin, yazdırma süreçlerinin temel adımlarını ve ilgili kontrolleri birlikte keşfedelim.
Yazdırma İşlemlerinin Temel Mantığı
C# .NET Framework'te yazdırma işlemleri, genellikle aşağıdaki temel adımları içerir:
- Yazdırılacak İçeriği Tanımlama:
PrintDocument
sınıfı, yazdırılacak belgeyi temsil eder. PrintPage
Olayını İşleme: Yazdırılacak içeriğin her sayfasının nasıl çizileceğini bu olayda belirtiriz.- Yazdırma Ayarlarını Yapma:
PrintDialog
ile yazıcı seçimi,PageSetupDialog
ile sayfa ayarları gibi seçenekleri kullanıcıya sunarız. - Yazdırma Önizlemesi (İsteğe Bağlı):
PrintPreviewDialog
ile yazdırmadan önce belgenin nasıl görüneceğini gösteririz. - Yazdırma İşlemini Başlatma:
PrintDocument
nesnesininPrint()
metodu ile yazdırma işlemini başlatırız.
Yazdırma İşlemlerinde Kullanılan Temel Sınıflar
Yazdırma işlemleri için System.Drawing.Printing
ve System.Windows.Forms
ad alanlarındaki sınıfları kullanırız.
1. PrintDocument
Yazdırılacak belgeyi temsil eden temel sınıftır. En önemli olayı PrintPage
olayıdır.
DocumentName
: Yazdırma kuyruğunda görünecek belge adı.PrinterSettings
: Yazıcı ayarlarını içerir (hangi yazıcıya yazdırılacağı, kopya sayısı vb.).DefaultPageSettings
: Varsayılan sayfa ayarlarını içerir (kağıt boyutu, yönlendirme, kenar boşlukları vb.).Print()
: Yazdırma işlemini başlatır.
2. PrintDialog
Kullanıcının yazıcı seçmesini, kopya sayısını belirlemesini ve yazdırma işlemini başlatmasını sağlayan standart Windows diyalog kutusudur.
Document
: BağlanacağıPrintDocument
nesnesi.AllowSomePages
: Kullanıcının belirli sayfaları yazdırmasına izin verilip verilmediğini belirler.ShowDialog()
: Diyalogu gösterir.
3. PageSetupDialog
Kullanıcının sayfa boyutunu, yönlendirmesini (dikey/yatay) ve kenar boşluklarını ayarlamasını sağlayan standart Windows diyalog kutusudur.
Document
: BağlanacağıPrintDocument
nesnesi.ShowDialog()
: Diyalogu gösterir.
4. PrintPreviewDialog
Yazdırma işleminden önce belgenin nasıl görüneceğini kullanıcıya gösteren bir önizleme penceresidir.
Document
: BağlanacağıPrintDocument
nesnesi.ShowDialog()
: Diyalogu gösterir.
PrintPage
Olayı: İçeriği Çizme
PrintDocument
nesnesinin PrintPage
olayı, yazdırma işleminin kalbidir. Her sayfa yazdırılmadan önce bu olay tetiklenir. Bu olay işleyicisinde, sayfanın üzerine metin, grafik veya diğer görsel öğeleri çizmek için Graphics
nesnesini kullanırız.
using System.Drawing; // Graphics, Font, SolidBrush için
using System.Drawing.Printing; // PrintPageEventArgs için
private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
// Graphics nesnesi, sayfa üzerine çizim yapmak için kullanılır
Graphics g = e.Graphics;
// Yazı tipi ve rengi tanımlama
Font font = new Font("Arial", 12);
SolidBrush brush = new SolidBrush(Color.Black);
// Sayfa kenar boşlukları
float solKenarBosluk = e.MarginBounds.Left;
float ustKenarBosluk = e.MarginBounds.Top;
// Sayfaya metin çizme
g.DrawString("Merhaba Webkolog.net Okurları!", font, brush, solKenarBosluk, ustKenarBosluk);
// Daha fazla sayfa olup olmadığını belirtme
// Eğer yazdırılacak başka içerik varsa e.HasMorePages = true; yapılır, aksi takdirde false.
e.HasMorePages = false;
}
e.Graphics
: Sayfa üzerine çizim yapmak için kullanılanGraphics
nesnesi.e.MarginBounds
: Sayfanın yazdırılabilir alanının sınırları.e.PageBounds
: Sayfanın toplam fiziksel sınırları.e.HasMorePages
: Eğer yazdırılacak başka sayfa varsatrue
olarak ayarlanır, aksi takdirdefalse
. Bu,PrintDocument
'ın bir sonraki sayfayı istemesini sağlar.
Örnek 1: Basit Metin Yazdırma
Bu örnekte, bir buton tıklamasıyla basit bir metin belgesini yazdırma işlemini adım adım göstereceğiz.
using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
public partial class Form1 : Form
{
private PrintDocument printDocument1;
private PrintDialog printDialog1;
private PageSetupDialog pageSetupDialog1;
private PrintPreviewDialog printPreviewDialog1;
public Form1()
{
InitializeComponent();
// PrintDocument nesnesini oluştur
printDocument1 = new PrintDocument();
// PrintPage olayını bağla
printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
// Diyalog kontrollerini oluştur
printDialog1 = new PrintDialog();
printDialog1.Document = printDocument1; // PrintDialog'ı PrintDocument'a bağla
pageSetupDialog1 = new PageSetupDialog();
pageSetupDialog1.Document = printDocument1; // PageSetupDialog'ı PrintDocument'a bağla
printPreviewDialog1 = new PrintPreviewDialog();
printPreviewDialog1.Document = printDocument1; // PrintPreviewDialog'ı PrintDocument'a bağla
// Form üzerinde butonlar olduğunu varsayalım:
// buttonPrint (Yazdır), buttonPageSetup (Sayfa Ayarları), buttonPrintPreview (Baskı Önizleme)
this.buttonPrint.Click += new EventHandler(buttonPrint_Click);
this.buttonPageSetup.Click += new EventHandler(buttonPageSetup_Click);
this.buttonPrintPreview.Click += new EventHandler(buttonPrintPreview_Click);
}
// PrintPage olayı işleyicisi: Sayfaya ne çizileceğini burada belirtiriz
private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
Graphics g = e.Graphics;
Font font = new Font("Arial", 14, FontStyle.Regular);
SolidBrush brush = new SolidBrush(Color.Black);
// Yazdırılacak metin
string metin = "Bu, Webkolog.net için C# ile yazdırma işlemlerini anlatan bir örnektir.\n\n";
metin += "Bu metin, PrintDocument'ın PrintPage olayında çizilmektedir.\n";
metin += "Farklı fontlar, renkler ve konumlar kullanarak daha karmaşık çıktılar oluşturabilirsiniz.";
// Metni sayfaya çiz
// DrawString(metin, font, fırça, x_koordinatı, y_koordinatı)
g.DrawString(metin, font, brush, e.MarginBounds.Left, e.MarginBounds.Top);
// Başka sayfa yok
e.HasMorePages = false;
}
private void buttonPrint_Click(object sender, EventArgs e)
{
// PrintDialog'ı göster
if (printDialog1.ShowDialog() == DialogResult.OK)
{
// Kullanıcı "Yazdır"a bastıysa yazdırma işlemini başlat
printDocument1.Print();
}
}
private void buttonPageSetup_Click(object sender, EventArgs e)
{
// PageSetupDialog'ı göster
pageSetupDialog1.ShowDialog();
}
private void buttonPrintPreview_Click(object sender, EventArgs e)
{
// PrintPreviewDialog'ı göster
printPreviewDialog1.ShowDialog();
}
}
Örnek 2: Resim Yazdırma
Bu örnekte, bir resmin nasıl yazdırılacağını göstereceğiz.
using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
public partial class Form1 : Form
{
private PrintDocument printDocument2;
private PrintDialog printDialog2;
private PrintPreviewDialog printPreviewDialog2;
private Image imageToPrint; // Yazdırılacak resim
public Form1()
{
InitializeComponent();
printDocument2 = new PrintDocument();
printDocument2.PrintPage += new PrintPageEventHandler(printDocument2_PrintPage);
printDialog2 = new PrintDialog();
printDialog2.Document = printDocument2;
printPreviewDialog2 = new PrintPreviewDialog();
printPreviewDialog2.Document = printDocument2;
// Form üzerinde bir buton (buttonPrintImage) olduğunu varsayalım
this.buttonPrintImage.Click += new EventHandler(buttonPrintImage_Click);
// Yazdırılacak resmi yükle (örnek olarak yerel bir resim dosyası)
// Lütfen bu yolu kendi sisteminizdeki geçerli bir resim dosyası ile değiştirin
try
{
imageToPrint = Image.FromFile("C:\\path\\to\\your\\image.jpg");
// Veya bir PictureBox'tan alabilirsiniz: imageToPrint = pictureBox1.Image;
}
catch (Exception ex)
{
MessageBox.Show("Resim yüklenirken hata oluştu: " + ex.Message, "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
imageToPrint = null; // Hata durumunda resmi null yap
}
}
private void printDocument2_PrintPage(object sender, PrintPageEventArgs e)
{
if (imageToPrint != null)
{
Graphics g = e.Graphics;
// Resmi sayfanın sol üst köşesine, kenar boşlukları dahilinde çiz
// Resmi sayfanın tamamına sığdırmak için:
// g.DrawImage(imageToPrint, e.MarginBounds);
// Resmi belirli bir boyutta çizmek için:
int x = e.MarginBounds.Left;
int y = e.MarginBounds.Top;
int width = imageToPrint.Width;
int height = imageToPrint.Height;
// Eğer resim sayfa sınırlarını aşıyorsa boyutunu ayarla
if (width > e.MarginBounds.Width)
{
width = e.MarginBounds.Width;
height = (int)(imageToPrint.Height * ((float)width / imageToPrint.Width));
}
if (height > e.MarginBounds.Height)
{
height = e.MarginBounds.Height;
width = (int)(imageToPrint.Width * ((float)height / imageToPrint.Height));
}
g.DrawImage(imageToPrint, x, y, width, height);
}
e.HasMorePages = false; // Başka sayfa yok
}
private void buttonPrintImage_Click(object sender, EventArgs e)
{
if (imageToPrint == null)
{
MessageBox.Show("Yazdırılacak bir resim bulunamadı.", "Uyarı");
return;
}
if (printDialog2.ShowDialog() == DialogResult.OK)
{
printDocument2.Print();
}
}
}
0 yorum:
Yorum Gönder