Java Uygulamasından Yazıcıya Bilgi Yollamak

CorsaiR

Emektar
27 Ara 2005
1,228
18
Çekirdekten
Java Uygulamasından Yazıcıya Bilgi Yollamak
Java'da print işlemleri AWT vasıtasıyla gerçekleştiriliyor. Bizim için en önemli sınıf java.awt.PrintJob sınıfı. Bu sınıf vasıtasıyla yazıcınızın özelliklerini öğrenebilirsiniz. Bunun için aşağıdaki fonksiyonlar mevcuttur.


int getPageResolution()
Dimension getPageDimension()
boolean lastPageFirst()

getPageResolution( ):

Inç başına düşen nokta sayısını verir.

getPageDimension( ):

Yazılabilir alanın piksel olarak boyutlarını verir.

lastPageFirst( ):

Eğer son sayfa ilk önce basılacak ise true yollar, en son basılacaksa false yollar. Eğer bu kodu bir frame içinde çalıştırdığımız düşünürsek bu kod aşağıdaki gibi olacaktır.

java.awt.PrintJob pjob = getToolkit().getPrintJob( this,"Liste Yazimi", ozellikler);

Burada this kullandığımız Frame'i ifade ediyor.

Yukardaki fonksiyonlardan dönen bilgileri kullanarak sayfaya çizim işlemlerinin nasıl gerçekleşeceğini kendiniz belirleyeceksiniz. Kısacana bu bilgiler yardımıyla kağıdın dışına taşmamayı ve kağıtların basım sırasına göre yazıcıya gidecek bilgiyi ayarlayacaksınız.

İlk olarak bir PrintJob nesnesine ihtiyacımız var.

Çizim işlemi appletin draw fonksiyonundaki gibi java.awt.Graphics sınıfı yardımıyla gerçekleşir. Bu sınıfın desteklediği her türlü çizim işlemini yapabilirsiniz. Grephics nesnesini PrintJob'tan aşağıdaki şekilde ulaşmalısınız.

java.awt.Graphics sayfa = pjob.getGraphics();

Şimdi sıra unutmamanız gereken noktaya geldi. PrintJob'tan alınan Graphics objesinine bir font atanmamıştır. Eğer sizde bir font atamazsanız program sırasında exception yemektesiniz. Bundan dolayı Graphics nesnesini çizim için kullanmadan önce fontunu ayarlamalısınız.

Font helv = new Font("Helvetica", Font.PLAIN, 12);
sayfa.setFont(helv);


Fontumuzuda ayarladığımıza göre artık çizim işlemlerine geçebiliriz. Burada başlangıçtada bahsettğimiz bir kaç noktaya tekrar deyinmemizde yarar görmekteyim. Sayfaya çizim yaparken sayfanın dışına çizdirme yapmamak için belli kontroller yapmalısınız. ( eni aşmama, boyu aşmama gibi ) . Bu işlem için ise kullandığınız fontun boyutları bilimenizde yarar var. Aşağıda bir fontun boyutlarının naıl alınacağına dağir kodları görebilirsiniz.


FontMetrics fm = sayfa.getFontMetrics(helv);
int fontHeight = fm.getHeight();
int fontDescent = fm.getDescent();


Bu işlemden sonra istediğiniz çizimleri yapabilirsiniz. Her sayfa sonunda Graphics nesnesini dispose edip, yeni sayfa için PrintJob'tan tekrar istemelisiniz. Yazıcıya bilgiler Graphics nesnesi dispose olduktan sonra yollanmaktadır. Sayfa sonları için aşağıdakine benzer bir kod görebilirsiniz. Dikkat edilecek olursa fontu set etmeyi unutmuyoruz.


sayfa.dispose();
sayfa = pjob.getGraphics();
if (sayfa != null)
{
sayfa.setFont (helv);
}


En sonuda da PrintJob işlemini end( )ile sonlandırıyoruz.

pjob.end();

Örnek Program:

Yazımış olduğum örnek uygulama bir frame içersinde bir list, button, text field ve label dan oluşmaktadır. Textfield'e yazdıktan sonra enter'a bastığınızda text field içindeki bilgi listeye eklenmekte . Yaz buttonuna bastığınızda ise bu bilgi yazıcıya gönderilmektedir. Bu sırada label içersinde durumu belirten mesajlar yazılmaktadır. Yazdırma işlemi program içersinde yaz() fonksiyonunda yapılmaktadır

Programdan bir görüntü aşağıdaki gibidir. Bu görüntü yaz tuşuna basıldıktan sonra elde edilmiştir. Yaz tuşuna basıldığında Yazıcıya ait ekran geliyor.

yazici.gif
Programı nasıl çalıştıracağım

Kodu javac PrintTest2.java şeklinde derleyiniz. PrintTest2.class dosyası oluşacak
java PrintTest2 şeklinde programı çalıştırınız.


Programı Download etmek için

PrintTest2.java , PrintTest2.class dosyalarını download etmek için buraya basınız. (5KB)
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.