Wysyłanie kodów sterujących do drukarek igłowych w C#
Dodany: 08:35, środa, 01 czerwca 2011
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 instrukcji | Kod sterujący włączający (DEC) | Kod sterujący wyłączający (DEC) |
|---|---|---|
| Drukowanie czcionką podkreśloną. | 27 45 49 | 27 45 48 |
| Drukowanie czcionką ukośną. | 27 52 | 27 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 string UkosnaCzcionka(bool czyCzcionkaMaBycUkosna = false)
{
public static string FormFeed()
{
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.
{
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.



