Forum
Printıra küçük etiketlerde bilgi gönderiyoruz.
Bu etiket sayısı bazen 1 milyonu bulabiliyor.
Bir döngüyle print etsem hafıza dolacak;
Nasıl bir yöntemle yazdırmamı önerirsiniz. Printer hafızası dolması ve programsal yönetimi bakımından
fikre ihtiyacım var.
Etiketleri nasıl oluşturup yazdırdığınızı görmeden birşey söylemek zor.
Merhaba,
yazdırma işlemlerinde PrintTicket sistemi kullanılabilir. Eğer bu yolu biraz uzun veya zahmetli buluyorsanız, yazıcınıza ulaşıp yazdırma işleminin takibini WMI (Windows Management Instrumentation ) ile takip edebilirsiniz. Yazıcılarınızın DeviceID'sini "select * from Win32_Printer" gibi bir sorguyla öğrenebilirsiniz. Ek olrak daha fazla bilgi almk isterseniz buradaki adresten Win32_Printer sınıfı altından dah fazla bilgi toplayabilirsiniz. Bir yazdırma işleminde Printer bilgilerinin önemli olduğu kadar yazıcıya gönderilen işlemlerinde ne durumda olduğu önemlidir. Bu önemli detaylara da buradan Win32_PrintJob sınıfı altından ulaşabilirsiniz. Win32_PrintJob sınıfına ait "Status" ive StatusMask özellikleri ile her bir yazdırma işlemlerinizin detaylarına ulaşabilirsiniz.
Bunları C#/WMI ile yaparken dikkat etmeniz gereken hususlardan en önemli olanı ise, Race Condition'dır. Etiketlerinizi seri halinde göderdikten sonra anında kontrol etmeniz ve bu kontrollerin hemen ardından Win32_PrintJob sınıfı özellikleri ile yazıcı hafızasında size ait yazdırılmış özelliklerden "Description" / "Caption" gibi bilgilerin bulunmamasına dikkat etmelisiniz. Zira yazdırdığınız belgeleri veya etiketleri tekrar tekrar yazdırma ihtimaliniz çok yüksek. Tabii ki herhangi bir kontrol işlemi yapmadan yaparsanız.
Eğer bir network yazıcısı üzerinden yazdırma işlemleri yapıyorsanız mutlaka programınız içerisinden gönderdiğiniz etiket veya belgelere bir ID vermeniz ve bu ID'lerin programlama tarafında tekrar etmemesini sağlamak zorundasınız. Yazıcıya gönderilen her türlü belge ve bilginin kesin yazdırılmıştır gibi bir durumu yoktur, ayrıca bu bilgiyi de vermek isterim. Bunun nedeni ise gelişmiş veya hafızalı yazıcıların nasıl bir reaksiyon vereceğini bizler bilemeyiz. Zira Windows işletim sistemleri de aynı şekilde hareket etmektedir. Sadece bazı belirli durumlar hariç (Yazıcı offline ise veya network üzerinden ulaşılamıyor ise gibi kesin sonuçlar vb.) sadece yazıcıya belge gönderilir ve yazdırılmış kabul edilir. Hatta bunu denemek isterseniz WMI ile örnek bir konsol uygulaması açıp yazıcınıza bir belge gönderin ve bu belgeyi gönderdiğiniz satırın ardından bir döngü ile yazıcınızın içerisindeki PrintJob özelliklerini kontrol edin. Ne kadar yazıcıda kaldığını ve ne zaman silindiğini zira tespit edebilirsiniz. Ama yazıcınız size bu bilgiyi direk vermez.
Tavsiye olarak; belirli aralıklarla kontrol edilebilecek kadar belirli miktarları yazıcıya göndermeniz. Ve geliştirdiğiniz programınızın hr bir dökümana ID vermesini sağlayın. En azından kontrolü ID üzerinden yazıcının hafızasında yapıp olan biteni tespit edebilirsiniz. Bu performansı etkiler ancak yazdrma işlemlerinizdeki kesinlik yüzdenizi arttırır. Yazıcınızın teknik dökümanlarından hafıza bilgilerine ulaşabiliyorsanız, her bir yazdırma işleminizide hesaplayarak ne kadar gönderebleceğinize bir kesinlik getirebilirsiniz. Aksi halde yazıcıya sürekli olarak gönderdiğiniz belgelerin bir süre sonra yığılmadan dolayı yazıcınızın nasıl bir tepki vereceğini, nasıl bir uyarı vereceği veya belge kaybı verip vermeyeceği kontrolünüz dışına çıkmış olur.
Saygılarımla
There is always something you miss.