Po letech budování bezpapírové společnosti potiskneme víc papíru, než kdy předtím. Chcete se přidat? Naučím vás, jak z .NETu tisknout na běžné Windows tiskárně i jak komunikovat s pokladní tiskárnou pomocí ESC/POS sekvencí.

Tisk na jakékoliv Windows tiskárně

Chceme-li tisknout na jakékoliv tiskárně nainstalované ve Windows (tj. dostupné pomocí jeho tiskového subsystému), je třeba použít třídy z NuGet balíčku System.Drawing.Common. Ten je součástí .NETu, ale logicky funguje pouze na Windows. Hlavní je pro nás třída PrintDocument, která reprezentuje tiskovou úlohu. Pomocí eventu PrintPage lze získat objekt Graphics a do něj kreslit, psát texty a podobně.

Tisk na pokladní tiskárně pomocí ESC/POS

Pokladní tiskárny jsou posledními zástupci dnes již téměř vyhynulého druhu jehličkových tiskáren. Tisknou na úzký proužek teplocitlivého papíru (šíře buďto 58 mm nebo 80 mm). Můžeme na ně tisknout jako na jakoukoliv jinou Windows tiskárnu, nebo s nimi komunikovat přímo, textově. Jaký text jim pošleme, takový vytisknou, pomocí svého výchozího fontu. Výhodou tohoto přístupu je, že je většinou rychlejší, navíc můžeme využívat případné speciální funkce tiskárny.

Text můžeme doplnit řídícími kódy dle standardu ESC/POS (Epson Standard Codes for Point Of Sale), které mohou zařídit základní formátování písma, tisknout čárové nebo QR kódy anebo třeba řídit řezačku papíru nebo připojenou pokladní zásuvku. K vygenerování dat pro tiskárnu (nechceme-li kódy posílat ručně) lze použít třeba NuGet balíček ESCPOS.

Pokud je tiskárna dostupná pomocí síťového (TCP socket) nebo sériového (COM port) rozhraní, stačí prostě takto vygenerovaná data poslat. Pokud je ale tiskárna připojena jako standardní systémová tiskárna a my s ní chceme komunikovat přímo, potřebujeme balíček RawPrint.NetStd. Nezáleží přitom na tom, jak je tiskárna připojena fyzicky (USB, Bluetooth...), ale jak je nainstalována v systému logicky.

Tisk českých znaků

Používáme-li tisk přes grafický subsystém, můžeme používat jakékoliv písmo uznáme za vhodné, tiskne se graficky, a není tedy problém s českou diakritikou. Chceme-li tisknout v textovém režimu české znaky, musí to daná tiskárna podporovat. Je to (nepříliš) hezká vzpomínka na doby MS-DOSu a různé podivné hacky, které měly na obrazovce zobrazit nabodeníčka. Naštěstí se už nemusíme potýkat s kódováním dle bratrů Kamenických, ale vesměs si vystačíme s ISO 8859-2 nebo Windows-1250. Prý existují i pokladní tiskárny, které zvládají i UTF-8, ale tomu uvěřím, až takovou osobně dostanu do ruky. Bohužel, přesný postup (interní číselný kód patřičného kódování) je u různých modelů různý, takže nastavení se hodně liší.

Tiskárna Cashino PTP-II

Mám Bluetooth tiskárnu Cashino PTP-II, která se používá zejména v restauracích, a ta podporuje obě shora zmíněné znakové sady. V následujícím příkladu si můžete vyzkoušet, jak tisknout hezky česky:

Pokud vaše tiskárna nepodporuje českou znakovou sadu (což je běžné zejména u levných čínských tiskáren, neuzpůsobených lokálnímu trhu), možná podporuje možnost nahrát vlastní znaky. Pak budete muset navrhnout jejich grafickou podobu a jako bitmapu (tedy jedničky a nuly v matici, ne soubor ve formátu BMP) je nahrát do tiskárny. Pokud na to nemáte nervy nebo to tiskárna nepodporuje, jedinou možností je tisknout bez diakritiky.