1 Ekim 2007 Pazartesi

.NET ile RAW Printing & Escape Code Kullanımı

Tekrar Merhaba,

.NET ile RAW Printing gerçekleştirmek ve Win32 Print Spool API lerini kullanmayı daha önceki yazımda anlatmıştım. Aslında o yazı Microsoft'un Knowledge Base'indeki bir makalenin nispeten Türkçeleştirilmiş ve hemen uygulanabilir hale getirilmişiydi. O yazımın sonlarına doğru Dot Matrix yazıcıların ham veri (RAW DATA) ile arasının iyi olduğunu ancak belli başlı bazı şeyleri yapabilmek için (örneğin dar yazı, kalın yazı, italik yazı, satır atlamak, line feed/carriage return yapmak gibi) yazıcının escape kodlarının kullanılması gerektiğini söylemiştim. Gene bahsi geçen yazımın sonunda escape kodları anlatmanın başka bir yazıya kısmet olduğunu belirtmiştim. İşte bugünkü yazımda bu konu üzerinde durmaya çalışacağım.

Bir .NET projesi açıyoruz vs. gibi gereksiz ayrıntıları geçiyorum ve direk olarak işimize yarayacak kısımdan başlıyorum. Öncelikle benim kullandığım yazıcı EPSON LX-300 dü. Dolayısı ile EPSON sitesinden escape kodları ve detaylarını anlatan dökümanı indirdim ve inceledim. Bu doküman çok karmaşık gözüksede aslında çok basit bir referans dökümanı. Yazıcıya yaptırmak istediğiniz işlemi önce dökümandan buluyorsunuz ve ilgili sayfaya gidiyorsunuz. Burada o işlemin escape kodu ASCII, Decimal ve Hexadecimal olarak belirtilmiş. Biz Decimal olan değerlerle ilgileneceğiz. Bu kısa bilgiyide verdikten sonra gelelim kod içerisinde yapmamız gerekenlere. Bu bölümde oldukça basit. Aşağıdaki kod aslında bir önceki yazımla bu yazımı birleştiriyor ve kendi kendini açıklayan bir kod parçacığı.

string condensed = Convert.ToChar(27).ToString() + Convert.ToChar(15).ToString();
string cancelCondensed = Convert.ToChar(18).ToString();
string cr = Convert.ToChar(13).ToString();
string lf = Convert.ToChar(10).ToString();
string ff = Convert.ToChar(12).ToString();
string crlf = cr + lf;
string crff = cr + ff;
string newPageLength = Convert.ToChar(27).ToString() + Convert.ToChar(67).ToString() + Convert.ToChar(24).ToString();
string draftYaziTipi = Convert.ToChar(27).ToString() + Convert.ToChar(120).ToString() + Convert.ToChar(48).ToString();
Bir önceki makaleden hatırlayacaksınız, yazıcıya yollamak istediğimiz verileri WritePrinter metoduna parametre olarak (ki bu parametreler string tipindeydi ve önceden formatlıydı - preformatted raw data) geçiyorduk. Yazıcıya bir işlem yaptırmak istediğimiz zamanda farklı bir yöntem izlemiyoruz. Gene aynı şekilde WritePrinter metoduna yukarıdaki gibi örneklenebilen stringlerden bir tanesini parametre olarak geçiyoruz ve yazıcının belirlenen işlemi gerçekleştirmesini sağlıyoruz. Örneğin Condensed (Dar yazı) yazı tipi için yazıcıya yollamamız gereken kod:

string condensed = Convert.ToChar(15);
PrintDirect.WritePrinter(lhPrinter, condensed, condensed.Length, ref pcWritten);

şeklinde olmalıdır.

Sanırım bu bilgiler başlangıç için yeterli olacaktır. En azından nokta vuruşlu yazıcıların günümüzde halen daha kullanılıyor olması, özellikle fatura, irsaliye gibi önceden basılmış ve sıralı formların nokta vuruşlu yazıcılara ihtiyaç duyması ve bu gereksinimlere yönelik program geliştirenler olması nedeniyle, bu iki yazının işe yarayacağını düşünüyorum. Daha öncede dediğim gibi escape kodlar gerçekten çok fazla ve yapmak istediğiniz her ne ise onu araştırıp uygun kodları bulmalısınız. Bu döküman size sadece bir başlangıç ve şablon sunuyor. Şablonu alıp uygulamak ve/veya geliştirmek sizin elinizde. Şimdilik bu kadar, görüşmek üzere.