Makale Özeti

Merhaba arkadaşlar bu makalemizde Silverlight 4 Beta ile gelen PrintDocument sınıfını kullanarak yazıdırma işleminin nasıl yapıldığını inceleyeceğiz.

Makale

Silverlight 4 Beta ile birlikte gelen yeniliklerden biri de silverlight uygulamarına gelen yazdırma (printing) desteği. Silverlight 4 Beta ile birlikte yazdırma işlemi yapmak için System.Windows.Printing namespace’i altında yer alan PrintDocument sınfını kullanacağız. Bu sınıf ile uygulamanın tamamını yada belli bir UI Elementin yazdırılmasını sağlayabiliyoruz. Şimdi bu sınıfa ait üyeleri detaylı olarak inceleyelim.

PrintPage Event’i, yazdırılacak olan UI elementin belirlendiği event.

StartPrint Event’i, yazdırma işlemi başladığında çalışacak olan event.

EndPrintEvent’i, yazdırma işlemi sona erdiğinde yada herhangi bir hata meydana geldiğinde çalışacak olan event. (Kartuş bittiğinde yada yazıcıya ulaşılamadığında vb. gibi sebeplerden hata alabiliriz)

DocumentName özelliği, yazdırma kuyruğunda (print queue) gösterilen dokümanın adı.

Print Metodu, print dialog ekranını açarak yazdırma işleminin başlatılmasını sağlar.

Yazdırma işlemini yapacağımız sınıfı ve üyeleri inceledikten sonra örneğimize geçebiliriz. Visual Studio 2010 ile yeni bir silverlight projesi oluşturalım. Ekranımızda bir TextBlock ve bir Button ekleyelim. TextBlock içerisinde yer alan text’i yazıcıya göndererek yazdırılmasını sağlayalım.

[XAML]

<UserControl x:Class="PrintIslemi.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Height="200" Width="500">
<Grid x:Name="LayoutRoot" Background="White">
    <
TextBlock Margin="15,16,15,62" TextWrapping="Wrap" FontWeight="Bold" FontSize="40" x:Name="txtMetin">Silverlight İle Yazdırma İşlemi</TextBlock>
    <Button Height="23" HorizontalAlignment="Left" Margin="413,165,0,0" x:Name="btnYazdir" Content="Yazdır" VerticalAlignment="Top" Width="75" />
</Grid>
</UserControl>

Şimdi Yazdırma işlemine başlayabiliriz. PrintDocument sınıfını kullanabilmemiz için ilk olarak System.Windows.Printing namespaceni ekleyelim ve PrintDocument sınıfının bir örneğini alalım. Yazdırma işlemi butona tıkladığında başlayacak.

[C#]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Printing; // Unutmuyoruz !

namespace PrintIslemi
{

    public
partial class MainPage : UserControl
   
{
        // Yazdırma işlemi için PrintDocument sınıfının örneğini alalım.
       
private PrintDocument PrintDocument = new PrintDocument();

        public
MainPage()
        {
            InitializeComponent();
            PrintDocument.StartPrint += new EventHandler<StartPrintEventArgs>(PrintDocument_StartPrint);
            PrintDocument.EndPrint += new EventHandler<EndPrintEventArgs>(PrintDocument_EndPrint);
            PrintDocument.PrintPage += new EventHandler<PrintPageEventArgs>(PrintDocument_PrintPage);
            btnYazdir.Click += new RoutedEventHandler(btnYazdir_Click);
        } 
   
        void
PrintDocument_PrintPage(object sender, PrintPageEventArgs e)
        {
            e.HasMorePages = false; // Yazdırılacak başka sayfa varmı?
           
e.PageVisual = txtMetin; // Herhangi bir UI element;
           
e.PrintableArea = new Size(txtMetin.Width, txtMetin.Height);// Yazıdırılacak alanın size’ı
       
}

        void
btnYazdir_Click(object sender, RoutedEventArgs e)
        {
            PrintDocument.DocumentName = "Silverligt 4 Beta ile Yazdırma İşlemi";// Yazdırma kuyruğunda gösterilecek olan metin
           
PrintDocument.Print();// Yazdırma işlemini için print dialog ekranını açar ve yazdırma işleminin başlatılmasını sağlar.
       
}

        void
PrintDocument_EndPrint(object sender, EndPrintEventArgs e)
        {
            // Yazdırma işleminde bir hata geldiğinde yada sona erdiğinde çalışacak olan event..
           
if (e.Error == null) // Hata yoksa
            {
                MessageBox.Show("Yazdırma işlemi sona erdi...");
            }
            else // Hata varsa
           
{
                MessageBox.Show("Bir hata meydana geldi...");
            }
        } 

        void
PrintDocument_StartPrint(object sender, StartPrintEventArgs e)
        {
            // Yazdırma işlemi başladığında çalışacak olan event..
           
MessageBox.Show("Yazdırma işlemi başlıyor...");
         }
    }
}

Yazdırma işlemini başlatmak için butona tıklayalım.için butona tıklayalım.

Yazıcımız var ama biz yine de Microsoft XPS Document Writer’ı seçelim :)

Yazdırma kuyruğuna bakacak olursak kuyruktaki dökümanın adını PrintDocument sınıfının DocumentName özelliği ile belirtmiştik. Şimdi XPS dökümanını açalım bakalım.

Bu kadar J

Bu makalenin de sonuna geldik başka bir makale de görüşmek üzere. Silverlight ile kalın ;)

Sem GÖKSU
www.semgoksu.com | www.yazilimgunlugu.com
sem.goksu@yazilimgunlugu.com

Kaynaklar
Silverlight 4 Beta SDK