Wordpress Free ThemesOnline TipsArticles DirectoryForeclosure HelpHouse For Sale By OwnerHouse StagingProperty Management

WPF (Windows Presentation Foundation) ile Printing – 1

| 18 Ekim 2011 | 2 Comments

Merhaba değerli okurlar…Bu makalemde Windows Form’larındaki görsel  eksikliği tamamlama amacıyla çıkarılan ve her geçen gün kullanımı yaygınlaşan  WPF  teknolojisi ile print işlemleri nasıl yapılır sorusunu temel seviyede cevaplamaya çalışıyor olacağım…

Öncelikle şunu belirtmekte fayda var.Wpf ile printing işlemleri  WinForms’a göre çok daha güçlü.Bunun sebepleri arasında tabi ki WPF’in  DirectX  ile  çalıştığı gerçeğinin yanısıra Win32 API  ve WMI (Windows Management Instrumentation)  vb teknolojileri artık System.Print kütüphanesi altında desteklemektedir J.Winforms tarafında ise .Net kütüphaneleri bunları kullanmayı güçleştiriyordu…

WPF tarafında yazdırma işlemlerini PrintDialog nesnesiyle gerçekleştirmekteyiz.Bu metodun iki tane yazdırma metodu vardır :

1.PrintVisual
2.PrintDocument

Element İçeriğini Yazdırma (PrintVisual)

WPF ile Xaml ‘a eklenen herhangi bir elementin içeriği yazdırılabilir…Diyelim ki resimdeki gibi bir formumuz olsun :

clip_image002

WPF Printing 01

Form’daki elemanlar Grid’in içerisinde bulunmaktadır…Grid’in name özelliğine ‘grdWindow’  ismini veriyorum.Daha sonra ise Yazdır butonunun Click event’inde :

PrintDialog  isimli nesne oluşturuyoruz … Bu nesnenin  ShowDialog() metodu  bize yazdırma penceresini karşımıza çıkarıyor…

clip_image004

WPF Printing 02

Ancak gelen pencereden Yazdır butonuna bassak da bir işlem gerçekleşmeyecektir…Çünkü  hala nereyi yazdıracağını belirtmedik.Ancak bundan önce kullanıcının Yazdır butonuna bastığından emin olmamız gerekiyor.Eğer basıldıysa bize True sonucunu döner,İptal’e  basıldığı zamansa False döner.

clip_image005

WPF Printing 03

Yazdırmak için  PrintDialog   nesnesinin PrintVisual() metodunu kullanabiliriz…Bu metod bizden içeriğini yazdırmak istediğimiz kontrolü ve description bilgisini ister….Şu anda tanımlı yazıcı olmadığından OneNote’da deneme yapacağız…Çalıştıralım :

clip_image007

WPF Printing 04

Resimde  görüldüğü üzere çıktıyı alabildik…Bu kadar basit J

Element İçeriğini Yazdırma (PrintDocument)

Eğer ki daha komplex yazdırma işlemi yapacaksanız,daha çok opsiyon istiyorsanız ve hatta birden çok WPF formunu yazdırmak istiyorsanız PrintVisual metodu yerine  bu yöntemi kullanmalısınız…
PrintVisual adından da anlaşılabileceği gibi görsel ‘i yazdırır..PrintDocument ile kısmi alanları da yazdırabiliyorsunuz..Biz örneğimizde aşağıdaki resimdeki form’da bulunan RichTextBox kontrolündeki yazıları  yazdırma işlemini inceleyeceğiz…

clip_image009

WPF Printing 05

Not : WPF’de RichTextBox kontrolünün Text özelliği yoktur.Bunun yerine Document
özelliği vardır…

Resimdeki ilgili butonun click event’inde işlemlerimizi gerçekleştirmeye başlayalım :

İlk önce gene aynı şekilde PrintDialog nesnesini oluşturmalıyız ve kullanıcının Yazdır butonuna bastığından emin olmalıyız…Daha sonra daha düzgün bir çıktı olması açısından aşağıdaki ayarlamaları yapmalıyız…


clip_image010

WPF Printing 06

Sıra PrintDialog nesnesinin  PrintDocument  metodunu çağırmaya…Bu metod :

clip_image012

WPF Printing 07

Bizden DocumentPaginator  isimli bir nesne istiyor.Aslında direkt bu class’ı vermeyeceğiz.. Çünkü  direkt olarak DocumentPaginator nesnesinden instance  alamıyorsunuz..Bunun için IDocumentPaginatorSource interface’inden  yardım alacağız..Çünkü bu interface’in resimde istenildiği gibi  DocumentPaginator tipinde bir property’si var.


clip_image013

WPF Printing 08

RichTextBox kontrolü’nün Document  property’sini  IDocumentPaginatorSource  ‘e   cast ediyoruz.Çünkü  aralarında aşağıdaki gibi bir bağ vardır :

clip_image015

WPF Printing 09

RichTextBox  kontrolünün Document özelliği FlowDocument tipinde…Peki acaba FlowDocument nedir diye baktığınızda bir de ne görüyorsunuz :

Meğer işin özü hep   IDocumentPaginatorSource  interface’i imiş J Dolayısıyla cast ederek DocumentPaginator property’sine erişebiliyorum…Hepsi bu kadar J Çalıştırdığımızda ise :

Print edelim bakalım.

Sonuc :  PrintDocument metodu ile IDocumentPaginatorSource  ‘ u  implemente etmiş Document ‘lar print edilebilir.(Bknz  FlowDocument,FixedDocument…).

Kaynak kodlar için tıklayınız….

Bir sonraki WPF Printing makalesinde FlowDocument  ve FixedDocument nesneleri ile daha gelişmiş yazdırma işlemlerini inceliyor olacağız…

Görüşmek üzere…

Mustafa DAĞDELEN

RastGele Reklam Kodu


Etiketler: , , , ,

Kategori: Web Yazılım

Mustafa DAĞDELEN

Yazar Hakkında ()

Yorumlar (2)

Trackback URL | Comments RSS Feed

  1. Elinize sağlık Mustafa bey yine güzel bir çalışma ile karşımızdasınız. 🙂

  2. Aykut CEVİZCİ Aykut CEVİZCİ dedi ki:

    Mustafa Bey Elinize Sağlık .Çok Güzel Bir Çalışma Olmuş.

Bir yorum yazın

Bir Yorum yazmak için giriş yapmalısınız.