LogicSoft.com.pl - systemy informatyczne

Wysyłanie kodów sterujących do drukarek igłowych w C#

Uwaga, otwiera nowe okno. PDFDrukujEmail

Podczas drukowania w trybie tekstowym na drukarkach igłowych nieraz programista znajduje się w sytuacji, że chciałby zacząć drukować tekst od nowej strony, zmienić czcionkę, pogrubić lub podkreślić tekst. Do tego celu służą kody sterujące odpowiednio zaimplementowane w drukarkach. Celem tego artykułu jest przedstawienie sposobu wysyłania kodów sterujących do drukarek igłowych w języku C#.

Na podstawie poprzedniego artykułu opisującego drukowanie w trybie tekstowym na drukarce igłowej zaprezentuje sposób wysyłania kodów sterujących umożliwiających dowolną modyfikację druku. Niezbędne w tym projekcie będzie zaimplementowanie opisanej w poprzednim artykule klasy WydrukLPT. Ważnym elementem będzie także dokumentacja techniczna zawierająca spis kodów sterujących wybranej drukarki. W moim przypadku będzie to dokumentacja do drukarek firmy OKI, którą dodatkowo zamieściłem na swoim serwerze. Odpowiednio jej używając można odczytać jaki kod przypada do jakiej instrukcji.

Na podstawie dokumentacji przedstawie sposób implementacji kilku wybranych kodów sterujących, które zostały zestawione w poniższej tabeli w postaci dziesiętnej.

Opis instrukcjiKod sterujący włączający (DEC)Kod sterujący wyłączający (DEC)
Drukowanie czcionką podkreśloną.27 45 4927 45 48
Drukowanie czcionką ukośną.27 5227 53
Drukowanie od nowej strony (form feed).12-

Poniżej została zaprezentowana statyczna klasa, której zadaniem jest wstawianie odpowiednich kodów sterujących przekonwertowanych na znaki typu char.

public static class KodySterujace
{
public static string PodkreslenieCzcionki(bool czyCzcionkaMaBycPodkreslona = false)
{
if (czyCzcionkaMaBycPodkreslona)
return string.Format("{0}{1}{2}", Convert.ToChar(27), Convert.ToChar(45), Convert.ToChar(49));
else
return string.Format("{0}{1}{2}", Convert.ToChar(27), Convert.ToChar(45), Convert.ToChar(48));
}

public static string UkosnaCzcionka(bool czyCzcionkaMaBycUkosna = false)
{
if (czyCzcionkaMaBycUkosna)
return string.Format("{0}{1}", Convert.ToChar(27), Convert.ToChar(52));
else
return string.Format("{0}{1}", Convert.ToChar(27), Convert.ToChar(53));
}

public static string FormFeed()
{
return string.Format("{0}", Convert.ToChar(12));
}
}

Teraz tylko w programie należy wysłać odpowiednio sformatowany kod na drukarkę i cieszyć się efektami. Poniżej znajduje się przykładowy kod, który został zaczerpnięty z poprzedniego artykułu i odpowiednio rozbudowany o nowe funkcje.

private void DrukujTekstNaDrukarce()
{
StringBuilder sb = new StringBuilder();
sb.Append("Zwykly tekst");
sb.Append(KodySterujace.PodkreslenieCzcionki(true));
sb.Append("Tekst podkreślony");
sb.Append(KodySterujace.PodkreslenieCzcionki());
sb.Append(KodySterujace.UkosnaCzcionka(true));
sb.Append("Czcionka ukośna");
sb.Append(KodySterujace.UkosnaCzcionka());
sb.Append(KodySterujace.FormFeed());
sb.Append("Tekst na nowej stronie");
Encoding dstEncoding = Encoding.GetEncoding("ibm852");
byte[] dstBytes = dstEncoding.GetBytes(sb.ToString());
GCHandle pinnedArray = GCHandle.Alloc(dstBytes, GCHandleType.Pinned);
IntPtr pointer = pinnedArray.AddrOfPinnedObject();
WydrukLPT.SendBytesToPrinter(wybranaDrukarka, pointer, dstBytes.Length);
}

Kody te oczywiście można ze sobą mieszać, np.: ustawiając jednocześnie czcionke podkreśloną i ukośna.

W razie jakichkolwiek pytań, zapraszam do działu kontakt.